Bootc Build Test Workflow
Run a bootc build with the specified parameters, monitor until completion, and download the artifact.
Parameters
$ARGUMENTS contains the build name (required)
Required Environment Variables
Before running, ensure these are set:
- •
BOOTC_REGISTRY- Base registry URL (e.g.,quay.io/myorg/myimage) - •
REGISTRY_USERNAME- Registry username (or read fromregistry-userfile) - •
REGISTRY_PASSWORD- Registry password (or read fromregistry-passfile)
Execution Steps
1. Validate Environment
bash
# Check required environment if [ -z "$BOOTC_REGISTRY" ]; then echo "ERROR: BOOTC_REGISTRY environment variable not set" echo "Example: export BOOTC_REGISTRY=quay.io/myorg/myimage" exit 1 fi
2. Infer CAIB_SERVER from OpenShift Route
bash
CAIB_SERVER="https://$(oc get route ado-build-api -n automotive-dev-operator-system -o jsonpath='{.spec.host}')"
echo "Using CAIB_SERVER: $CAIB_SERVER"
3. Get Authentication Token
bash
TOKEN=$(oc whoami -t)
4. Get Registry Credentials
bash
# Try environment variables first, fall back to files
REGISTRY_USERNAME="${REGISTRY_USERNAME:-$(cat registry-user 2>/dev/null)}"
REGISTRY_PASSWORD="${REGISTRY_PASSWORD:-$(cat registry-pass 2>/dev/null)}"
5. Submit Build with Download
The build command creates a bootc container image and optionally a disk image.
bash
BUILD_NAME="$ARGUMENTS"
PUSH_IMAGE="${BOOTC_REGISTRY}:latest"
DISK_IMAGE="${BOOTC_REGISTRY}:latest-disk"
OUTPUT_FILE="./output/${BUILD_NAME}.qcow2"
bin/caib build simple.aib.yml \
--server "$CAIB_SERVER" \
--token "$TOKEN" \
--name "$BUILD_NAME" \
--arch arm64 \
--target qemu \
--push "$PUSH_IMAGE" \
--disk \
--format qcow2 \
--push-disk "$DISK_IMAGE" \
--output "$OUTPUT_FILE" \
--registry-username "$REGISTRY_USERNAME" \
--registry-password "$REGISTRY_PASSWORD" \
--follow
6. Monitor Build (if not using --follow)
bash
# Check build status
oc get imagebuild -n automotive-dev-operator-system $BUILD_NAME -o jsonpath='{.status.phase}'
7. On Failure - Debug
bash
# Get PipelineRun name from ImageBuild status
PIPELINE_RUN=$(oc get imagebuild -n automotive-dev-operator-system $BUILD_NAME -o jsonpath='{.status.pipelineRunName}')
# Get pod name using correct PipelineRun label
POD=$(oc get pods -n automotive-dev-operator-system -l tekton.dev/pipelineRun=${PIPELINE_RUN} -o jsonpath='{.items[0].metadata.name}')
# Get build logs
oc logs -n automotive-dev-operator-system $POD -c step-build-image --tail=200
# Check for common issues
oc logs -n automotive-dev-operator-system $POD -c step-build-image | grep -i "builder\|cluster registry\|Pulling\|error\|failed"
8. Verify Download
bash
# Check if artifact was downloaded if [ -f "$OUTPUT_FILE" ]; then echo "SUCCESS: Artifact downloaded to $OUTPUT_FILE" ls -lh "$OUTPUT_FILE" else echo "WARNING: Artifact not found at $OUTPUT_FILE" fi
9. Report Results
Provide a summary with:
- •Build status (success/failure)
- •Download location and file size
- •If failed: the specific error and relevant log snippets
- •Suggestions for fixes based on the error type
CLI Command Reference
build (bootc - default)
Creates a bootc container image from an AIB manifest.
bash
caib build <manifest.aib.yml> \ --push <registry/image:tag> # Required: push container to registry --disk # Also build disk image from container --format <qcow2|raw|simg> # Disk image format (default: qcow2) --push-disk <registry/img:tag> # Push disk as OCI artifact --output <file> # Download disk image to file --follow # Follow build logs --wait # Wait for build to complete
disk
Creates a disk image from an existing bootc container.
bash
caib disk <container-ref> \ --push <registry/image:tag> # Push disk as OCI artifact --output <file> # Download disk image to file --format <qcow2|raw|simg> # Disk format (default: qcow2)
build-legacy
Traditional ostree/package-based builds (for backwards compatibility).
bash
caib build-legacy <manifest.aib.yml> \ --mode <image|package> # Required: build mode --format <qcow2|raw|simg> # Required: export format --name <build-name> # Required: build name
Common Error Patterns
- •"Builder image not found" - prepare-builder task failed or result not passed
- •"containers-storage: invalid reference" - skopeo copy using wrong format
- •"setfiles: Operation not supported" - SELinux context issues in osbuild
- •"unauthorized" - Token or registry auth issues
- •"BOOTC_REGISTRY not set" - Environment variable missing
- •"container-ref is required for disk mode" - Missing container reference for disk command
Alternative: Download Only (for completed builds)
bash
bin/caib download \ --server "$CAIB_SERVER" \ --token "$TOKEN" \ --name "$BUILD_NAME" \ --output-dir ./output