From 300ec36b3ae3cf3007e1317a02d5bfdd8e6ffe87 Mon Sep 17 00:00:00 2001 From: Matt Crees Date: Wed, 17 Sep 2025 14:37:53 +0100 Subject: [PATCH] Automatically build overcloud host images Trigger building new overcloud host images when a change to pulp-repo-versions.yml is pushed to stackhpc/2025.1. --- ...vercloud-host-image-build-path-filters.yml | 3 + ...=> stackhpc-pull-request-path-filters.yml} | 0 .../workflows/overcloud-host-image-build.yml | 49 +++++++++++++++- .../overcloud-host-image-promote.yml | 26 ++++++--- .github/workflows/stackhpc-promote.yml | 14 +++++ .github/workflows/stackhpc-pull-request.yml | 2 +- .../trigger-overcloud-host-image-build.yml | 44 +++++++++++++++ .../update-overcloud-host-image-tags.yml | 56 +++++++++++++++++++ 8 files changed, 183 insertions(+), 11 deletions(-) create mode 100644 .github/overcloud-host-image-build-path-filters.yml rename .github/{path-filters.yml => stackhpc-pull-request-path-filters.yml} (100%) create mode 100644 .github/workflows/trigger-overcloud-host-image-build.yml create mode 100644 .github/workflows/update-overcloud-host-image-tags.yml diff --git a/.github/overcloud-host-image-build-path-filters.yml b/.github/overcloud-host-image-build-path-filters.yml new file mode 100644 index 0000000000..00d99bcb7a --- /dev/null +++ b/.github/overcloud-host-image-build-path-filters.yml @@ -0,0 +1,3 @@ +# This file is a list of path filters for the overcloud host image build workflow in .github/workflows/trigger-overcloud-host-image-build.yml. +pulp-repo-versions: &pulp-repo-versions + - 'etc/kayobe/pulp-repo-versions.yml' diff --git a/.github/path-filters.yml b/.github/stackhpc-pull-request-path-filters.yml similarity index 100% rename from .github/path-filters.yml rename to .github/stackhpc-pull-request-path-filters.yml diff --git a/.github/workflows/overcloud-host-image-build.yml b/.github/workflows/overcloud-host-image-build.yml index fb7593dd0a..9c42f188aa 100644 --- a/.github/workflows/overcloud-host-image-build.yml +++ b/.github/workflows/overcloud-host-image-build.yml @@ -18,6 +18,10 @@ on: options: - SMS Lab - Leafcloud + create_skc_pr: + description: Propose PR to SKC + type: boolean + default: true secrets: KAYOBE_VAULT_PASSWORD: required: true @@ -44,7 +48,8 @@ jobs: runs-on: ${{ needs.runner-selection.outputs.runner_name_image_build }} needs: - runner-selection - permissions: {} + permissions: + actions: write steps: - name: Validate inputs run: | @@ -56,7 +61,7 @@ jobs: - name: Install Package uses: ConorMacBride/install-package@main with: - apt: git unzip nodejs python3-pip python3-venv openssh-server openssh-client jq + apt: git unzip nodejs python3-pip python3-venv openssh-server openssh-client jq gh - name: Start the SSH service run: | @@ -390,3 +395,43 @@ jobs: OS_APPLICATION_CREDENTIAL_ID: ${{ secrets.OS_APPLICATION_CREDENTIAL_ID }} OS_APPLICATION_CREDENTIAL_SECRET: ${{ secrets.OS_APPLICATION_CREDENTIAL_SECRET }} if: always() + + - name: Trigger update overcloud host image tags + run: | + gh workflow run \ + update-overcloud-host-image-tags.yml \ + --repo stackhpc/stackhpc-kayobe-config \ + --ref $BRANCH_NAME \ + $(if [[ "${{ inputs.rocky9 }}" == "true" ]]; then echo "-f rocky9_tag=${{ steps.host_image_tag.outputs.host_image_tag }}"; fi) \ + $(if [[ "${{ inputs.ubuntu-noble }}" == "true" ]]; then echo "-f ubuntu_noble_tag=${{ steps.host_image_tag.outputs.host_image_tag }}"; fi) + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + if: inputs.create_skc_pr + + - name: Display link to update overcloud host image tags workflows + run: | + echo "::notice Overcloud host image promote workflow: https://github.com/stackhpc/stackhpc-kayobe-config/actions/workflows/update-overcloud-host-image-tags.yml" + if: inputs.create_skc_pr + + - name: Send message to Slack via Workflow Builder + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "channel-id": "${{ env.SLACK_CHANNEL_ID }}", + "inputs": "${{ env.INPUTS }}", + "message": "${{ env.MESSAGE }}", + "results-url": "${{ env.RESULTS_URL }}", + "workflow-url": "${{ env.WORKFLOW_URL }}" + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + # #release-train-alerts + SLACK_CHANNEL_ID: C03B28HRP53 + INPUTS: >- + branch: ${{ github.ref_name }} + MESSAGE: "SKC overcloud host image build failed :sob:" + RESULTS_URL: "N/A" + WORKFLOW_URL: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" + if: failure() && inputs.create_skc_pr diff --git a/.github/workflows/overcloud-host-image-promote.yml b/.github/workflows/overcloud-host-image-promote.yml index b6d97f9ee5..fd5736d098 100644 --- a/.github/workflows/overcloud-host-image-promote.yml +++ b/.github/workflows/overcloud-host-image-promote.yml @@ -11,10 +11,6 @@ on: description: Promote Ubuntu 24.04 Noble type: boolean default: true - image_tag: - description: Tag to promote - type: string - required: true env: ANSIBLE_FORCE_COLOR: True jobs: @@ -71,6 +67,20 @@ jobs: source src/kayobe-config/kayobe-env --environment ci-builder && kayobe control host bootstrap + - name: Gather Rocky Linux 9 overcloud host image tag + id: rocky9_image_tag + run: | + echo image_tag=$(grep stackhpc_rocky_9_overcloud_host_image_version: etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT + working-directory: src/kayobe-config + if: inputs.rocky9 + + - name: Gather Ubuntu Noble overcloud host image tag + id: ubuntu_noble_image_tag + run: | + echo image_tag=$(grep stackhpc_ubuntu_noble_overcloud_host_image_version: etc/kayobe/pulp-host-image-versions.yml | awk '{print $2}') >> $GITHUB_OUTPUT + working-directory: src/kayobe-config + if: inputs.ubuntu-noble + - name: Promote Rocky Linux 9 overcloud host image artifact run: | source venvs/kayobe/bin/activate && @@ -79,9 +89,9 @@ jobs: src/kayobe-config/etc/kayobe/ansible/pulp/pulp-artifact-promote.yml \ -e artifact_type="kayobe-images" \ -e os_distribution='rocky' \ - -e os_release='9' + -e os_release='9' \ + -e promotion_tag=${{ steps.rocky9_image_tag.outputs.image_tag }} env: - ARTIFACT_TAG: ${{ inputs.image_tag }} KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} if: inputs.rocky9 @@ -93,8 +103,8 @@ jobs: src/kayobe-config/etc/kayobe/ansible/pulp/pulp-artifact-promote.yml \ -e artifact_type="kayobe-images" \ -e os_distribution='ubuntu' \ - -e os_release='noble' + -e os_release='noble' \ + -e promotion_tag=${{ steps.ubuntu_noble_image_tag.outputs.image_tag }} env: - ARTIFACT_TAG: ${{ inputs.image_tag }} KAYOBE_VAULT_PASSWORD: ${{ secrets.KAYOBE_VAULT_PASSWORD }} if: inputs.ubuntu-noble diff --git a/.github/workflows/stackhpc-promote.yml b/.github/workflows/stackhpc-promote.yml index 8524621465..50cfef0bac 100644 --- a/.github/workflows/stackhpc-promote.yml +++ b/.github/workflows/stackhpc-promote.yml @@ -44,6 +44,20 @@ jobs: run: | echo "::notice Container image promote workflow: https://github.com/stackhpc/stackhpc-release-train/actions/workflows/container-promote.yml" + - name: Trigger overcloud host image promotion + run: | + gh workflow run \ + overcloud-host-image-promote.yml \ + --repo stackhpc/stackhpc-kayobe-config \ + --ref $BRANCH_NAME + env: + GITHUB_TOKEN: ${{ secrets.STACKHPC_RELEASE_TRAIN_TOKEN }} + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + + - name: Display link to overcloud host image promotion workflows + run: | + echo "::notice Overcloud host image promote workflow: https://github.com/stackhpc/stackhpc-kayobe-config/actions/workflows/overcloud-host-image-promote.yml" + - name: Send message to Slack via Workflow Builder uses: slackapi/slack-github-action@v1.26.0 with: diff --git a/.github/workflows/stackhpc-pull-request.yml b/.github/workflows/stackhpc-pull-request.yml index bae165a3ed..6b313353d6 100644 --- a/.github/workflows/stackhpc-pull-request.yml +++ b/.github/workflows/stackhpc-pull-request.yml @@ -34,7 +34,7 @@ jobs: id: changes with: # Filters are defined in this file. - filters: .github/path-filters.yml + filters: .github/stackhpc-pull-request-path-filters.yml tox: runs-on: ubuntu-24.04 diff --git a/.github/workflows/trigger-overcloud-host-image-build.yml b/.github/workflows/trigger-overcloud-host-image-build.yml new file mode 100644 index 0000000000..dd70881978 --- /dev/null +++ b/.github/workflows/trigger-overcloud-host-image-build.yml @@ -0,0 +1,44 @@ +--- +name: Trigger overcloud host image build +on: + push: + branches: + - stackhpc/2025.1 + +jobs: + check-changes: + runs-on: ubuntu-24.04 + name: Check changed files + if: github.repository == 'stackhpc/stackhpc-kayobe-config' + outputs: + pulp-repo-versions: ${{ steps.changes.outputs.pulp-repo-versions }} + steps: + - name: GitHub Checkout + uses: actions/checkout@v4 + + - name: Check changed files + uses: dorny/paths-filter@v3 + id: changes + with: + filters: .github/overcloud-host-image-build-path-filters.yml + + trigger-overcloud-host-image-build: + runs-on: ubuntu-24.04 + name: Trigger overcloud host image build + needs: + - check-changes + if: ${{ needs.check-changes.outputs.pulp-repo-versions == 'true' }} + steps: + - name: Trigger overcloud host image build + run: | + gh workflow run \ + overcloud-host-image-build.yml \ + --repo stackhpc/stackhpc-kayobe-config \ + --ref $BRANCH_NAME + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH_NAME: ${{ github.head_ref || github.ref_name }} + + - name: Display link to overcloud host image build workflows + run: | + echo "::notice Overcloud host image build workflows: https://github.com/stackhpc/stackhpc-kayobe-config/actions/workflows/overcloud-host-image-build.yml" diff --git a/.github/workflows/update-overcloud-host-image-tags.yml b/.github/workflows/update-overcloud-host-image-tags.yml new file mode 100644 index 0000000000..9664009573 --- /dev/null +++ b/.github/workflows/update-overcloud-host-image-tags.yml @@ -0,0 +1,56 @@ +--- +name: Update overcloud host image tags + +on: + workflow_dispatch: + inputs: + rocky9_tag: + description: Overcloud host image tag for Rocky 9 + type: string + ubuntu_noble_tag: + description: Overcloud host image tag for Ubuntu + type: string + +jobs: + propose_overcloud_host_image_tag_updates: + if: github.repository == 'stackhpc/stackhpc-kayobe-config' + runs-on: ubuntu-22.04 + permissions: + contents: write + pull-requests: write + name: Update overcloud host image tags + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + ref: stackhpc/2025.1 + path: ${{ github.workspace }}/src/kayobe-config + + - name: Update Rocky 9 overcloud host image tag + run: | + sed -i "/stackhpc_rocky_9_overcloud_host_image_version/s/.*/stackhpc_rocky_9_overcloud_host_image_version: ${{ inputs.rocky9_tag }}/" ${{ github.workspace }}/src/kayobe-config/etc/kayobe/pulp-host-image-versions.yml + if: "${{ inputs.rocky9_tag != '' }}" + + - name: Update Ubuntu Noble overcloud host image tag + run: | + sed -i "/stackhpc_ubuntu_noble_overcloud_host_image_version/s/.*/stackhpc_ubuntu_noble_overcloud_host_image_version: ${{ inputs.ubuntu_noble_tag }}/" ${{ github.workspace }}/src/kayobe-config/etc/kayobe/pulp-host-image-versions.yml + if: "${{ inputs.ubuntu_noble_tag != '' }}" + + - name: Propose changes via PR if required + uses: peter-evans/create-pull-request@v7 + with: + path: ${{ github.workspace }}/src/kayobe-config + commit-message: >- + Bump overcloud host image tags + author: stackhpc-ci <22933334+stackhpc-ci@users.noreply.github.com> + branch: bump-overcloud-host-images-${{ inputs.rocky9_tag }}-${{ inputs.ubuntu_noble_tag }} + delete-branch: true + title: >- + Bump overcloud host image tags + body: | + This PR was created automatically to update the overcloud host image + tags. + Rocky 9: ${{ inputs.rocky9_tag }} + Ubuntu Noble: ${{ inputs.ubuntu_noble_tag }} + labels: | + automated