diff --git a/.github/workflows/ci-coco-stability.yaml b/.github/workflows/ci-coco-stability.yaml new file mode 100644 index 0000000000..d4c9f00a2d --- /dev/null +++ b/.github/workflows/ci-coco-stability.yaml @@ -0,0 +1,19 @@ +name: Kata Containers CoCo Stability Tests Weekly +on: + schedule: + - cron: '0 0 * * 0' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + kata-containers-ci-on-push: + uses: ./.github/workflows/run-kata-coco-stability-tests.yaml + with: + commit-hash: ${{ github.sha }} + pr-number: "weekly" + tag: ${{ github.sha }}-weekly + target-branch: ${{ github.ref_name }} + secrets: inherit diff --git a/.github/workflows/run-kata-coco-stability-tests.yaml b/.github/workflows/run-kata-coco-stability-tests.yaml new file mode 100644 index 0000000000..14ecc97c5f --- /dev/null +++ b/.github/workflows/run-kata-coco-stability-tests.yaml @@ -0,0 +1,113 @@ +name: CI | Run Kata CoCo k8s Stability Tests +on: + workflow_call: + inputs: + registry: + required: true + type: string + repo: + required: true + type: string + tag: + required: true + type: string + pr-number: + required: true + type: string + commit-hash: + required: false + type: string + target-branch: + required: false + type: string + default: "" + +jobs: + # Generate jobs for testing CoCo on non-TEE environments + run-stability-k8s-tests-coco-nontee: + strategy: + fail-fast: false + matrix: + vmm: + - qemu-coco-dev + snapshotter: + - nydus + pull-type: + - guest-pull + runs-on: ubuntu-latest + env: + DOCKER_REGISTRY: ${{ inputs.registry }} + DOCKER_REPO: ${{ inputs.repo }} + DOCKER_TAG: ${{ inputs.tag }} + GH_PR_NUMBER: ${{ inputs.pr-number }} + KATA_HOST_OS: ${{ matrix.host_os }} + KATA_HYPERVISOR: ${{ matrix.vmm }} + # Some tests rely on that variable to run (or not) + KBS: "true" + # Set the KBS ingress handler (empty string disables handling) + KBS_INGRESS: "aks" + KUBERNETES: "vanilla" + PULL_TYPE: ${{ matrix.pull-type }} + AUTHENTICATED_IMAGE_USER: ${{ secrets.AUTHENTICATED_IMAGE_USER }} + AUTHENTICATED_IMAGE_PASSWORD: ${{ secrets.AUTHENTICATED_IMAGE_PASSWORD }} + SNAPSHOTTER: ${{ matrix.snapshotter }} + USING_NFD: "false" + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.commit-hash }} + fetch-depth: 0 + + - name: Rebase atop of the latest target branch + run: | + ./tests/git-helper.sh "rebase-atop-of-the-latest-target-branch" + env: + TARGET_BRANCH: ${{ inputs.target-branch }} + + - name: Download Azure CLI + run: bash tests/integration/kubernetes/gha-run.sh install-azure-cli + + - name: Log into the Azure account + run: bash tests/integration/kubernetes/gha-run.sh login-azure + env: + AZ_APPID: ${{ secrets.AZ_APPID }} + AZ_PASSWORD: ${{ secrets.AZ_PASSWORD }} + AZ_TENANT_ID: ${{ secrets.AZ_TENANT_ID }} + AZ_SUBSCRIPTION_ID: ${{ secrets.AZ_SUBSCRIPTION_ID }} + + - name: Create AKS cluster + timeout-minutes: 10 + run: bash tests/integration/kubernetes/gha-run.sh create-cluster + + - name: Install `bats` + run: bash tests/integration/kubernetes/gha-run.sh install-bats + + - name: Install `kubectl` + run: bash tests/integration/kubernetes/gha-run.sh install-kubectl + + - name: Download credentials for the Kubernetes CLI to use them + run: bash tests/integration/kubernetes/gha-run.sh get-cluster-credentials + + - name: Deploy Snapshotter + timeout-minutes: 5 + run: bash tests/integration/kubernetes/gha-run.sh deploy-snapshotter + + - name: Deploy Kata + timeout-minutes: 10 + run: bash tests/integration/kubernetes/gha-run.sh deploy-kata-aks + + - name: Deploy CoCo KBS + timeout-minutes: 10 + run: bash tests/integration/kubernetes/gha-run.sh deploy-coco-kbs + + - name: Install `kbs-client` + timeout-minutes: 10 + run: bash tests/integration/kubernetes/gha-run.sh install-kbs-client + + - name: Run stability tests + timeout-minutes: 100 + run: bash tests/stability/gha-stability-run.sh run-tests + + - name: Delete AKS cluster + if: always() + run: bash tests/integration/kubernetes/gha-run.sh delete-cluster diff --git a/tests/stability/gha-stability-run.sh b/tests/stability/gha-stability-run.sh new file mode 100755 index 0000000000..55baf95a67 --- /dev/null +++ b/tests/stability/gha-stability-run.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# +# Copyright (c) 2024 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +set -o errexit +set -o nounset +set -o pipefail + +stability_dir="$(dirname "$(readlink -f "$0")")" +source "${stability_dir}/../common.bash" +source "${stability_dir}/../metrics/lib/common.bash" + +function run_tests() { + info "Running scability test using ${KATA_HYPERVISOR} hypervisor" + bash "${stability_dir}/kubernetes_stability.sh" +} + +function main() { + action="${1:-}" + case "${action}" in + run-tests) run_tests ;; + *) >&2 die "Invalid argument" ;; + esac +} + +main "$@" +