Development: Unified build system for OS images, pods, VMs, and ISOs. Run from repository root with 'just build <subcommand>'. Includes smart cache strategy that matches GitHub Actions for optimal build times.
Unified build system for OS images, pods, VMs, and ISOs using `just build <subcommand>`. Triggers when users request building, testing, pushing, or signing container images and virtual machine assets.
/plugin marketplace add atrawog/bazzite-ai-plugins/plugin install bazzite-ai-dev@bazzite-ai-pluginsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
The build command provides a unified interface for all bazzite-ai build operations:
Smart Caching: Automatically detects git branch and uses matching cache tag, ensuring local builds are compatible with GitHub Actions builds.
| Action | Command | Description |
|---|---|---|
| Build OS | just build os | Build OS container image |
| Build pod | just build pod nvidia | Build specific pod variant |
| Build all pods | just build pod all | Build all pod variants |
| Build ISO | just build iso | Build live ISO installer |
| Build QCOW2 | just build qcow2 | Build QCOW2 VM image |
| Build RAW | just build raw | Build RAW VM image |
| Test pod | just build test cuda | Test CUDA functionality |
| Test all | just build test all | Test all pod variants |
| Generate lock | just build pixi python | Generate pixi.lock |
| Push OS | just build push os | Push OS image to registry |
| Push pod | just build push pod nvidia | Push pod to registry |
| Sign OS | just build sign os | Sign OS image with cosign |
| Sign pod | just build sign pod nvidia | Sign pod with cosign |
| Show status | just build status | Show cache/build status |
| Variant | Image Name | Description |
|---|---|---|
base | bazzite-ai-pod | CPU-only development |
nvidia | bazzite-ai-pod-nvidia | GPU compute with CUDA |
nvidia-python | bazzite-ai-pod-nvidia-python | NVIDIA + ML packages |
jupyter | bazzite-ai-pod-jupyter | JupyterLab + ML stack |
ollama | bazzite-ai-pod-ollama | LLM inference |
comfyui | bazzite-ai-pod-comfyui | Stable Diffusion UI |
devops | bazzite-ai-pod-devops | AWS/kubectl/Helm tools |
githubrunner | bazzite-ai-pod-githubrunner | CI/CD pipeline |
The build system automatically detects your git branch and uses the appropriate cache tag to maximize cache reuse between local and CI builds:
| Branch | Cache Tag | Build Tag |
|---|---|---|
main | stable | stable |
testing | testing | testing |
| Other | {branch} | {branch} |
This ensures that when you build locally on the testing branch, you pull cache layers from the :testing images pushed by GitHub Actions.
For CI integration, the following environment variables are supported:
| Variable | Purpose |
|---|---|
COSIGN_PRIVATE_KEY | Private key for signing with cosign |
BUILD_LABELS | Space-separated OCI labels to apply during build |
BUILD_TAGS | Space-separated tags to apply (overrides default) |
BASE_IMAGE | Override base image for pod builds (for digest pinning) |
# Build with branch-appropriate tag
just build os
# Build with custom tag
just build os custom-tag
# Interactive selection
just build pod
# Specific variant
just build pod nvidia
# All variants
just build pod all
# Build QCOW2 VM image
just build qcow2
# Build live ISO
just build iso
# Build RAW image
just build raw
# Test CUDA
just build test cuda
# Test DevOps tools
just build test devops
# All tests
just build test all
# Push OS image
just build push os
# Push specific pod
just build push pod nvidia
# Push all pods
just build push pod all
# Sign OS image (requires COSIGN_PRIVATE_KEY env var)
COSIGN_PRIVATE_KEY=$KEY just build sign os
# Sign pod
COSIGN_PRIVATE_KEY=$KEY just build sign pod nvidia
# Python variant
just build pixi python
# Jupyter variant
just build pixi jupyter
# All variants
just build pixi all
The build commands are designed for GitHub Actions integration:
# Build, push, and sign in CI
- name: Build and push OS
env:
BUILD_LABELS: ${{ steps.metadata.outputs.labels }}
COSIGN_PRIVATE_KEY: ${{ secrets.SIGNING_SECRET }}
run: |
just build os $TAG
just build push os $TAG
just build sign os $TAG
# Build pod with base image digest
- name: Build nvidia pod
env:
BASE_IMAGE: ghcr.io/owner/bazzite-ai-pod@${{ needs.base.outputs.digest }}
run: just build pod nvidia $TAG
Images are tagged with the registry prefix:
ghcr.io/atrawog/bazzite-ai:{tag} # OS image
ghcr.io/atrawog/bazzite-ai-pod:{tag} # Base pod
ghcr.io/atrawog/bazzite-ai-pod-nvidia:{tag} # NVIDIA pod
ghcr.io/atrawog/bazzite-ai-pod-comfyui:{tag} # ComfyUI pod
Symptom: Cache layer not found
Cause: Remote image not yet pushed for this branch
Fix:
# Build without cache (first build on new branch)
# Or check status to see cache state
just build status
Symptom: Cannot find base pod image
Cause: Parent variant not built
Fix:
# Build in order (base -> nvidia -> jupyter)
just build pod base
just build pod nvidia
just build pod jupyter
Symptom: unauthorized: authentication required
Cause: Not logged into registry
Fix:
# Login to GitHub Container Registry
podman login ghcr.io
Symptom: cosign not found or key not set
Cause: cosign not installed or COSIGN_PRIVATE_KEY not set
Fix:
# Check cosign is installed
which cosign
# Set signing key
export COSIGN_PRIVATE_KEY="$(cat cosign.key)"
Symptom: nvidia-smi not found
Cause: No GPU available or CDI not configured
Fix:
# Verify GPU on host
nvidia-smi
# Check CDI configuration
ls /etc/cdi/
clean (cleanup build artifacts)ujust jupyter, ujust ollama (use built pods)Containerfile for image layersUse when the user asks about:
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.