Compare commits

...

No commits in common. "c9-beta" and "c9s-111" have entirely different histories.

9 changed files with 254 additions and 114 deletions

View File

@ -1,2 +0,0 @@
9ca5bceee40bd840b691c0a8024b2b6a916c36e7 SOURCES/bootc-1.8.0-vendor.tar.zstd
b97adc7d411b192030dddea89366e2d6ebc5c7c2 SOURCES/bootc-1.8.0.tar.zstd

1
.fmf/version Normal file
View File

@ -0,0 +1 @@
1

56
.gitignore vendored
View File

@ -1,2 +1,54 @@
SOURCES/bootc-1.8.0-vendor.tar.zstd
SOURCES/bootc-1.8.0.tar.zstd
/bootc-0.1.4.tar.zstd
/bootc-0.1.4-vendor.tar.zstd
/bootc-0.1.5.tar.zstd
/bootc-0.1.5-vendor.tar.zstd
/bootc-0.1.6-vendor.tar.zstd
/bootc-0.1.6.tar.zstd
/bootc-0.1.7-vendor.tar.zstd
/bootc-0.1.7.tar.zstd
/bootc-0.1.8.tar.zstd
/bootc-0.1.8-vendor.tar.zstd
/bootc-0.1.9.tar.zstd
/bootc-0.1.9-vendor.tar.zstd
/bootc-0.1.10-vendor.tar.zstd
/bootc-0.1.10.tar.zstd
/bootc-0.1.11.tar.zstd
/bootc-0.1.11-vendor.tar.zstd
/bootc-0.1.12.tar.zstd
/bootc-0.1.12-vendor.tar.zstd
/bootc-0.1.13.tar.zstd
/bootc-0.1.13-vendor.tar.zstd
/bootc-0.1.14-vendor.tar.zstd
/bootc-0.1.14.tar.zstd
/bootc-0.1.15.tar.zstd
/bootc-0.1.15-vendor.tar.zstd
/bootc-0.1.16.tar.zstd
/bootc-0.1.16-vendor.tar.zstd
/bootc-1.1.0.tar.zstd
/bootc-1.1.0-vendor.tar.zstd
/bootc-1.1.2.tar.zstd
/bootc-1.1.2-vendor.tar.zstd
/bootc-1.1.4.tar.zstd
/bootc-1.1.4-vendor.tar.zstd
/bootc-1.1.5.tar.zstd
/bootc-1.1.5-vendor.tar.zstd
/bootc-1.1.6-vendor.tar.zstd
/bootc-1.1.6.tar.zstd
/bootc-1.1.7.tar.zstd
/bootc-1.1.7-vendor.tar.zstd
/bootc-1.3.0.tar.zstd
/bootc-1.3.0-vendor.tar.zstd
/bootc-1.4.0.tar.zstd
/bootc-1.4.0-vendor.tar.zstd
/bootc-1.5.1.tar.zstd
/bootc-1.5.1-vendor.tar.zstd
/bootc-1.7.0-vendor.tar.zstd
/bootc-1.7.0.tar.zstd
/bootc-1.7.1-vendor.tar.zstd
/bootc-1.7.1.tar.zstd
/bootc-1.8.0-vendor.tar.zstd
/bootc-1.8.0.tar.zstd
/bootc-1.10.0.tar.zstd
/bootc-1.10.0-vendor.tar.zstd
/bootc-1.11.0.tar.zstd
/bootc-1.11.0-vendor.tar.zstd

View File

@ -1,65 +0,0 @@
diff --git i/tmt/tests/bootc-install-provision.sh w/tmt/tests/bootc-install-provision.sh
index c4c884b..29df30c 100755
--- i/tmt/tests/bootc-install-provision.sh
+++ w/tmt/tests/bootc-install-provision.sh
@@ -4,6 +4,8 @@ set -exuo pipefail
BOOTC_TEMPDIR=$(mktemp -d)
trap 'rm -rf -- "$BOOTC_TEMPDIR"' EXIT
+ARCH=$(uname -m)
+
# LBI only enabled for test-22-logically-bound-install
LBI="${LBI:-disabled}"
@@ -16,6 +18,28 @@ case "$ID" in
"fedora")
TIER1_IMAGE_URL="${TIER1_IMAGE_URL:-quay.io/fedora/fedora-bootc:${VERSION_ID}}"
;;
+ "rhel")
+ TIER1_IMAGE_URL="${TIER1_IMAGE_URL:-images.paas.redhat.com/bootc/rhel-bootc:latest-${VERSION_ID}}"
+
+ CURRENT_COMPOSE_ID=$(skopeo inspect --no-tags --retry-times=5 --tls-verify=false "docker://${TIER1_IMAGE_URL}" | jq -r '.Labels."redhat.compose-id"')
+
+ if [[ -n ${CURRENT_COMPOSE_ID} ]]; then
+ if [[ ${CURRENT_COMPOSE_ID} == *-updates-* ]]; then
+ BATCH_COMPOSE="updates/"
+ else
+ BATCH_COMPOSE=""
+ fi
+ else
+ BATCH_COMPOSE="updates/"
+ CURRENT_COMPOSE_ID=latest-RHEL-$VERSION_ID
+ fi
+
+ # use latest compose if specific compose is not accessible
+ RC=$(curl -skIw '%{http_code}' -o /dev/null "http://download.eng.bos.redhat.com/rhel-${VERSION_ID%%.*}/nightly/${BATCH_COMPOSE}RHEL-${VERSION_ID%%.*}/${CURRENT_COMPOSE_ID}/STATUS")
+ if [[ $RC != "200" ]]; then
+ CURRENT_COMPOSE_ID=latest-RHEL-${VERSION_ID%%}
+ fi
+ ;;
esac
if [ "$TMT_REBOOT_COUNT" -eq 0 ]; then
@@ -93,6 +117,22 @@ COMMONEOF
tee "$FEDORA_CI_CONTAINERFILE" > /dev/null << FEDORACIEOF
FROM $TIER1_IMAGE_URL
+RUN <<REPORUN
+tee "/etc/yum.repos.d/rhel.repo" >/dev/null <<RHELREPOEOF
+[rhel-baseos]
+name=baseos
+baseurl=http://download.eng.bos.redhat.com/rhel-${VERSION_ID%%.*}/nightly/${BATCH_COMPOSE}RHEL-${VERSION_ID%%.*}/${CURRENT_COMPOSE_ID}/compose/BaseOS/${ARCH}/os/
+enabled=1
+gpgcheck=0
+
+[rhel-appstream]
+name=appstream
+baseurl=http://download.eng.bos.redhat.com/rhel-${VERSION_ID%%.*}/nightly/${BATCH_COMPOSE}RHEL-${VERSION_ID%%.*}/${CURRENT_COMPOSE_ID}/compose/AppStream/${ARCH}/os/
+enabled=1
+gpgcheck=0
+RHELREPOEOF
+REPORUN
+
RUN dnf -y upgrade /rpms/*.rpm
FEDORACIEOF
cat >"$CONTAINERFILE" <<REALEOF

View File

@ -1,14 +0,0 @@
diff --git i/tmt/tests/bootc-install-provision.sh w/tmt/tests/bootc-install-provision.sh
index 6c9968c..c617d5e 100755
--- i/tmt/tests/bootc-install-provision.sh
+++ w/tmt/tests/bootc-install-provision.sh
@@ -50,7 +50,8 @@ if [ "$TMT_REBOOT_COUNT" -eq 0 ]; then
fi
# Some rhts-*, rstrnt-* and tmt-* commands are in /usr/local/bin
- cp -r /usr/local/bin "$BOOTC_TEMPDIR"
+ cp -r /var/lib/tmt/scripts "$BOOTC_TEMPDIR/bin"
+ ls -al "$BOOTC_TEMPDIR/bin"
# Check image building folder content
ls -al "$BOOTC_TEMPDIR"

View File

@ -1,4 +1,5 @@
%bcond_without check
%bcond_with tests
%if 0%{?rhel} >= 9 || 0%{?fedora} > 41
%bcond_without ostree_ext
%else
@ -11,9 +12,18 @@
%bcond_with rhsm
%endif
%global rust_minor %(rustc --version | cut -f2 -d" " | cut -f2 -d".")
# https://github.com/bootc-dev/bootc/issues/1640
%if 0%{?fedora} || 0%{?rhel} >= 10 || 0%{?rust_minor} >= 89
%global new_cargo_macros 1
%else
%global new_cargo_macros 0
%endif
Name: bootc
Version: 1.8.0
Release: 2%{?dist}
Version: 1.11.0
Release: 1%{?dist}
Summary: Bootable container system
# Apache-2.0
@ -25,15 +35,10 @@ Summary: Bootable container system
# MIT OR Apache-2.0
# Unlicense OR MIT
License: Apache-2.0 AND BSD-3-Clause AND MIT AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (Unlicense OR MIT)
URL: https://github.com/containers/bootc
URL: https://github.com/bootc-dev/bootc
Source0: %{url}/releases/download/v%{version}/bootc-%{version}.tar.zstd
Source1: %{url}/releases/download/v%{version}/bootc-%{version}-vendor.tar.zstd
# Don't remove, downstream patch only
# Patch for integration test RHEL 9.x and 10.x support
Patch0: 0000-bootc-inistall-provision.patch
Patch1: 0001-bootc-inistall-provision.patch
# https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval
ExcludeArch: %{ix86}
@ -41,6 +46,7 @@ BuildRequires: libzstd-devel
BuildRequires: make
BuildRequires: ostree-devel
BuildRequires: openssl-devel
BuildRequires: go-md2man
%if 0%{?rhel}
BuildRequires: rust-toolset
%else
@ -52,10 +58,13 @@ BuildRequires: skopeo ostree
# Backing storage tooling https://github.com/containers/composefs/issues/125
Requires: composefs
# For OS updates
# Keep this list in sync with workspace.metadata.binary-dependencies until we sync
# it automatically
Requires: ostree
Requires: skopeo
Requires: podman
Requires: util-linux-core
Requires: /usr/bin/chcon
# For bootloader updates
Recommends: bootupd
@ -76,83 +85,125 @@ Recommends: podman
%description -n system-reinstall-bootc
This package provides a utility to simplify reinstalling the current system to a given bootc image.
%if %{with tests}
%package tests
Summary: Integration tests for bootc
Requires: %{name} = %{version}-%{release}
%description tests
This package contains the integration test suite for bootc.
%endif
%global system_reinstall_bootc_install_podman_path %{_prefix}/lib/system-reinstall-bootc/install-podman
%if 0%{?container_build}
# Source is already at /src, no subdirectory
%global _buildsubdir .
%endif
%prep
%if ! 0%{?container_build}
%autosetup -p1 -a1
# Default -v vendor config doesn't support non-crates.io deps (i.e. git)
cp .cargo/vendor-config.toml .
%cargo_prep -N
cat vendor-config.toml >> .cargo/config.toml
rm vendor-config.toml
%else
# Container build: source already at _builddir (/src), nothing to extract
# RPM's %mkbuilddir creates a subdirectory; symlink it back to the source
cd ..
rm -rf %{name}-%{version}-build
ln -s . %{name}-%{version}-build
cd %{name}-%{version}-build
%endif
%build
# Build the main bootc binary
%if 0%{?fedora} || 0%{?rhel} >= 10
%cargo_build %{?with_rhsm:-f rhsm}
%else
%cargo_build %{?with_rhsm:--features rhsm}
%endif
# Build the system reinstallation CLI binary
%global cargo_args -p system-reinstall-bootc
export SYSTEM_REINSTALL_BOOTC_INSTALL_PODMAN_PATH=%{system_reinstall_bootc_install_podman_path}
%if 0%{?fedora} || 0%{?rhel} >= 10
# In cargo-rpm-macros, the cargo_build macro does flag processing,
# so we need to pass '--' to signify that cargo_args is not part
# of the macro args
%cargo_build -- %cargo_args
# Build this first to avoid feature skew
make manpages
# Build all binaries
%if 0%{?container_build}
# Container build: use cargo directly with cached dependencies to avoid RPM macro overhead
cargo build -j%{_smp_build_ncpus} --release %{?with_rhsm:--features rhsm} --bins
%else
# Older macros from rust-toolset do *not* do flag processing, so
# '--' would be passed through to cargo directly, which is not
# what we want.
%cargo_build %cargo_args
# Non-container build: use RPM macros for proper dependency tracking
%if %new_cargo_macros
%cargo_build %{?with_rhsm:-f rhsm} -- --bins
%else
%cargo_build %{?with_rhsm:--features rhsm} -- --bins
%endif
%endif
%if ! 0%{?container_build}
%cargo_vendor_manifest
# https://pagure.io/fedora-rust/rust-packaging/issue/33
sed -i -e '/https:\/\//d' cargo-vendor.txt
%cargo_license_summary
%{cargo_license} > LICENSE.dependencies
%endif
%install
%make_install INSTALL="install -p -c"
%if %{with ostree_ext}
make install-ostree-hooks DESTDIR=%{?buildroot}
%endif
%if %{with tests}
install -D -m 0755 target/release/tests-integration %{buildroot}%{_bindir}/bootc-integration-tests
%endif
mkdir -p %{buildroot}/%{dirname:%{system_reinstall_bootc_install_podman_path}}
cat >%{?buildroot}/%{system_reinstall_bootc_install_podman_path} <<EOF
#!/bin/bash
exec dnf -y install podman
EOF
chmod +x %{?buildroot}/%{system_reinstall_bootc_install_podman_path}
# generate doc file list excluding directories; workaround for
# https://github.com/coreos/rpm-ostree/issues/5420
touch %{?buildroot}/%{_docdir}/bootc/baseimage/base/sysroot/.keepdir
find %{?buildroot}/%{_docdir} ! -type d -printf '%{_docdir}/%%P\n' > bootcdoclist.txt
%if %{with check}
%check
%cargo_test
if grep -qEe 'Seccomp:.*0$' /proc/self/status; then
%cargo_test
else
echo "skipping unit tests due to https://github.com/rpm-software-management/mock/pull/1613#issuecomment-3421908652"
fi
%endif
%files
%files -f bootcdoclist.txt
%license LICENSE-MIT
%license LICENSE-APACHE
%if ! 0%{?container_build}
%license LICENSE.dependencies
%license cargo-vendor.txt
%endif
%doc README.md
%{_bindir}/bootc
%{_prefix}/lib/bootc/
%{_prefix}/lib/systemd/system-generators/*
%{_prefix}/lib/dracut/modules.d/51bootc/
%if %{with ostree_ext}
%{_prefix}/libexec/libostree/ext/*
%endif
%{_unitdir}/*
%{_docdir}/bootc/*
%{_mandir}/man*/bootc*
%{_mandir}/man*/*bootc*
%files -n system-reinstall-bootc
%{_bindir}/system-reinstall-bootc
%{system_reinstall_bootc_install_podman_path}
%if %{with tests}
%files tests
%{_bindir}/bootc-integration-tests
%endif
%changelog
* Thu Oct 30 2025 Joseph Marrero <jmarrero@fedoraproject.org> - 1.10.0-1
- Update to 1.10.0
- Resolves: #RHEL-125340
* Fri Sep 05 2025 Colin Walters <walters@verbum.org> - 1.8.0-2
- Update to 1.8.0

17
gating.yaml Normal file
View File

@ -0,0 +1,17 @@
--- !Policy
product_versions:
- fedora-*
decision_contexts:
- bodhi_update_push_stable
- bodhi_update_push_testing
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}
--- !Policy
product_versions:
- rhel-9
- rhel-10
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}

98
plans/all.fmf Normal file
View File

@ -0,0 +1,98 @@
discover:
how: fmf
dist-git-source: true
dist-git-install-builddeps: true
execute:
how: tmt
environment:
NIGHTLY_COMPOSE_SITE: download.devel.redhat.com
prepare:
# Install image mode system on package mode system
- how: install
order: 97
package:
- podman
- skopeo
- jq
- bootc
- system-reinstall-bootc
- expect
- ansible-core
- zstd
- how: shell
order: 98
script:
- pwd && ls -al && ls -al /var/share/test-artifacts && mkdir -p bootc && cp /var/share/test-artifacts/*.src.rpm bootc
- cd bootc && ls -al && rpm2cpio *.src.rpm | cpio -idmv && rm -f *-vendor.tar.zstd && zstd -d *.tar.zstd && tar -xvf *.tar -C . --strip-components=1 && ls -al
- cd bootc/hack && ./provision-packit.sh
# tmt-reboot and reboot do not work in this case
# reboot in ansible is the only way to reboot in tmt prepare
- how: ansible
order: 99
playbook:
- https://github.com/bootc-dev/bootc/raw/refs/heads/main/hack/packit-reboot.yml
/plan-01-readonly:
summary: Execute booted readonly/nondestructive tests
discover+:
how: fmf
test:
- /tmt/tests/tests/test-01-readonly
extra-try_bind_storage: true
/plan-20-image-pushpull-upgrade:
summary: Execute local upgrade tests
discover+:
how: fmf
test:
- /tmt/tests/tests/test-20-image-pushpull-upgrade
/plan-21-logically-bound-switch:
summary: Execute logically bound images tests for switching images
discover+:
how: fmf
test:
- /tmt/tests/tests/test-21-logically-bound-switch
/plan-22-logically-bound-install:
summary: Execute logically bound images tests for installing image
discover+:
how: fmf
test:
- /tmt/tests/tests/test-22-logically-bound-install
/plan-23-install-outside-container:
summary: Execute tests for installing outside of a container
discover+:
how: fmf
test:
- /tmt/tests/tests/test-23-install-outside-container
/plan-23-usroverlay:
summary: Execute tests for bootc usrover
discover+:
how: fmf
test:
- /tmt/tests/tests/test-23-usroverlay
/plan-24-image-upgrade-reboot:
summary: Execute local upgrade tests
discover+:
how: fmf
test:
- /tmt/tests/tests/test-24-image-upgrade-reboot
extra-try_bind_storage: true
/plan-25-soft-reboot:
summary: Execute soft reboot test
discover+:
how: fmf
test:
- /tmt/tests/tests/test-25-soft-reboot
/plan-29-soft-reboot-selinux-policy:
summary: Test soft reboot with SELinux policy changes
discover+:
how: fmf
test:
- /tmt/tests/tests/test-29-soft-reboot-selinux-policy

2
sources Normal file
View File

@ -0,0 +1,2 @@
SHA512 (bootc-1.11.0.tar.zstd) = f3bc4ca8d99abe5154fbccf84694bd5aebdb819d90a83ad119aee7ae4469b2e4f5313e6ce65831c007d88ddabe144bc9757793d16963a9d52ff66912057049f0
SHA512 (bootc-1.11.0-vendor.tar.zstd) = 2198d4cf9e9e44e30f1f3e998e8d640afa5fa7d2b0904a6d1ea972ff637e2a55e37fbf2b2e18454736208cec6541b98c0bd685bc8fd959346aa2be1b4aaa1729