magnum-capi-helm-charts/.github/workflows/ensure-capi-images.yaml
Matt Pryor 413957e36c
Use a dependencies file (#55)
* First pass at reading dependencies from file

* Write to a file first

* Add manifest fetch

* Check manifest download

* See if job outputs support fromJSON

* Try again

* Try download from manifest

* Use explicit skip steps

* Use explicit image output name for curl

* See if complex matrix values work

* Re-enable tests in PR workflow

* Use deps file in tests

* Debug outputs

* Use toJSON

* Extract matrix outputs properly

* Reinstate tests

* Remove debug statements

* [skip ci] don't run CI on edited PRs

* [skip ci] Remove edited trigger from PR workflow
2023-07-26 15:37:54 +01:00

107 lines
3.7 KiB
YAML

name: Ensure CAPI images
on:
workflow_call:
outputs:
kube-1-25-image:
value: ${{ jobs.produce_outputs.outputs.kube-1-25-image }}
kube-1-25-version:
value: ${{ jobs.produce_outputs.outputs.kube-1-25-version }}
kube-1-26-image:
value: ${{ jobs.produce_outputs.outputs.kube-1-26-image }}
kube-1-26-version:
value: ${{ jobs.produce_outputs.outputs.kube-1-26-version }}
kube-1-27-image:
value: ${{ jobs.produce_outputs.outputs.kube-1-27-image }}
kube-1-27-version:
value: ${{ jobs.produce_outputs.outputs.kube-1-27-version }}
jobs:
image_manifest:
runs-on: ubuntu-latest
outputs:
manifest: ${{ steps.images.outputs.manifest }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Fetch image details
id: images
run: |
VN="$(jq -r '.["azimuth-images"]' ./dependencies.json)"
MANIFEST="$(curl -fsSL "https://github.com/stackhpc/azimuth-images/releases/download/${VN}/manifest.json")"
echo "manifest=$(jq -c . <<< "$MANIFEST")" >> $GITHUB_OUTPUT
ensure_image:
runs-on: ubuntu-latest
needs: [image_manifest]
strategy:
fail-fast: false
matrix:
include:
- name: kube-1-25
image: ${{ fromJSON(needs.image_manifest.outputs.manifest).kubernetes-1-25-jammy }}
skip: ${{ github.event.pull_request.draft }}
- name: kube-1-26
image: ${{ fromJSON(needs.image_manifest.outputs.manifest).kubernetes-1-26-jammy }}
skip: ${{ github.event.pull_request.draft }}
- name: kube-1-27
image: ${{ fromJSON(needs.image_manifest.outputs.manifest).kubernetes-1-27-jammy }}
skip: false
steps:
- name: Checkout
uses: actions/checkout@v3
if: ${{ !matrix.skip }}
- name: Write cloud credential
run: >
echo "$CLOUD" > clouds.yml
shell: bash
env:
CLOUD: ${{ secrets.CLOUD }}
if: ${{ !matrix.skip }}
- uses: actions/setup-python@v4
with:
python-version: '3.9'
check-latest: true
if: ${{ !matrix.skip }}
- name: Install OpenStack CLI
run: pip install python-openstackclient
if: ${{ !matrix.skip }}
- name: Ensure Kubernetes image
id: ensure-image
uses: ./.github/actions/ensure-image
with:
image-name: ${{ matrix.image.name }}
image-url: ${{ matrix.image.url }}
if: ${{ !matrix.skip }}
- name: Write matrix outputs
uses: cloudposse/github-action-matrix-outputs-write@main
with:
matrix-step-name: ${{ github.job }}
matrix-key: ${{ matrix.name }}
outputs: |-
image-id: ${{ steps.ensure-image.outputs.image-id }}
kube-version: ${{ matrix.image.kubernetes_version }}
if: ${{ !matrix.skip }}
produce_outputs:
runs-on: ubuntu-latest
needs: [ensure_image]
outputs:
kube-1-25-image: ${{ fromJSON(steps.matrix-outputs.outputs.result).image-id.kube-1-25 }}
kube-1-25-version: ${{ fromJSON(steps.matrix-outputs.outputs.result).kube-version.kube-1-25 }}
kube-1-26-image: ${{ fromJSON(steps.matrix-outputs.outputs.result).image-id.kube-1-26 }}
kube-1-26-version: ${{ fromJSON(steps.matrix-outputs.outputs.result).kube-version.kube-1-26 }}
kube-1-27-image: ${{ fromJSON(steps.matrix-outputs.outputs.result).image-id.kube-1-27 }}
kube-1-27-version: ${{ fromJSON(steps.matrix-outputs.outputs.result).kube-version.kube-1-27 }}
steps:
- name: Read matrix outputs
id: matrix-outputs
uses: cloudposse/github-action-matrix-outputs-read@main
with:
matrix-step-name: ensure_image