Overview
Terra uses Anda as its build system, which provides automation for building RPM packages from the monorepo. The build system includes:- anda.hcl - Package configuration files
- andax/ - Automation scripts written in Rhai
- CI/CD integration - GitHub Actions workflows
- Mock - Isolated build environments
Build Process Flow
Anda Command Line Interface
Building Packages
Testing Builds
Andax Scripts
Theandax/ directory contains Rhai scripts that extend Anda’s functionality.
spec.rhai
Utility functions for parsing RPM spec files:nvidia.rhai
Functions for fetching NVIDIA driver and CUDA component versions:bump_extras.rhai
Helper functions for version tracking across distributions:get_proj_label.rhai
Extract labels from anda.hcl files:CI Scripts
update_commit_message.rhai
Generates commit messages for automated updates:extra_repos.rhai
Installs extra repositories during mock builds:Mock Build Environment
Mock provides isolated build environments that prevent dependency pollution.When to Use Mock
Enable mock builds (
labels.mock = 1) when:- Package requires
extra_repos - Build has complex dependency chains
- Need guaranteed clean environment
- Package is security-sensitive
Mock Configuration
Mock environments are configured per Fedora version:Mock Build Process
Build Artifacts
Directory Structure
Build Logs
CI/CD Integration
GitHub Actions Workflow
Terra uses GitHub Actions for automated builds:Build Matrix
Builds run across multiple Fedora versions:Troubleshooting
Build fails with missing dependencies
Build fails with missing dependencies
Solution 1: Add to Solution 2: Add extra repository to anda.hcl
BuildRequires in spec fileMock build fails but direct build works
Mock build fails but direct build works
Check that all dependencies are properly declared:Missing
BuildRequires often cause mock-only failures.Extra repos not working
Extra repos not working
Verify repository URL format:
Build succeeds but package doesn't install
Build succeeds but package doesn't install
Check file conflicts:May need
Conflicts: or Obsoletes: in spec.Build is too slow
Build is too slow
For large packages:Parallelize builds:
Advanced Topics
Custom Build Scripts
Create custom Rhai scripts for specialized workflows:Multi-Stage Builds
Some packages require building dependencies first:Cross-Architecture Builds
Build System Architecture
Component Diagram
Performance Optimization
Caching
Parallel Builds
Mock Optimizations
Related Documentation
- anda.hcl Reference - Configuration file format
- RPM Spec Reference - Writing spec files
- Contributing Guide - Submitting packages
- Rhai Language - Scripting language documentation