Azure: AlmaLinux 10 Build, Release, Test, Publish #8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "Azure: Build, Release, Test, Publish" | |
| run-name: >- | |
| Azure: AlmaLinux ${{ inputs.version_major == '10-kitten' && 'Kitten 10' || inputs.version_major }} Build, Release, Test, Publish | |
| # Unified Azure pipeline: build the .raw images with Packer, release each | |
| # built image to the Compute Gallery directly from the build runner (no S3 | |
| # round-trip), boot-test every gallery-released image, and publish every | |
| # image that passed its test to the Azure Marketplace. | |
| # | |
| # The pipeline is three INDEPENDENT per-image chains | |
| # | |
| # build-x86_64 -> test-x86_64 -> publish-x86_64 | |
| # build-aarch64 -> test-aarch64 -> publish-aarch64 | |
| # build-aarch64-64k -> test-aarch64-64k -> publish-aarch64-64k | |
| # | |
| # rather than build-matrix -> collect -> test-matrix -> collect -> publish: | |
| # with per-image chains, "Re-run failed jobs" re-runs ONLY the failed | |
| # image's own downstream jobs - a sibling image that already tested and | |
| # published is not re-tested and, above all, not re-published. Each build | |
| # leg's gallery stage uploads an azure-manifest-<variant>-<arch>.json | |
| # artifact; the image's test job downloads it (artifacts survive re-run | |
| # attempts, so a re-run test needs no re-build) and exposes its fields as | |
| # job outputs for the publish job. | |
| # | |
| # The aarch64 and aarch64-64k images share the almalinux-arm Marketplace | |
| # offer, and parallel Product Ingestion configure calls collide on the | |
| # offer's draft revision - their publish jobs are serialised through a | |
| # run-scoped concurrency group (two jobs at most: one runs, one queues). | |
| # | |
| # Stage gating: | |
| # release_to_gallery=false -> build-only run (gallery / test / publish skip) | |
| # release_to_marketplace=false -> build + gallery + test (publish skips) | |
| # submit_to_preview=true -> only honored when release_to_marketplace=true | |
| # | |
| # Stage implementations live in composite actions: | |
| # .github/actions/shared-steps - Packer build (all clouds) | |
| # .github/actions/azure-gallery-steps - tools/azure_uploader.sh wrapper | |
| # .github/actions/azure-test-steps - gallery image boot test | |
| # .github/actions/azure-marketplace-steps - Partner Center publish | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| date_time_stamp: | |
| description: 'Custom date+time stamp, YYYYMMDDhhmmss' | |
| required: false | |
| default: '' | |
| version_major: | |
| description: 'AlmaLinux major version' | |
| required: true | |
| default: '10' | |
| type: choice | |
| options: | |
| - 10-kitten | |
| - 10 | |
| - 9 | |
| - 8 | |
| self-hosted: | |
| description: "Build aarch64 image on self-hosted runner" | |
| required: true | |
| type: boolean | |
| default: true | |
| store_as_artifact: | |
| description: "Store images to the workflow Artifacts" | |
| required: true | |
| type: boolean | |
| default: false | |
| upload_to_s3: | |
| description: "Upload to S3 Bucket" | |
| required: true | |
| type: boolean | |
| default: true | |
| release_to_gallery: | |
| description: "Release to Compute Gallery (gates test and publish)" | |
| required: true | |
| type: boolean | |
| default: true | |
| community_gallery: | |
| description: "Use Community gallery (AlmaLinux 10/Kitten always go Private)" | |
| required: true | |
| type: boolean | |
| default: true | |
| release_to_marketplace: | |
| description: "Publish tested images to Marketplace as drafts" | |
| required: true | |
| type: boolean | |
| default: true | |
| submit_to_preview: | |
| description: "Also submit drafts to Preview/certification" | |
| required: true | |
| type: boolean | |
| default: false | |
| notify_mattermost: | |
| description: "Send notification to Mattermost" | |
| required: true | |
| type: boolean | |
| default: true | |
| env: | |
| PACKER_GITHUB_API_TOKEN: ${{ secrets.GIT_HUB_TOKEN }} | |
| jobs: | |
| init-data: | |
| name: Initialize common data | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| time_stamp: ${{ steps.date-time-stamp.outputs.time_stamp }} | |
| date_stamp: ${{ steps.date-time-stamp.outputs.date_stamp }} | |
| steps: | |
| - name: Date+time stamp | |
| id: date-time-stamp | |
| run: | | |
| # date+time stamp, YYYYMMDDhhmmss | |
| if [ "${{ inputs.date_time_stamp }}" != "" ]; then | |
| date_time_stamp="${{ inputs.date_time_stamp }}" | |
| else | |
| date_time_stamp=$(date -u '+%Y%m%d%H%M%S') | |
| fi | |
| echo "time_stamp=${date_time_stamp}" >> $GITHUB_OUTPUT | |
| # date stamp, YYYYMMDD | |
| date_stamp=${date_time_stamp:0:-6} | |
| echo "date_stamp=${date_stamp}" >> "$GITHUB_OUTPUT" | |
| build-x86_64: | |
| name: Build (and release) x86_64 | |
| permissions: | |
| id-token: write | |
| contents: read | |
| needs: [init-data] | |
| # use runs-on runners if within the almalinux org, otherwise GH runners. | |
| # volume=80g: the gallery stage converts the 30 GiB .raw to a fixed VHD on | |
| # the same volume, roughly doubling the image footprint - leave headroom. | |
| runs-on: >- | |
| ${{ | |
| github.repository_owner == 'AlmaLinux' && | |
| format('runs-on={0}/family=r8i.2xlarge/image=ubuntu24-full-x64/volume=80g/nested-virt/spot=false', github.run_id) | |
| || | |
| 'ubuntu-24.04' | |
| }} | |
| env: | |
| TIME_STAMP: ${{ needs.init-data.outputs.time_stamp }} | |
| DATE_STAMP: ${{ needs.init-data.outputs.date_stamp }} | |
| steps: | |
| - name: Checkout ${{ github.action_repository }} | |
| uses: actions/checkout@v6 | |
| - uses: ./.github/actions/shared-steps | |
| name: ${{ inputs.version_major }} azure-x86_64 image | |
| with: | |
| type: azure | |
| variant: ${{ inputs.version_major }} | |
| arch: x86_64 | |
| S3_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| S3_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_REGION: ${{ vars.AWS_REGION }} | |
| AWS_S3_BUCKET: ${{ vars.AWS_S3_BUCKET }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| store_as_artifact: ${{ inputs.store_as_artifact }} | |
| upload_to_s3: ${{ inputs.upload_to_s3 }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| run_test: 'false' | |
| runner: ${{ github.repository_owner == 'AlmaLinux' && 'aws-ec2' || 'gh_hosted' }} | |
| env: | |
| PACKER_GITHUB_API_TOKEN: ${{ secrets.GIT_HUB_TOKEN }} | |
| - uses: ./.github/actions/azure-gallery-steps | |
| name: Release ${{ inputs.version_major }} azure-x86_64 image to Gallery | |
| if: ${{ inputs.release_to_gallery }} | |
| with: | |
| image_file: ${{ env.IMAGE_FILE }} | |
| variant: ${{ inputs.version_major }} | |
| arch: x86_64 | |
| community_gallery: ${{ inputs.community_gallery }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| # The job is to start self-hosted runner on AWS EC2 instance if not in the almalinux org | |
| # It does nothing if in the almalinux org, so 'Setup and start runner' step is skipped | |
| start-self-hosted-runner: | |
| name: Start self-hosted runner(s) | |
| if: ${{ inputs.self-hosted }} | |
| runs-on: ubuntu-24.04 | |
| needs: [init-data] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| variant: >- | |
| ${{ fromJSON( | |
| ( inputs.version_major == '9' || inputs.version_major == '10' || inputs.version_major == '10-kitten' ) | |
| && format('["{0}", "{0}-64k"]', inputs.version_major) | |
| || format('["{0}"]', inputs.version_major) | |
| ) }} | |
| steps: | |
| - name: Setup and start runner | |
| if: github.repository_owner != 'AlmaLinux' | |
| uses: unblocked/ec2-action-builder@v1.12 | |
| with: | |
| github_token: ${{ secrets.GIT_HUB_TOKEN }} | |
| aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| aws_region: ${{ vars.AWS_REGION }} | |
| ec2_ami_id: ${{ secrets.EC2_AMI_ID_AL9_AARCH64 }} | |
| ec2_subnet_id: ${{ secrets.EC2_SUBNET_ID}} # Subnet and Security Group should match | |
| ec2_security_group_id: ${{ secrets.EC2_SECURITY_GROUP_ID }} # Availability Zones list for 'a1.metal' Instance Type | |
| ec2_instance_type: a1.metal | |
| ec2_root_disk_size_gb: "80" # the gallery stage needs room for the raw image + its fixed-VHD conversion | |
| ec2_root_disk_ebs_class: "gp3" # use faster and cheeper storage instead of default 'gp2' | |
| ec2_instance_ttl: 30 # Optional (default is 60 minutes) | |
| ec2_spot_instance_strategy: None # Other options are: SpotOnly, BestEffort, MaxPerformance | |
| ec2_instance_tags: > # Required for IAM role resource permission scoping | |
| [ | |
| {"Key": "Project", "Value": "GitHub Actions Self-hosted Runners"} | |
| ] | |
| build-aarch64: | |
| name: Build (and release) aarch64 | |
| permissions: | |
| id-token: write | |
| contents: read | |
| if: ${{ inputs.self-hosted }} | |
| needs: [init-data, start-self-hosted-runner] | |
| # If almalinux org, use RunsOn with almalinux-9-aarch64 on a1.metal. | |
| # volume=80g (was 40g in azure-build.yml): the gallery stage converts the | |
| # .raw to a fixed VHD on the same volume. | |
| # | |
| # Otherwise use AWS EC2 Self-Hosted aarch64 runner set up with the 'start-self-hosted-runner' job above | |
| runs-on: >- | |
| ${{ | |
| github.repository_owner == 'AlmaLinux' && | |
| format('runs-on={0}/family=a1.metal/image=almalinux-9-aarch64/volume=80g/spot=false', github.run_id) | |
| || | |
| github.run_id | |
| }} | |
| env: | |
| TIME_STAMP: ${{ needs.init-data.outputs.time_stamp }} | |
| DATE_STAMP: ${{ needs.init-data.outputs.date_stamp }} | |
| steps: | |
| - name: Checkout ${{ github.action_repository }} | |
| uses: actions/checkout@v6 | |
| - uses: ./.github/actions/shared-steps | |
| name: ${{ inputs.version_major }} azure-aarch64 image | |
| with: | |
| type: azure | |
| variant: ${{ inputs.version_major }} | |
| arch: aarch64 | |
| S3_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| S3_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_REGION: ${{ vars.AWS_REGION }} | |
| AWS_S3_BUCKET: ${{ vars.AWS_S3_BUCKET }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| store_as_artifact: ${{ inputs.store_as_artifact }} | |
| upload_to_s3: ${{ inputs.upload_to_s3 }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| run_test: 'false' | |
| runner: aws-ec2 | |
| env: | |
| PACKER_GITHUB_API_TOKEN: ${{ secrets.GIT_HUB_TOKEN }} | |
| - uses: ./.github/actions/azure-gallery-steps | |
| name: Release ${{ inputs.version_major }} azure-aarch64 image to Gallery | |
| if: ${{ inputs.release_to_gallery }} | |
| with: | |
| image_file: ${{ env.IMAGE_FILE }} | |
| variant: ${{ inputs.version_major }} | |
| arch: aarch64 | |
| community_gallery: ${{ inputs.community_gallery }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| build-aarch64-64k: | |
| name: Build (and release) aarch64-64k | |
| permissions: | |
| id-token: write | |
| contents: read | |
| # the 64k page-size kernel variant exists for 9 / 10 / Kitten only | |
| if: >- | |
| ${{ | |
| inputs.self-hosted && | |
| ( inputs.version_major == '9' || inputs.version_major == '10' || inputs.version_major == '10-kitten' ) | |
| }} | |
| needs: [init-data, start-self-hosted-runner] | |
| runs-on: >- | |
| ${{ | |
| github.repository_owner == 'AlmaLinux' && | |
| format('runs-on={0}/family=a1.metal/image=almalinux-9-aarch64/volume=80g/spot=false', github.run_id) | |
| || | |
| github.run_id | |
| }} | |
| env: | |
| TIME_STAMP: ${{ needs.init-data.outputs.time_stamp }} | |
| DATE_STAMP: ${{ needs.init-data.outputs.date_stamp }} | |
| steps: | |
| - name: Checkout ${{ github.action_repository }} | |
| uses: actions/checkout@v6 | |
| - uses: ./.github/actions/shared-steps | |
| name: ${{ inputs.version_major }}-64k azure-aarch64 image | |
| with: | |
| type: azure | |
| variant: ${{ inputs.version_major }}-64k | |
| arch: aarch64 | |
| S3_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
| S3_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
| AWS_REGION: ${{ vars.AWS_REGION }} | |
| AWS_S3_BUCKET: ${{ vars.AWS_S3_BUCKET }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| store_as_artifact: ${{ inputs.store_as_artifact }} | |
| upload_to_s3: ${{ inputs.upload_to_s3 }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| run_test: 'false' | |
| runner: aws-ec2 | |
| env: | |
| PACKER_GITHUB_API_TOKEN: ${{ secrets.GIT_HUB_TOKEN }} | |
| - uses: ./.github/actions/azure-gallery-steps | |
| name: Release ${{ inputs.version_major }}-64k azure-aarch64 image to Gallery | |
| if: ${{ inputs.release_to_gallery }} | |
| with: | |
| image_file: ${{ env.IMAGE_FILE }} | |
| variant: ${{ inputs.version_major }}-64k | |
| arch: aarch64 | |
| community_gallery: ${{ inputs.community_gallery }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| # Per-image test jobs. Each downloads its build leg's gallery manifest | |
| # artifact (artifacts survive "Re-run failed jobs", so a re-run test needs | |
| # no re-build) and exposes the manifest fields as job outputs for the | |
| # matching publish job. | |
| test-x86_64: | |
| name: Test x86_64 | |
| permissions: | |
| id-token: write | |
| contents: read | |
| runs-on: ubuntu-24.04 | |
| needs: [build-x86_64] | |
| if: ${{ inputs.release_to_gallery }} | |
| outputs: | |
| image_file: ${{ steps.manifest.outputs.image_file }} | |
| blob_url: ${{ steps.manifest.outputs.blob_url }} | |
| eligible: ${{ steps.manifest.outputs.eligible }} | |
| steps: | |
| - name: Checkout ${{ github.action_repository }} | |
| uses: actions/checkout@v6 | |
| - name: Download gallery manifest | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: azure-manifest-${{ inputs.version_major }}-x86_64.json | |
| path: manifest | |
| - name: Read gallery manifest | |
| id: manifest | |
| run: | | |
| # Read gallery manifest | |
| f=$(ls manifest/azure-manifest-*.json) | |
| jq '.' "${f}" | |
| { | |
| echo "test_path=$(jq -r '.test_path' "${f}")" | |
| echo "image_file=$(jq -r '.image_file' "${f}")" | |
| echo "blob_url=$(jq -r '.blob_url' "${f}")" | |
| echo "eligible=$(jq -r '.marketplace_eligible' "${f}")" | |
| } >> "$GITHUB_OUTPUT" | |
| - uses: ./.github/actions/azure-test-steps | |
| name: Test ${{ steps.manifest.outputs.test_path }} | |
| with: | |
| compute_gallery_path: ${{ steps.manifest.outputs.test_path }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| test-aarch64: | |
| name: Test aarch64 | |
| permissions: | |
| id-token: write | |
| contents: read | |
| runs-on: ubuntu-24.04 | |
| needs: [build-aarch64] | |
| if: ${{ inputs.release_to_gallery }} | |
| outputs: | |
| image_file: ${{ steps.manifest.outputs.image_file }} | |
| blob_url: ${{ steps.manifest.outputs.blob_url }} | |
| eligible: ${{ steps.manifest.outputs.eligible }} | |
| steps: | |
| - name: Checkout ${{ github.action_repository }} | |
| uses: actions/checkout@v6 | |
| - name: Download gallery manifest | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: azure-manifest-${{ inputs.version_major }}-aarch64.json | |
| path: manifest | |
| - name: Read gallery manifest | |
| id: manifest | |
| run: | | |
| # Read gallery manifest | |
| f=$(ls manifest/azure-manifest-*.json) | |
| jq '.' "${f}" | |
| { | |
| echo "test_path=$(jq -r '.test_path' "${f}")" | |
| echo "image_file=$(jq -r '.image_file' "${f}")" | |
| echo "blob_url=$(jq -r '.blob_url' "${f}")" | |
| echo "eligible=$(jq -r '.marketplace_eligible' "${f}")" | |
| } >> "$GITHUB_OUTPUT" | |
| - uses: ./.github/actions/azure-test-steps | |
| name: Test ${{ steps.manifest.outputs.test_path }} | |
| with: | |
| compute_gallery_path: ${{ steps.manifest.outputs.test_path }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| test-aarch64-64k: | |
| name: Test aarch64-64k | |
| permissions: | |
| id-token: write | |
| contents: read | |
| runs-on: ubuntu-24.04 | |
| needs: [build-aarch64-64k] | |
| if: ${{ inputs.release_to_gallery }} | |
| outputs: | |
| image_file: ${{ steps.manifest.outputs.image_file }} | |
| blob_url: ${{ steps.manifest.outputs.blob_url }} | |
| eligible: ${{ steps.manifest.outputs.eligible }} | |
| steps: | |
| - name: Checkout ${{ github.action_repository }} | |
| uses: actions/checkout@v6 | |
| - name: Download gallery manifest | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: azure-manifest-${{ inputs.version_major }}-64k-aarch64.json | |
| path: manifest | |
| - name: Read gallery manifest | |
| id: manifest | |
| run: | | |
| # Read gallery manifest | |
| f=$(ls manifest/azure-manifest-*.json) | |
| jq '.' "${f}" | |
| { | |
| echo "test_path=$(jq -r '.test_path' "${f}")" | |
| echo "image_file=$(jq -r '.image_file' "${f}")" | |
| echo "blob_url=$(jq -r '.blob_url' "${f}")" | |
| echo "eligible=$(jq -r '.marketplace_eligible' "${f}")" | |
| } >> "$GITHUB_OUTPUT" | |
| - uses: ./.github/actions/azure-test-steps | |
| name: Test ${{ steps.manifest.outputs.test_path }} | |
| with: | |
| compute_gallery_path: ${{ steps.manifest.outputs.test_path }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| # Per-image publish jobs: each is gated on its OWN image's test succeeding | |
| # and the manifest saying the image has a Marketplace plan. | |
| publish-x86_64: | |
| name: Publish to marketplace x86_64 | |
| permissions: | |
| id-token: write | |
| contents: read | |
| runs-on: ubuntu-24.04 | |
| needs: [test-x86_64] | |
| if: ${{ inputs.release_to_marketplace && needs.test-x86_64.outputs.eligible == 'true' }} | |
| steps: | |
| - name: Checkout ${{ github.action_repository }} | |
| uses: actions/checkout@v6 | |
| - uses: ./.github/actions/azure-marketplace-steps | |
| name: Publish ${{ needs.test-x86_64.outputs.image_file }} to Marketplace | |
| with: | |
| image_blob_url: ${{ needs.test-x86_64.outputs.blob_url }} | |
| release_to_marketplace: 'true' | |
| submit_to_preview: ${{ inputs.submit_to_preview }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| publish-aarch64: | |
| name: Publish to marketplace aarch64 | |
| permissions: | |
| id-token: write | |
| contents: read | |
| runs-on: ubuntu-24.04 | |
| needs: [test-aarch64] | |
| if: ${{ inputs.release_to_marketplace && needs.test-aarch64.outputs.eligible == 'true' }} | |
| # aarch64 and aarch64-64k share the almalinux-arm offer; serialise their | |
| # Product Ingestion configure calls (run-scoped group, two jobs at most) | |
| concurrency: | |
| group: azure-marketplace-arm-${{ github.run_id }} | |
| cancel-in-progress: false | |
| steps: | |
| - name: Checkout ${{ github.action_repository }} | |
| uses: actions/checkout@v6 | |
| - uses: ./.github/actions/azure-marketplace-steps | |
| name: Publish ${{ needs.test-aarch64.outputs.image_file }} to Marketplace | |
| with: | |
| image_blob_url: ${{ needs.test-aarch64.outputs.blob_url }} | |
| release_to_marketplace: 'true' | |
| submit_to_preview: ${{ inputs.submit_to_preview }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} | |
| publish-aarch64-64k: | |
| name: Publish to marketplace aarch64-64k | |
| permissions: | |
| id-token: write | |
| contents: read | |
| runs-on: ubuntu-24.04 | |
| needs: [test-aarch64-64k] | |
| if: ${{ inputs.release_to_marketplace && needs.test-aarch64-64k.outputs.eligible == 'true' }} | |
| concurrency: | |
| group: azure-marketplace-arm-${{ github.run_id }} | |
| cancel-in-progress: false | |
| steps: | |
| - name: Checkout ${{ github.action_repository }} | |
| uses: actions/checkout@v6 | |
| - uses: ./.github/actions/azure-marketplace-steps | |
| name: Publish ${{ needs.test-aarch64-64k.outputs.image_file }} to Marketplace | |
| with: | |
| image_blob_url: ${{ needs.test-aarch64-64k.outputs.blob_url }} | |
| release_to_marketplace: 'true' | |
| submit_to_preview: ${{ inputs.submit_to_preview }} | |
| notify_mattermost: ${{ inputs.notify_mattermost }} | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }} | |
| MATTERMOST_CHANNEL: ${{ vars.MATTERMOST_CHANNEL }} |