Skip to content

Commit 8e6d931

Browse files
committed
test: Add Packit and gating test
Use 'system-reinstall-bootc' to re-install TF runner from package mode to image mode Signed-off-by: Xiaofeng Wang <[email protected]>
1 parent 9a6df09 commit 8e6d931

File tree

8 files changed

+299
-30
lines changed

8 files changed

+299
-30
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ jobs:
207207

208208
- name: Run all TMT tests
209209
run: |
210-
just test-tmt-nobuild
210+
just test-tmt-nobuild plans --name /tmt/plans/integration
211211
212212
- name: Archive TMT logs
213213
if: always()

.packit.yaml

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,21 +64,18 @@ jobs:
6464
failure_comment:
6565
message: "bootc Copr build failed for {commit_sha}. @admin check logs {logs_url} and packit dashboard {packit_dashboard_url}"
6666

67-
# TODO: Readd some tmt tests that install the built RPM and e.g. test out system-reinstall-bootc
68-
# - job: tests
69-
# trigger: pull_request
70-
# targets:
71-
# - centos-stream-9-x86_64
72-
# - centos-stream-9-aarch64
73-
# - centos-stream-10-x86_64
74-
# - centos-stream-10-aarch64
75-
# - fedora-42-x86_64
76-
# - fedora-42-aarch64
77-
# - fedora-rawhide-x86_64
78-
# - fedora-rawhide-aarch64
79-
# tmt_plan: /integration
80-
# skip_build: true
81-
# identifier: integration-test
67+
- job: tests
68+
trigger: pull_request
69+
targets:
70+
- centos-stream-9-x86_64
71+
- centos-stream-9-aarch64
72+
- centos-stream-10-x86_64
73+
- centos-stream-10-aarch64
74+
- fedora-42-x86_64
75+
- fedora-42-aarch64
76+
- fedora-rawhide-x86_64
77+
- fedora-rawhide-aarch64
78+
tmt_plan: /packit/
8279

8380
- job: propose_downstream
8481
trigger: release

hack/Containerfile.packit

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Build image for system-reinstall-bootc test
2+
3+
# Use centos-bootc:10 as default
4+
FROM quay.io/centos-bootc/centos-bootc:stream10
5+
6+
WORKDIR /bootc-test
7+
8+
# Some rhts-*, rstrnt-* and tmt-* commands are in /usr/local/bin
9+
COPY bin /usr/local/bin
10+
# Save testing farm run files
11+
COPY ARTIFACTS /var/ARTIFACTS
12+
# Copy bootc repo
13+
COPY test-artifacts /var/share/test-artifacts
14+
15+
RUN <<EORUN
16+
set -xeuo pipefail
17+
. /usr/lib/os-release
18+
if [[ $ID == "rhel" ]]; then
19+
cp rhel.repo /etc/yum.repos.d/
20+
fi
21+
cp test-artifacts.repo /etc/yum.repos.d/
22+
dnf -y update bootc
23+
./provision-derived.sh
24+
25+
# For test-22-logically-bound-install
26+
cp -a lbi/usr/. /usr
27+
for x in curl.container curl-base.image podman.image; do
28+
ln -s /usr/share/containers/systemd/$x /usr/lib/bootc/bound-images.d/$x
29+
done
30+
31+
# Add some testing kargs into our dev builds
32+
install -D -t /usr/lib/bootc/kargs.d test-kargs/*
33+
# Also copy in some default install configs we use for testing
34+
install -D -t /usr/lib/bootc/install/ install-test-configs/*
35+
36+
# Remove bootc repo, bootc updated already
37+
rm -rf /var/share/test-artifacts /etc/yum.repos.d/test-artifacts.repo
38+
# Clean up dnf
39+
dnf -y clean all
40+
rm -rf /var/cache /var/lib/dnf
41+
42+
# Finally, test our own linting
43+
# bootc container lint --fatal-warnings
44+
EORUN

tmt/plans/integration.fmf

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,51 @@
1+
discover:
2+
how: fmf
13
provision:
24
how: virtual
35
# Build via `./tests/build.sh`
46
image: $@{test_disk_image}
57
execute:
68
how: tmt
79

8-
/readonly-tests:
10+
/test-01-readonly:
911
summary: Execute booted readonly/nondestructive tests
10-
discover:
12+
discover+:
1113
how: fmf
1214
test:
1315
- /tmt/tests/test-01-readonly
1416

1517
/test-20-local-upgrade:
1618
summary: Execute local upgrade tests
17-
discover:
18-
how: fmf
19+
discover+:
1920
test:
2021
- /tmt/tests/test-20-local-upgrade
2122

2223
/test-21-logically-bound-switch:
2324
summary: Execute logically bound images tests for switching images
24-
discover:
25-
how: fmf
25+
discover+:
2626
test:
2727
- /tmt/tests/test-21-logically-bound-switch
2828

2929
/test-22-logically-bound-install:
3030
summary: Execute logically bound images tests for switching images
31-
discover:
32-
how: fmf
31+
discover+:
3332
test:
3433
- /tmt/tests/test-22-logically-bound-install
3534

3635
/test-23-install-outside-container:
3736
summary: Execute tests for installing outside of a container
38-
discover:
39-
how: fmf
37+
discover+:
4038
test:
4139
- /tmt/tests/test-23-install-outside-container
4240

4341
/test-24-local-upgrade-reboot:
4442
summary: Execute local upgrade tests with automated reboot
45-
discover:
46-
how: fmf
43+
discover+:
4744
test:
4845
- /tmt/tests/test-24-local-upgrade-reboot
4946

5047
/test-25-soft-reboot:
5148
summary: Soft reboot support
52-
discover:
53-
how: fmf
49+
discover+:
5450
test:
5551
- /tmt/tests/test-25-soft-reboot

tmt/plans/packit.fmf

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
discover:
2+
how: fmf
3+
provision:
4+
how: virtual
5+
image: $@{test_disk_image}
6+
prepare:
7+
- how: install
8+
package:
9+
- podman
10+
- skopeo
11+
- jq
12+
- zstd
13+
- system-reinstall-bootc
14+
- expect
15+
- how: shell
16+
script:
17+
- printenv
18+
- rpm -qa | grep system-reinstall-bootc
19+
- ls -al /var/share/test-artifacts
20+
- mkdir -p bootc
21+
- cp /var/share/test-artifacts/*.src.rpm bootc
22+
- cd bootc && rpm2cpio *.src.rpm | cpio -idmv && rm -f *-vendor.tar.zstd && zstd -d *.tar.zstd && mkdir -p source && tar -xvf *.tar -C source --strip-components=1 && ls -al source
23+
- cd source/tmt/tests && system-reinstall/test-system-reinstall-bootc.sh
24+
execute:
25+
how: tmt
26+
exit-first: true
27+
28+
/test-01-readonly:
29+
summary: Execute booted readonly/nondestructive tests
30+
discover+:
31+
how: fmf
32+
test:
33+
- /tmt/tests/test-01-readonly
34+
35+
/test-20-local-upgrade:
36+
summary: Execute local upgrade tests
37+
discover+:
38+
test:
39+
- /tmt/tests/test-20-local-upgrade
40+
41+
/test-21-logically-bound-switch:
42+
summary: Execute logically bound images tests for switching images
43+
discover+:
44+
test:
45+
- /tmt/tests/test-21-logically-bound-switch
46+
47+
/test-22-logically-bound-install:
48+
summary: Execute logically bound images tests for switching images
49+
discover+:
50+
test:
51+
- /tmt/tests/test-22-logically-bound-install
52+
53+
/test-23-install-outside-container:
54+
summary: Execute tests for installing outside of a container
55+
discover+:
56+
test:
57+
- /tmt/tests/test-23-install-outside-container
58+
59+
/test-24-local-upgrade-reboot:
60+
summary: Execute local upgrade tests with automated reboot
61+
discover+:
62+
test:
63+
- /tmt/tests/test-24-local-upgrade-reboot
64+
65+
/test-25-soft-reboot:
66+
summary: Soft reboot support
67+
discover+:
68+
test:
69+
- /tmt/tests/test-25-soft-reboot
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/usr/bin/expect -f
2+
3+
# Set a timeout
4+
set timeout 600
5+
6+
spawn system-reinstall-bootc localhost/bootc-integration
7+
8+
expect {
9+
"Then you can login as * using those keys. \\\[Y/n\\\]" {
10+
send "\r"
11+
exp_continue
12+
}
13+
"NOTICE: This will replace the installed operating system and reboot. Are you sure you want to continue? \\\[y/N\\\]" {
14+
send "y"
15+
exp_continue
16+
}
17+
"NOTICE: This will replace the installed operating system and reboot. Are you sure you want to continue? \\\[Y/n\\\]" {
18+
send "\r"
19+
exp_continue
20+
}
21+
"Press \\\<enter\\\> to continue" {
22+
send "\r"
23+
exp_continue
24+
}
25+
"Operation complete, rebooting in 10 seconds. Press Ctrl-C to cancel reboot, or press enter to continue immediately" {
26+
send "\x03"
27+
}
28+
}
29+
30+
# Wait for the program to complete
31+
expect eof
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
#!/bin/bash
2+
set -exuo pipefail
3+
4+
# Check environment
5+
printenv
6+
# Check repos
7+
# Leave this checking here to find the changing in repo folder
8+
ls -al /etc/yum.repos.d
9+
10+
# This script only runs on Packit and gating environment
11+
case $TMT_REBOOT_COUNT in
12+
0)
13+
# temp folder to save building files and folders
14+
BOOTC_TEMPDIR=$(mktemp -d)
15+
trap 'rm -rf -- "$BOOTC_TEMPDIR"' EXIT
16+
17+
# Copy files and folders in hack to TEMPDIR
18+
cp -a ../../hack/* "$BOOTC_TEMPDIR"
19+
20+
# Keep testing farm run folder
21+
cp -r /var/ARTIFACTS "$BOOTC_TEMPDIR"
22+
23+
# Copy bootc repo
24+
cp -r /var/share/test-artifacts "$BOOTC_TEMPDIR"
25+
26+
ARCH=$(uname -m)
27+
# Get OS info
28+
source /etc/os-release
29+
30+
# Some rhts-*, rstrnt-* and tmt-* commands are in /usr/local/bin
31+
if [[ -d /var/lib/tmt/scripts ]]; then
32+
cp -r /var/lib/tmt/scripts "$BOOTC_TEMPDIR"
33+
else
34+
cp -r /usr/local/bin "$BOOTC_TEMPDIR"
35+
fi
36+
37+
case "$ID" in
38+
"centos")
39+
BASE="quay.io/centos-bootc/centos-bootc:stream${VERSION_ID}"
40+
;;
41+
"fedora")
42+
BASE="quay.io/fedora/fedora-bootc:${VERSION_ID}"
43+
;;
44+
"rhel")
45+
# OSCI gating only
46+
BASE="images.paas.redhat.com/bootc/rhel-bootc:latest-${VERSION_ID}"
47+
CURRENT_COMPOSE_ID=$(skopeo inspect --no-tags --retry-times=5 --tls-verify=false "docker://${BASE}" | jq -r '.Labels."redhat.compose-id"')
48+
49+
if [[ -n ${CURRENT_COMPOSE_ID} ]]; then
50+
if [[ ${CURRENT_COMPOSE_ID} == *-updates-* ]]; then
51+
BATCH_COMPOSE="updates/"
52+
else
53+
BATCH_COMPOSE=""
54+
fi
55+
else
56+
BATCH_COMPOSE="updates/"
57+
CURRENT_COMPOSE_ID=latest-RHEL-$VERSION_ID
58+
fi
59+
60+
# use latest compose if specific compose is not accessible
61+
RC=$(curl -skIw '%{http_code}' -o /dev/null "http://${NIGHTLY_COMPOSE_SITE}/rhel-${VERSION_ID%%.*}/nightly/${BATCH_COMPOSE}RHEL-${VERSION_ID%%.*}/${CURRENT_COMPOSE_ID}/STATUS")
62+
if [[ $RC != "200" ]]; then
63+
CURRENT_COMPOSE_ID=latest-RHEL-${VERSION_ID%%}
64+
fi
65+
66+
# generate rhel repo
67+
tee "${BOOTC_TEMPDIR}/rhel.repo" >/dev/null <<REPOEOF
68+
[rhel-baseos]
69+
name=baseos
70+
baseurl=http://${NIGHTLY_COMPOSE_SITE}/rhel-${VERSION_ID%%.*}/nightly/${BATCH_COMPOSE}RHEL-${VERSION_ID%%.*}/${CURRENT_COMPOSE_ID}/compose/BaseOS/${ARCH}/os/
71+
enabled=1
72+
gpgcheck=0
73+
74+
[rhel-appstream]
75+
name=appstream
76+
baseurl=http://${NIGHTLY_COMPOSE_SITE}/rhel-${VERSION_ID%%.*}/nightly/${BATCH_COMPOSE}RHEL-${VERSION_ID%%.*}/${CURRENT_COMPOSE_ID}/compose/AppStream/${ARCH}/os/
77+
enabled=1
78+
gpgcheck=0
79+
REPOEOF
80+
cp "${BOOTC_TEMPDIR}/rhel.repo" /etc/yum.repos.d
81+
;;
82+
esac
83+
84+
# Fedora CI: https://github.com/fedora-ci/dist-git-pipeline/blob/master/Jenkinsfile#L145
85+
# OSCI: https://gitlab.cee.redhat.com/osci-pipelines/dist-git-pipeline/-/blob/master/Jenkinsfile?ref_type=heads#L93
86+
if [[ -v KOJI_TASK_ID ]] || [[ -v CI_KOJI_TASK_ID ]]; then
87+
# Just left those ls commands here to ring the bell for me when something changed
88+
echo "$TMT_SOURCE_DIR"
89+
ls -al "$TMT_SOURCE_DIR"
90+
ls -al "$TMT_SOURCE_DIR/SRPMS"
91+
fi
92+
93+
ls -al /etc/yum.repos.d
94+
cat /etc/yum.repos.d/test-artifacts.repo
95+
ls -al /var/share/test-artifacts
96+
97+
# copy bootc rpm repo into image building root
98+
cp /etc/yum.repos.d/test-artifacts.repo "$BOOTC_TEMPDIR"
99+
100+
# Let's check things in hack folder
101+
ls -al "$BOOTC_TEMPDIR" "${BOOTC_TEMPDIR}/bin"
102+
103+
# Do not use just because it's only available on Fedora, not on CS and RHEL
104+
podman build --jobs=4 --from "$BASE" -v "$BOOTC_TEMPDIR":/bootc-test:z -t localhost/bootc-integration -f "${BOOTC_TEMPDIR}/Containerfile.packit" "$BOOTC_TEMPDIR"
105+
106+
# Keep these in sync with what's used in hack/lbi
107+
podman pull -q --retry 5 --retry-delay 5s quay.io/curl/curl:latest quay.io/curl/curl-base:latest registry.access.redhat.com/ubi9/podman:latest
108+
109+
# Run system-reinstall-bootc
110+
# TODO make it more scriptable instead of expect + send
111+
system-reinstall/system-reinstall-bootc.exp
112+
113+
# Reboot
114+
tmt-reboot
115+
;;
116+
1)
117+
# Some simple and fast checkings
118+
bootc status
119+
ls -al /var/ARTIFACTS
120+
ls -al /usr/local/bin
121+
echo "Bootc system on TMT/TF runner"
122+
exit 0
123+
;;
124+
*)
125+
echo "Invalid TMT_REBOOT_COUNT $TMT_REBOOT_COUNT"
126+
exit 1
127+
;;
128+
129+
esac
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
summary: Run system-reinstall-bootc test
2+
test: system-reinstall/test-system-reinstall-bootc.sh
3+
duration: 30m

0 commit comments

Comments
 (0)