Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Daily Libvirt CI #1595

Merged
merged 3 commits into from
Dec 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .github/workflows/daily-e2e-tests-libvirt.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# (C) Copyright Confidential Containers Contributors 2023.
# SPDX-License-Identifier: Apache-2.0
#
# Daily run the e2e tests for libvirt.
---
name: daily e2e tests for libvirt

on:
schedule:
# Runs "at 04:15(UTC time) every day" (see https://crontab.guru)
# will base on default branch `main`
- cron: '15 4 * * *'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if github supports H but with cronjobs it's usually adviced to use H rather than picking up random minute values so that cron can distribute the workflows throughout the hour (H 4 * * *)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I learned something new today :)

But I don't know whether github supports H or not. It claims to use the POSIX cron syntax (https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule) but not sure if all expressions.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jenkins knows it ;-)

workflow_dispatch:

jobs:
e2e:
uses: ./.github/workflows/e2e_run_all.yaml
with:
caa_image_tag: latest
git_ref: refs/heads/main
podvm_image_tag: latest
registry: ghcr.io/${{ github.repository_owner }}
secrets: inherit
136 changes: 5 additions & 131 deletions .github/workflows/e2e_on_pull.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,144 +26,18 @@ on:
branches:
- 'main'

env:
# cloud-api-adaptor image registry
E2E_IMG_REGISTRY: ghcr.io/${{ github.repository_owner }}
# cloud-api-adaptor: image release tag
E2E_IMG_RELEASE_TAG: ci-pr${{ github.event.number }}
# cloud-api-adaptor image dev tag
E2E_IMG_DEV_TAG: ci-pr${{ github.event.number }}-dev

jobs:
authorize:
ldoktor marked this conversation as resolved.
Show resolved Hide resolved
runs-on: ubuntu-latest
if: ${{ contains(github.event.pull_request.labels.*.name, 'test_e2e_libvirt') }}
if: contains(github.event.pull_request.labels.*.name, 'test_e2e_libvirt')
steps:
- run: "true"

# Build the podvm images.
#
podvm_builder:
e2e:
uses: ./.github/workflows/e2e_run_all.yaml
needs: [authorize]
uses: ./.github/workflows/podvm_builder.yaml
with:
registry: ghcr.io/${{ github.repository_owner }}
image_tag: ci-pr${{ github.event.number }}
git_ref: ${{ github.event.pull_request.head.sha }}
secrets: inherit

podvm_binaries:
needs: [podvm_builder]
uses: ./.github/workflows/podvm_binaries.yaml
with:
registry: ghcr.io/${{ github.repository_owner }}
image_tag: ci-pr${{ github.event.number }}
caa_image_tag: ci-pr${{ github.event.number }}
git_ref: ${{ github.event.pull_request.head.sha }}
secrets: inherit

podvm:
needs: [podvm_binaries]
uses: ./.github/workflows/podvm.yaml
with:
podvm_image_tag: ci-pr${{ github.event.number }}
registry: ghcr.io/${{ github.repository_owner }}
image_tag: ci-pr${{ github.event.number }}
git_ref: ${{ github.event.pull_request.head.sha }}
secrets: inherit

# Build and push the cloud-api-adaptor image
#
# By using a reusable `workflow_call` workflow we are hitting two
# GHA limitations here:
#
# - Cannot access the `env` context from the `with` so that it cannot
# reuse the E2E_IMG_* environment variables set at this workflow level.
# - Cannot call a reusable workflow from a job's step, so the we cannot
# merge the `image` and `prep_env` into a single one (unless we create
# another reusable workflow and, well, likely hit another limitation...).
#
# Reference: https://docs.github.com/en/actions/using-workflows/reusing-workflows#limitations
#
image:
uses: ./.github/workflows/caa_build_and_push.yaml
needs: [authorize]
with:
registry: ghcr.io/${{ github.repository_owner }}
dev_tags: ci-pr${{ github.event.number }}-dev
release_tags: ci-pr${{ github.event.number }}
git_ref: ${{ github.event.pull_request.head.sha }}
secrets: inherit

# Edit the kustomize files under the install directory to reference the
# built cloud-api-adaptor images. The entire directory is archived so that
# downstream jobs can simply download and use the prepared installation
# files.
#
# IMPORTANT: If you are enabling e2e tests for a given provider,
# then please update the PROVIDERS list (space-separated names, e.g.,
# "aws libvirt").
prep_install:
needs: [image]
runs-on: ubuntu-latest
env:
PROVIDERS: "libvirt"
steps:
- name: Checkout Code
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}

- name: Install kustomize
run: |
command -v kustomize >/dev/null || \
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | \
bash -s /usr/local/bin

- name: Update kustomization configuration
run: |
providers=(${{ env.PROVIDERS }})
# If there aren't providers then something is wrong
[[ ${#providers[@]} -gt 0 ]] || exit 1

for provider in ${providers[@]}; do
img="${E2E_IMG_REGISTRY}/cloud-api-adaptor"
tag="${E2E_IMG_RELEASE_TAG}"
[[ "$provider" = "libvirt" ]] && tag="${E2E_IMG_DEV_TAG}"
echo "::group::Update ${provider}"
pushd "install/overlays/${provider}"
kustomize edit set image "cloud-api-adaptor=${img}:${tag}"
# Print for debugging
cat kustomization.yaml
echo "::endgroup::"
# Validate the file to avoid it silently testing with a wrong image
grep "newName: ${img}" kustomization.yaml
grep "newTag: ${tag}" kustomization.yaml
popd
done

- uses: actions/upload-artifact@v3
with:
name: install_directory
path: install/
retention-days: 7

# Run libvirt e2e tests if pull request labeled 'test_e2e_libvirt'
libvirt:
name: libvirt
if: ${{ contains(github.event.pull_request.labels.*.name, 'test_e2e_libvirt') }}
needs: [podvm, image, prep_install]
strategy:
fail-fast: false
matrix:
os:
- centos
- ubuntu
provider:
- generic
arch:
- amd64
uses: ./.github/workflows/e2e_libvirt.yaml
with:
podvm_image: ghcr.io/${{ github.repository_owner }}/podvm-${{ matrix.provider }}-${{ matrix.os }}-${{ matrix.arch }}:ci-pr${{ github.event.number }}
install_directory_artifact: install_directory
git_ref: ${{ github.event.pull_request.head.sha }}
165 changes: 165 additions & 0 deletions .github/workflows/e2e_run_all.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
# (C) Copyright Confidential Containers Contributors 2023.
# SPDX-License-Identifier: Apache-2.0
#
# Run end-to-end (e2e) tests.
---
name: (Callable) Run all e2e tests

on:
workflow_call:
inputs:
caa_image_tag:
description: set the cloud-api-adaptor image tag
required: true
type: string
git_ref:
default: 'main'
description: Git ref to checkout the cloud-api-adaptor repository. Defaults to main.
required: false
type: string
podvm_image_tag:
description: set the podvm_builder/podvm_binaries/podvm image tag
required: true
type: string
registry:
description: the container registry where built images will be pushed to
required: true
type: string
env:
# cloud-api-adaptor image registry
E2E_IMG_REGISTRY: ${{ inputs.registry }}
# cloud-api-adaptor: image release tag
E2E_IMG_RELEASE_TAG: ${{ inputs.caa_image_tag }}
# cloud-api-adaptor image dev tag
E2E_IMG_DEV_TAG: ${{ inputs.caa_image_tag }}-dev

jobs:
# Build the podvm images.
#
podvm_builder:
uses: ./.github/workflows/podvm_builder.yaml
with:
registry: ${{ inputs.registry }}
image_tag: ${{ inputs.podvm_image_tag }}
git_ref: ${{ inputs.git_ref }}
secrets: inherit

podvm_binaries:
needs: [podvm_builder]
uses: ./.github/workflows/podvm_binaries.yaml
with:
registry: ${{ inputs.registry }}
image_tag: ${{ inputs.podvm_image_tag }}
git_ref: ${{ inputs.git_ref }}
secrets: inherit

podvm:
needs: [podvm_binaries]
uses: ./.github/workflows/podvm.yaml
with:
registry: ${{ inputs.registry }}
image_tag: ${{ inputs.podvm_image_tag }}
git_ref: ${{ inputs.git_ref }}
secrets: inherit

# Build and push the cloud-api-adaptor image
#
# By using a reusable `workflow_call` workflow we are hitting two
# GHA limitations here:
#
# - Cannot access the `env` context from the `with` so that it cannot
# reuse the E2E_IMG_* environment variables set at this workflow level.
# - Cannot call a reusable workflow from a job's step, so the we cannot
# merge the `image` and `prep_env` into a single one (unless we create
# another reusable workflow and, well, likely hit another limitation...).
#
# Reference: https://docs.github.com/en/actions/using-workflows/reusing-workflows#limitations
#
image:
uses: ./.github/workflows/caa_build_and_push.yaml
with:
registry: ${{ inputs.registry }}
dev_tags: ${{ inputs.caa_image_tag }}-dev
release_tags: ${{ inputs.caa_image_tag }}
git_ref: ${{ inputs.git_ref }}
secrets: inherit

# Edit the kustomize files under the install directory to reference the
# built cloud-api-adaptor images. The entire directory is archived so that
# downstream jobs can simply download and use the prepared installation
# files.
#
# IMPORTANT: If you are enabling e2e tests for a given provider,
# then please update the PROVIDERS list (space-separated names, e.g.,
# "aws libvirt").
prep_install:
needs: [image]
runs-on: ubuntu-latest
env:
PROVIDERS: "libvirt"
steps:
- name: Checkout Code
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{ inputs.git_ref }}

- name: Install kustomize
run: |
command -v kustomize >/dev/null || \
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | \
bash -s /usr/local/bin

- name: Update kustomization configuration
run: |
providers=(${{ env.PROVIDERS }})
# If there aren't providers then something is wrong
[[ ${#providers[@]} -gt 0 ]] || exit 1

for provider in ${providers[@]}; do
img="${E2E_IMG_REGISTRY}/cloud-api-adaptor"
tag="${E2E_IMG_RELEASE_TAG}"
[[ "$provider" = "libvirt" ]] && tag="${E2E_IMG_DEV_TAG}"
echo "::group::Update ${provider}"
pushd "install/overlays/${provider}"
kustomize edit set image "cloud-api-adaptor=${img}:${tag}"
# Print for debugging
cat kustomization.yaml
echo "::endgroup::"
# Validate the file to avoid it silently testing with a wrong image
grep "newName: ${img}" kustomization.yaml
grep "newTag: ${tag}" kustomization.yaml
popd
done

- uses: actions/upload-artifact@v3
with:
name: install_directory
path: install/
retention-days: 7

# Run libvirt e2e tests if pull request labeled 'test_e2e_libvirt'
libvirt:
name: libvirt
if: |
github.event_name == 'schedule' ||
github.event_name == 'workflow_dispatch' ||
contains(github.event.pull_request.labels.*.name, 'test_e2e_libvirt')
ldoktor marked this conversation as resolved.
Show resolved Hide resolved
needs: [podvm, image, prep_install]
strategy:
fail-fast: false
matrix:
os:
# FIXME: temporarily disable CentOS tests as the CentOS podvm builds
# are disabled due https://github.com/confidential-containers/cloud-api-adaptor/issues/1558
#- centos
- ubuntu
provider:
- generic
arch:
- amd64
uses: ./.github/workflows/e2e_libvirt.yaml
with:
podvm_image: ${{ inputs.registry }}/podvm-${{ matrix.provider }}-${{ matrix.os }}-${{ matrix.arch }}:${{ inputs.podvm_image_tag }}
install_directory_artifact: install_directory
git_ref: ${{ inputs.git_ref }}
16 changes: 10 additions & 6 deletions .github/workflows/podvm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,23 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [centos, ubuntu]
os:
# FIXME: temporarily disable CentOS builds while we don't find a
# fix to https://github.com/confidential-containers/cloud-api-adaptor/issues/1558
#- centos
- ubuntu
arch: [amd64, s390x]
provider: [generic, vsphere]
include:
- os: centos
#- os: centos
- os: ubuntu
exclude:
- os: centos
arch: s390x
#- os: centos
# arch: s390x
- provider: vsphere
arch: s390x
- provider: vsphere
os: centos
#- provider: vsphere
# os: centos
steps:
- name: Checkout Code
uses: actions/checkout@v3
Expand Down
Loading