base-images/Justfile
Jonathan Lebon 0bf47996ec
Containerfile: add chunked build target
Add optional rechunker and chunked stages that use chunkah for
content-based layer splitting. This allows folding the splitting step
into the build step.

Through some build arg and redirection trickery, this leaves the
unchunked path functionally identical.

Assisted-by: OpenCode (Claude Opus 4.6)
2026-04-02 13:22:44 -04:00

91 lines
3.4 KiB
Makefile

# Development entry point for fedora-bootc base images.
# Run `just --list` to see available targets.
# See CONTRIBUTING.md for more information.
# --------------------------------------------------------------------
# Content tier: standard (default), minimal, minimal-plus, iot
tier := env("TIER", "standard")
# Fedora version: rawhide (default), 43, 44, etc.
fedora_version := env("FEDORA_VERSION", "rawhide")
# Container build tool
builder := env("BUILDER", "buildah")
# Extra arguments for the builder
builder_extra := env("BUILDER_EXTRA", "")
# Output image name
image := "localhost/fedora-bootc"
# These are required for the nested containerization used by rpm-ostree
# inside the Containerfile.
priv_args := "--security-opt=label=disable --cap-add=all --device /dev/fuse"
# Internal
_build_cmd := builder + " build"
_tag := image + if tier == "standard" { "" } else { ":" + tier }
_base_image := "quay.io/fedora/fedora:" + fedora_version
_version_args := if fedora_version == "rawhide" { "" } else { "--build-arg=REPOS_IMAGE=" + _base_image + " --build-arg=BUILDER_IMAGE=" + _base_image }
_chunkah_args := "--build-arg FINAL=chunked --skip-unused-stages=false -v " + justfile_directory() + ":/run/src"
# ============================================================================
# Core targets
# ============================================================================
# Build the container image
[group('core')]
[arg("chunkah", long, value="true")]
build chunkah="": _check-tier
{{_build_cmd}} -f Containerfile --no-cache \
-t {{_tag}} {{priv_args}} \
{{_version_args}} {{builder_extra}} \
{{if chunkah != "" { _chunkah_args } else { "" }}} \
--build-arg=MANIFEST=fedora-{{tier}} .
# Build and test
[group('core')]
test: build
#!/usr/bin/env bash
set -xeuo pipefail
{{_build_cmd}} -f tests/rootfs/Dockerfile -t localhost/test --from {{_tag}} tests/rootfs
# The derive and sysusers tests only apply to the standard tier
if [ "{{tier}}" = "standard" ]; then
{{_build_cmd}} -f tests/Containerfile.test-derive --no-cache \
-t localhost/fedora-bootc-derived {{priv_args}} {{builder_extra}} tests
{{_build_cmd}} -f tests/Containerfile.test-sysusers --no-cache \
-t localhost/fedora-bootc-derived {{priv_args}} {{builder_extra}} tests
fi
# Run validation checks (whitespace, shellcheck, YAML)
[group('core')]
validate:
#!/usr/bin/env bash
set -xeuo pipefail
./ci/find-whitespace
./ci/shellcheck
./ci/validate
# Show current configuration
[group('core')]
show-config:
@echo "TIER={{tier}}"
@echo "FEDORA_VERSION={{fedora_version}}"
@echo "BUILDER={{builder}}"
@echo "image tag={{_tag}}"
@echo "base image={{_base_image}}"
# ============================================================================
# CI targets (used by .gitlab-ci.yml)
# ============================================================================
# Run all CI checks: validate + build and test all tiers
[group('ci')]
ci: validate
just tier=minimal test
just tier=minimal-plus test
just tier=standard test
# ============================================================================
# Internal
# ============================================================================
[private]
_check-tier:
@test -f fedora-{{tier}}.yaml || { echo "error: unknown tier '{{tier}}' (valid: standard, minimal, minimal-plus, iot)"; exit 1; }