diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.tekton/coreos-assembler-pull-request.yaml b/.tekton/coreos-assembler-pull-request.yaml index bee0415393..7a0a342827 100644 --- a/.tekton/coreos-assembler-pull-request.yaml +++ b/.tekton/coreos-assembler-pull-request.yaml @@ -48,7 +48,7 @@ spec: pipelineRef: params: - name: bundle - value: quay.io/konflux-ci/tekton-catalog/pipeline-docker-build-multi-platform-oci-ta@sha256:39a1abd4657035029db5e1e215333aba0cf094c3984df58e12cb157f4cb62207 + value: quay.io/konflux-ci/tekton-catalog/pipeline-docker-build-multi-platform-oci-ta@sha256:3b40c829ea489ac866149094157e3b8532896b9f150a4f15b5aaba9d0e2e6be2 - name: name value: docker-build-multi-platform-oci-ta - name: kind @@ -60,4 +60,13 @@ spec: - name: git-auth secret: secretName: '{{ git_auth_secret }}' + taskRunSpecs: + - pipelineTaskName: build-images + stepSpecs: + - name: prepare-sboms + computeResources: + requests: + memory: 2Gi + limits: + memory: 2Gi status: {} diff --git a/tmt/plans/main.fmf b/tmt/plans/main.fmf new file mode 100644 index 0000000000..836ba3f2f5 --- /dev/null +++ b/tmt/plans/main.fmf @@ -0,0 +1,55 @@ +adjust+: + - when: arch == x86_64 or arch == aarch64 + provision: + hardware: + cpu: + processors: ">= 4" + memory: ">= 8 GB" + disk: + - size: ">= 50 GB" + virtualization: + is-supported: true +prepare: + - how: install + package: + - libvirt + - qemu-kvm + - qemu-img + - virt-install + - jq + - git-core + - skopeo + - podman +execute: + how: tmt + exit-first: true + +/kola-qemu: + summary: run kola qemu tests + discover+: + how: fmf + test: + - init + - build-fcos + - build-qemu + - test-qemu + +/kola-self-tests: + summary: run self-tests + discover+: + how: fmf + test: + - init + - build-fcos + - build-qemu + - test-kola-self + +/kola-test-upgrade: + summary: run kola upgrade test + discover+: + how: fmf + test: + - init + - build-fcos + - build-qemu + - test-kola-upgrade diff --git a/tmt/tests/build.sh b/tmt/tests/build.sh new file mode 100755 index 0000000000..e7c54fc0cc --- /dev/null +++ b/tmt/tests/build.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -eo pipefail +set -x + +source "utils.sh" + +if [ "$TEST_CASE" = "build-fcos" ]; then + cosa build +elif [ "$TEST_CASE" = "build-qemu" ]; then + cosa osbuild qemu +fi diff --git a/tmt/tests/entrypoint.sh b/tmt/tests/entrypoint.sh new file mode 100755 index 0000000000..98e70d109f --- /dev/null +++ b/tmt/tests/entrypoint.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -euo pipefail + +export TEST_CASE="$TEST_CASE" +case "$TEST_CASE" in + "init") + ./init.sh + ;; + "build-fcos"|"build-qemu") + ./build.sh + ;; + "test-qemu"|"test-kola-upgrade"|"test-kola-self") + ./test.sh + ;; + *) + echo "Error: Test case '$TEST_CASE' not found!" >&2 + exit 1 + ;; +esac diff --git a/tmt/tests/init.sh b/tmt/tests/init.sh new file mode 100755 index 0000000000..9930f2e06a --- /dev/null +++ b/tmt/tests/init.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -eEuo pipefail +set -x + +source "utils.sh" + +CONFIG_GIT_URL="https://github.com/coreos/fedora-coreos-config" +CONFIG_GIT_REF="testing-devel" + +echo "cosa container: $COREOS_ASSEMBLER_CONTAINER" +echo "arch: $(arch)" + +echo "git version: $(git --version)" +echo "git url: ${CONFIG_GIT_URL}" +echo "git branch: ${CONFIG_GIT_REF}" + +mkdir -p "$COSA_DIR" +cosa init --force "${CONFIG_GIT_URL}" --branch "${CONFIG_GIT_REF}" diff --git a/tmt/tests/kola.fmf b/tmt/tests/kola.fmf new file mode 100644 index 0000000000..054f25fa1d --- /dev/null +++ b/tmt/tests/kola.fmf @@ -0,0 +1,37 @@ +test: ./entrypoint.sh + +/init: + duration: 1h + order: 50 + environment: + TEST_CASE: init + +/build-fcos: + duration: 1h + order: 60 + environment: + TEST_CASE: build-fcos + +/build-qemu: + duration: 1h + order: 70 + environment: + TEST_CASE: build-qemu + +/test-qemu: + duration: 2h + order: 80 + environment: + TEST_CASE: test-qemu + +/test-kola-upgrade: + duration: 1h + order: 90 + environment: + TEST_CASE: test-kola-upgrade + +/test-kola-self: + duration: 1h + order: 100 + environment: + TEST_CASE: test-kola-self diff --git a/tmt/tests/test.sh b/tmt/tests/test.sh new file mode 100755 index 0000000000..fc0649bc60 --- /dev/null +++ b/tmt/tests/test.sh @@ -0,0 +1,52 @@ +#!/bin/bash +set -eEuo pipefail +set -x + +source "utils.sh" +trap collect_kola_artifacts ERR + +if [ "$TEST_CASE" = "test-qemu" ]; then + export KOLA_ACTION="run" + export KOLA_ID="kola" + export KOLA_EXTRA_ARGS=( + --rerun + --allow-rerun-success=tags=needs-internet + --on-warn-failure-exit-77 + --tag=!reprovision + --parallel=5 + ) + run_kola + collect_kola_artifacts + + # reprovision test + export KOLA_ACTION="run" + export KOLA_ID="kola-reprovision" + export KOLA_EXTRA_ARGS=( + --tag=reprovision + ) + run_kola + collect_kola_artifacts + +elif [ "$TEST_CASE" = "test-kola-upgrade" ]; then + # upgrade test + export KOLA_ACTION="run-upgrade" + export KOLA_ID="run-upgrade" + export KOLA_EXTRA_ARGS=( + --upgrades + ) + run_kola + collect_kola_artifacts + +elif [ "$TEST_CASE" = "test-kola-self" ]; then + # self test + REPO_ROOT=$(cd ../.. && pwd) + cp -r "${REPO_ROOT}/tests/kola-ci-self" "${COSA_DIR}/kola-ci-self" + export KOLA_ACTION="run" + export KOLA_ID="kola-self" + export KOLA_EXTRA_ARGS=( + -E "/srv/kola-ci-self" + 'ext.kola-ci-self*' + ) + run_kola + collect_kola_artifacts +fi diff --git a/tmt/tests/utils.sh b/tmt/tests/utils.sh new file mode 100755 index 0000000000..56ea4e06e3 --- /dev/null +++ b/tmt/tests/utils.sh @@ -0,0 +1,24 @@ +#!/bin/bash +set -eEuo pipefail +set -x + +export COREOS_ASSEMBLER_CONTAINER="$IMAGE_URL" +export COSA_DIR="$HOME/workspace/build" + +cosa () +{ + podman run --rm --security-opt=label=disable --privileged \ + -v "${COSA_DIR}:/srv" --device=/dev/kvm \ + --device=/dev/fuse --tmpfs=/tmp -v /var/tmp:/var/tmp --name=cosa "${COREOS_ASSEMBLER_CONTAINER}" "$@"; +} +collect_kola_artifacts() { + mkdir -p "$TMT_TEST_DATA" + cd "${COSA_DIR}" && tar -C "${OUTPUT_DIR}" -c --xz "${KOLA_ID}" > "${KOLA_ID}-${TOKEN}.tar.xz" + cd "${COSA_DIR}" && mv "${KOLA_ID}-${TOKEN}.tar.xz" "${TMT_TEST_DATA}/${KOLA_ID}-${TOKEN}.tar.xz" +} +run_kola(){ + OUTPUT_DIR=$(cd "${COSA_DIR}" && cosa shell -- mktemp -d tmp/kola-XXXX) + TOKEN="$(uuidgen | cut -f1 -d -)" + KOLA_ID="${KOLA_ID:-kola}" + cd "${COSA_DIR}" && cosa kola "${KOLA_ACTION}" --build=latest --arch="$(arch)" --output-dir="${OUTPUT_DIR}/${KOLA_ID}" "${KOLA_EXTRA_ARGS[@]}" +}