Skip to content

GCP cloud-image-tests #120

GCP cloud-image-tests

GCP cloud-image-tests #120

Workflow file for this run

name: GCP cloud-image-tests
on:
workflow_dispatch:
inputs:
version_major:
description: 'AlmaLinux major version'
required: true
default: '10'
type: choice
options:
- 10-kitten
- 10
- 9
- 8
arch:
description: 'Architecture to test'
required: true
default: 'ALL'
type: choice
options:
- ALL
- x86_64
- aarch64
image_override:
description: 'Image to test, overrides version_major to test a direct image instead. Architecture must be set properly for the image being passed. This must be a full path to a GCP image, for example, projects/almalinux-dev-images-469421/global/images/almalinux-9-v20230920'
required: false
default: ''
# notify_mattermost:
# description: "Send notification to Mattermost"
# required: true
# type: boolean
# default: false
jobs:
init-data:
runs-on: ubuntu-latest
outputs:
image_path: ${{ steps.determine_image.outputs.image_path }}
steps:
- name: Determine image to test
id: determine_image
run: |
if [ -n "${{ inputs.image_override }}" ]; then
echo "Using image override: ${{ inputs.image_override }}"
image_path="${{ inputs.image_override }}"
elif [ "${{ inputs.arch == 'ALL' }}" ]; then
echo "Using version major: ${{ inputs.version_major }}"
echo "Using all architectures"
image_path="projects/almalinux-dev-images-469421/global/images/family/almalinux-${{ inputs.version_major }}"
else
echo "Using version major: ${{ inputs.version_major }}"
echo "Using arch: ${{ inputs.arch }}"
image_path="projects/almalinux-dev-images-469421/global/images/family/almalinux-${{ inputs.version_major }}"
fi
echo "Determined image path: ${image_path}"
echo "image_path=${image_path}" >> $GITHUB_OUTPUT
# this runs an initial set of smoke tests against a shape that we can use with high concurrency
# this is to speed up the feedback loop in case something obvious can be caught quickly with a new image
# without having to wait on the full run of per-shape tests which takes a while
test-gcp-initialtest:
name: AlmaLinux ${{ inputs.image_override || format('{0} {1}', inputs.version_major, matrix.arch) }} Initial Tests
needs: init-data
permissions:
id-token: write
contents: read
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
# this sets the arch matrix based on the input
# if input is ALL, then set to both x86_64 and aarch64
# otherwise set to the selected arch
arch: ${{ fromJSON(inputs.arch == 'ALL' && '["x86_64","aarch64"]' || format('["{0}"]', inputs.arch)) }}
steps:
# we don't need the checked out files, but this is required for the google auth action to work
- uses: 'actions/checkout@v5'
- id: 'google-auth-image-testing'
uses: 'google-github-actions/auth@v2'
with:
workload_identity_provider: 'projects/527193872801/locations/global/workloadIdentityPools/github-actions/providers/github'
service_account: 'github-actions-image-testing@almalinux-image-testing-469421.iam.gserviceaccount.com'
- name: 'Set up Google Cloud SDK'
uses: 'google-github-actions/[email protected]'
- name: 'Run Google cloud-image-testing tests which are hard-coded to specific shapes'
shell: bash
run: |
docker run \
-v ${{ env.GOOGLE_GHA_CREDS_PATH }}:/creds/auth.json \
-e GOOGLE_APPLICATION_CREDENTIALS=/creds/auth.json \
gcr.io/compute-image-tools/cloud-image-tests:latest \
-project almalinux-image-testing-469421 \
-parallel_count 20 \
-parallel_stagger 1s \
-filter '^(cvm|livemigrate|suspendresume|loadbalancer|guestagent|hostnamevalidation|imageboot|licensevalidation|network|security|hotattach|packagevalidation|ssh|metadata)$' \
-images '${{ needs.init-data.outputs.image_path }}${{ inputs.image_override == '' && matrix.arch == 'aarch64' && '-arm64' || ''}}' \
${{ matrix.arch == '' && '-arm64_shape c4a-standard-8' || '-x86_shape c4-standard-8' }}
# this runs tests which are hard-coded to specific shapes in CIT
# running them against all shapes would be pointless as they are forced to specific shapes anyway
test-gcp-nonpershape:
name: AlmaLinux ${{ inputs.image_override || format('{0} {1}', inputs.version_major, matrix.arch) }} Non-Per-Shape Tests
needs: init-data
permissions:
id-token: write
contents: read
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
# this sets the arch matrix based on the input
# if input is ALL, then set to both x86_64 and aarch64
# otherwise set to the selected arch
arch: ${{ fromJSON(inputs.arch == 'ALL' && '["x86_64","aarch64"]' || format('["{0}"]', inputs.arch)) }}
steps:
# we don't need the checked out files, but this is required for the google auth action to work
- uses: 'actions/checkout@v5'
- id: 'google-auth-image-testing'
uses: 'google-github-actions/auth@v2'
with:
workload_identity_provider: 'projects/527193872801/locations/global/workloadIdentityPools/github-actions/providers/github'
service_account: 'github-actions-image-testing@almalinux-image-testing-469421.iam.gserviceaccount.com'
- name: 'Set up Google Cloud SDK'
uses: 'google-github-actions/[email protected]'
- name: 'Run Google cloud-image-testing tests which are hard-coded to specific shapes'
shell: bash
run: |
docker run \
-v ${{ env.GOOGLE_GHA_CREDS_PATH }}:/creds/auth.json \
-e GOOGLE_APPLICATION_CREDENTIALS=/creds/auth.json \
gcr.io/compute-image-tools/cloud-image-tests:latest \
-project almalinux-image-testing-469421 \
-parallel_stagger 10s \
-filter '^(lssd|disk|vmspec)$' \
-images '${{ needs.init-data.outputs.image_path }}${{ inputs.image_override == '' && matrix.arch == 'aarch64' && '-arm64' || ''}}'
test-gcp-pershape-x86_64:
name: ${{ inputs.image_override || format('{0}', inputs.version_major) }} x86_64 ${{ matrix.shape }}
needs: [init-data,test-gcp-initialtest]
permissions:
id-token: write
contents: read
runs-on: "${{ github.repository_owner == 'AlmaLinux' && format('runs-on={0}/runner=2cpu-linux-x64/spot=false/image=almalinux-10-x86_64', github.run_id) || 'ubuntu-24.04' }}"
if: inputs.arch == 'ALL' || inputs.arch == 'x86_64'
strategy:
fail-fast: false
matrix:
shape:
- n4-standard-2
- n4-standard-80
- n2-standard-2
- n2-standard-128
- n2d-standard-2
- n2d-standard-224
- n1-standard-1
- n1-standard-96
- c4-standard-2
# can never get capacity for 288 so using 192
- c4-standard-192
# all lssd shapes fail
# https://github.com/GoogleCloudPlatform/cloud-image-tests/issues/345
# - c4-standard-4-lssd
# - c4-standard-288-lssd
# never has capacity anywhere
# - c4-standard-288-metal
- c4d-standard-2
# can never get capacity for 384 so using 192
- c4d-standard-192
# - c4d-standard-8-lssd
# - c4d-standard-384-lssd
- c3-standard-4
- c3-standard-176
# <failure message="" type="Failure"><![CDATA[step "create-vms" run error: googleapi: Error 400: C3 Metal instance does not support multi-vNIC., badRequest]]></failure>
# - c3-standard-192-metal
# lssd always fails
# - c3-standard-4-lssd
# - c3-standard-176-lssd
- c3d-standard-4
- c3d-standard-360
# - c3d-standard-8-lssd
# - c3d-standard-360-lssd
- e2-standard-2
- e2-standard-32
- e2-medium
- t2d-standard-1
- t2d-standard-60
# h4d tests fail
# https://github.com/GoogleCloudPlatform/cloud-image-tests/issues/346
# - h4d-standard-192
# - h4d-highmem-192-lssd
# can never get capacity for this shape
# - h3-standard-88
- c2-standard-4
- c2-standard-60
- c2d-standard-2
- c2d-standard-112
# m4, x4, m3, m2 disabled due to no quotas
# - m4-megamem-28
# - m4-megamem-224
# - x4-megamem-960-metal
# - x4-megamem-1920-metal
# - m3-megamem-64
# - m2-megamem-416
# m1 quota too low
# - m1-megamem-96
# z3 tests fail
# https://github.com/GoogleCloudPlatform/cloud-image-tests/issues/346
# z3 tests not needed, basically c3 with lots of lssd, so covered by c3-lssd tests
# - z3-highmem-14-standardlssd
# things with special zone requirements or other special needs
# include:
# only available in us-central1-b
# disabled, never any capacity available
# - shape: c4d-standard-384-metal
# zone: us-central1-b
steps:
# we don't need the checked out files, but this is required for the google auth action to work
- uses: 'actions/checkout@v5'
- id: 'google-auth-image-testing'
uses: 'google-github-actions/auth@v2'
with:
workload_identity_provider: 'projects/527193872801/locations/global/workloadIdentityPools/github-actions/providers/github'
service_account: 'github-actions-image-testing@almalinux-image-testing-469421.iam.gserviceaccount.com'
- name: 'Set up Google Cloud SDK'
uses: 'google-github-actions/[email protected]'
- name: Runner OS specific configuration
shell: bash
run: |
# Runner OS specific configuration
if [ -e /etc/redhat-release ]; then
sudo setenforce 0
sudo dnf -y install podman
runner_user=$USER
sudo loginctl enable-linger $runner_user
docker_cmd=podman
elif lsb_release -cs > /dev/null 2>&1; then
docker_cmd=docker
else
echo "[Debug] Unknown OS"
exit 1
fi
echo "docker_cmd=${docker_cmd}" >> $GITHUB_ENV
- name: 'Run Google cloud-image-testing tests on ${{ matrix.shape }}'
shell: bash
run: |
${{ env.docker_cmd }} run \
-v ${{ env.GOOGLE_GHA_CREDS_PATH }}:/creds/auth.json \
-e GOOGLE_APPLICATION_CREDENTIALS=/creds/auth.json \
gcr.io/compute-image-tools/cloud-image-tests:latest \
-project almalinux-image-testing-469421 \
-x86_shape ${{ matrix.shape }} \
-parallel_count ${{ github.run_attempt > 1 && '1' || '1' }} \
${{ matrix.zone && format('-zone {0}', matrix.zone) || '' }} \
-filter '^(cvm|livemigrate|suspendresume|loadbalancer|guestagent|hostnamevalidation|imageboot|licensevalidation|network|security|hotattach|packagevalidation|ssh|metadata)$' \
-images '${{ needs.init-data.outputs.image_path || inputs.image_override }}${{ inputs.image_override == '' && matrix.arch == 'aarch64' && '-arm64' || ''}}'
test-gcp-pershape-aarch64:
name: ${{ inputs.image_override || format('{0}', inputs.version_major) }} aarch64 ${{ matrix.shape }}
needs: [init-data, test-gcp-initialtest]
permissions:
id-token: write
contents: read
runs-on: ubuntu-24.04
if: inputs.arch == 'ALL' || inputs.arch == 'aarch64'
strategy:
fail-fast: false
matrix:
shape:
# pretty limited quotas for this one
# let's test one shape flavor + lssd
# metal gets large-CPUs detection check
- c4a-standard-4
# all lssd shapes fail
# https://github.com/GoogleCloudPlatform/cloud-image-tests/issues/345
#- c4a-standard-4-lssd
# pretty limited quotas for this one
# let's just test one shape flavor
- t2a-standard-4
include:
- shape: c4a-standard-96-metal
# low quota for this one
parallel_count: 1
# only available in us-central1-b and us-east1-f
zone: us-central1-b
steps:
# this isn't a great way to handle this, but GH actions has limitations...
- name: Skip certain jobs
id: checker
if: (matrix.shape == 'c4a-standard-96-metal' && inputs.version_major == '8')
run: |
echo "Skipping ${{ matrix.shape }} for version_major ${{ inputs.version_major}} due to incompatibility."
echo "skip=true" >> $GITHUB_OUTPUT
exit 0
# we don't need the checked out files, but this is required for the google auth action to work
- uses: 'actions/checkout@v5'
if: steps.checker.outputs.skip != 'true'
- id: 'google-auth-image-testing'
uses: 'google-github-actions/auth@v2'
if: steps.checker.outputs.skip != 'true'
with:
workload_identity_provider: 'projects/527193872801/locations/global/workloadIdentityPools/github-actions/providers/github'
service_account: 'github-actions-image-testing@almalinux-image-testing-469421.iam.gserviceaccount.com'
- name: 'Set up Google Cloud SDK'
if: steps.checker.outputs.skip != 'true'
uses: 'google-github-actions/[email protected]'
- name: 'Run Google cloud-image-testing tests on ${{ matrix.shape }}'
if: steps.checker.outputs.skip != 'true'
shell: bash
run: |
docker run \
-v ${{ env.GOOGLE_GHA_CREDS_PATH }}:/creds/auth.json \
-e GOOGLE_APPLICATION_CREDENTIALS=/creds/auth.json \
gcr.io/compute-image-tools/cloud-image-tests:latest \
-project almalinux-image-testing-469421 \
-arm64_shape ${{ matrix.shape }} \
${{ matrix.zone && format('-zone {0}', matrix.zone) || '' }} \
-parallel_count ${{ matrix.parallel_count && format (' {0}', matrix.parallel_count) || '1' }} \
-filter '^(cvm|livemigrate|suspendresume|loadbalancer|guestagent|hostnamevalidation|imageboot|licensevalidation|network|security|hotattach|packagevalidation|ssh|metadata)$' \
-images '${{ needs.init-data.outputs.image_path || inputs.image_override }}${{ inputs.image_override == '' && '-arm64' || ''}}'