mirror of
https://github.com/containers/bootc.git
synced 2026-02-05 06:45:13 +01:00
GitHub Actions runners are nested VMs, and bcvk's use of virtiofs causes systemd-journald to enter a livelock when writing to persistent storage in nested virtualization environments. Add the kernel argument systemd.journald.storage=volatile to force journald to use tmpfs instead, which avoids the livelock. This workaround is needed until bcvk issue #90 is fully resolved upstream. Fixes: https://github.com/bootc-dev/bootc/pull/1708#issuecomment-2494643831 Related: https://github.com/bootc-dev/bcvk/issues/90 Assisted-by: Claude Code (Sonnet 4.5)
108 lines
4.2 KiB
Makefile
108 lines
4.2 KiB
Makefile
# The default entrypoint to working on this project.
|
|
# Commands here typically wrap e.g. `podman build` or
|
|
# other tools like `bcvk` which might launch local virtual machines.
|
|
#
|
|
# See also `Makefile` and `xtask.rs`. Commands which end in `-local`
|
|
# skip containerization or virtualization.
|
|
|
|
# --------------------------------------------------------------------
|
|
|
|
# Build the container image from current sources.
|
|
# Note commonly you might want to override the base image via e.g.
|
|
# `just build --build-arg=base=quay.io/fedora/fedora-bootc:42`
|
|
build *ARGS:
|
|
podman build --jobs=4 -t localhost/bootc {{ARGS}} .
|
|
|
|
# Build a sealed image from current sources. This will default to
|
|
# generating Secure Boot keys in target/test-secureboot.
|
|
build-sealed *ARGS:
|
|
podman build --build-arg=sdboot=1 --jobs=4 -t localhost/bootc-unsealed {{ARGS}} .
|
|
./tests/build-sealed localhost/bootc-unsealed localhost/bootc
|
|
|
|
# This container image has additional testing content and utilities
|
|
build-integration-test-image *ARGS:
|
|
cd hack && podman build --jobs=4 -t localhost/bootc-integration -f Containerfile {{ARGS}} .
|
|
# Keep these in sync with what's used in hack/lbi
|
|
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
|
|
|
|
test-composefs: build-sealed
|
|
cargo run --release -p tests-integration -- composefs-bcvk localhost/bootc
|
|
|
|
# Only used by ci.yml right now
|
|
build-install-test-image: build-integration-test-image
|
|
cd hack && podman build -t localhost/bootc-integration-install -f Containerfile.drop-lbis
|
|
|
|
build-disk-image container target:
|
|
bcvk to-disk --format=qcow2 --disk-size 20G --filesystem ext4 --karg systemd.journald.storage=volatile {{container}} {{target}}
|
|
|
|
# These tests accept the container image as input, and may spawn it.
|
|
run-container-external-tests:
|
|
./tests/container/run localhost/bootc
|
|
|
|
# We build the unit tests into a container image
|
|
build-units:
|
|
podman build --jobs=4 --target units -t localhost/bootc-units .
|
|
|
|
# Perform validation (build, linting) in a container build environment
|
|
validate:
|
|
podman build --jobs=4 --target validate .
|
|
|
|
# Directly run validation (build, linting) using host tools
|
|
validate-local:
|
|
make validate
|
|
|
|
# This generates a disk image (using bcvk) from the default container
|
|
build-disk *ARGS:
|
|
./tests/build.sh {{ARGS}}
|
|
|
|
# The tests which run a fully booted bootc system (i.e. where in place
|
|
# updates are supported) as if it were a production environment use
|
|
# https://github.com/teemtee/tmt.
|
|
#
|
|
# This task runs *all* of the tmt-based tests targeting the disk image generated
|
|
# in the previous step.
|
|
test-tmt *ARGS: build-disk
|
|
./tests/run-tmt.sh {{ARGS}}
|
|
|
|
# Like test-tmt but assumes that a disk image is already built
|
|
test-tmt-nobuild *ARGS:
|
|
./tests/run-tmt.sh {{ARGS}}
|
|
|
|
# Run just one tmt test: `just test-tmt-one test-20-local-upgrade`
|
|
test-tmt-one PLAN: build-disk
|
|
./tests/run-tmt.sh plan --name {{PLAN}}
|
|
|
|
# Run tests (unit and integration) that are containerized
|
|
test-container: build-units build-integration-test-image
|
|
podman run --rm --read-only localhost/bootc-units /usr/bin/bootc-units
|
|
podman run --rm localhost/bootc-integration bootc-integration-tests container
|
|
|
|
build-mdbook:
|
|
cd docs && podman build -t localhost/bootc-mdbook -f Dockerfile.mdbook
|
|
|
|
# Generate the rendered HTML to the target DIR directory
|
|
build-mdbook-to DIR: build-mdbook
|
|
#!/bin/bash
|
|
set -xeuo pipefail
|
|
# Create a temporary container to extract the built docs
|
|
container_id=$(podman create localhost/bootc-mdbook)
|
|
podman cp ${container_id}:/src/book {{DIR}}
|
|
podman rm -f ${container_id}
|
|
|
|
mdbook-serve: build-mdbook
|
|
#!/bin/bash
|
|
set -xeuo pipefail
|
|
podman run --init --replace -d --name bootc-mdbook --rm --publish 127.0.0.1::8000 localhost/bootc-mdbook
|
|
echo http://$(podman port bootc-mdbook 8000/tcp)
|
|
|
|
# Update all generated files (man pages and JSON schemas)
|
|
#
|
|
# This is the unified command that:
|
|
# - Auto-discovers new CLI commands and creates man page templates
|
|
# - Syncs CLI options from Rust code to existing man page templates
|
|
# - Updates JSON schema files
|
|
#
|
|
# Use this after adding, removing, or modifying CLI options or schemas.
|
|
update-generated:
|
|
cargo run -p xtask update-generated
|