FFOS is the centralized build repository responsible for creating FFOS images. It orchestrates the entire build process by coordinating with the ffos-user repository for components and user data.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ ffos-user │ │ ffos │ │ R2 Storage │
│ Repository │ │ Repository │ │ │
│ │ │ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ components/ │ │ │ │ GitHub │ │ │ │ {branch}/ │ │
│ │ users/ │ │ │ │ Actions │ │ │ │ os/x86_64/ │ │
│ └─────────────┘ │ │ └─────────────┘ │ │ │ *.iso │ │
│ │ │ │ │ └─────────────┘ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ ▲
│ │ │
│ │ │
▼ ▼ │
Component Code Build Process Upload Results
User Data ISO Generation
ffos/
├── .github/workflows/ # GitHub Actions workflows
│ ├── build-components.yaml # Individual component build
│ ├── pacman-repo.yaml # Pacman repository management
│ ├── build-image-to-cf.yml # Complete build pipeline
│ └── pure-build-image-to-cf.yml # Pure ISO build
├── archiso-ff1/ # Archiso configuration
│ ├── airootfs/ # Root filesystem template
│ ├── efiboot/ # EFI boot configuration
│ ├── packages.x86_64 # Package list
│ └── profiledef.sh # Profile definition
└── README.md # This file
Purpose: Build individual components from ffos-user repository
Inputs:
component: Component name (feral-controld, feral-setupd, etc.)version: Package versionffos_user_ref: ffos-user repository referenceenvironment: Build environment (Development/Production)
Process:
- Checkout ffos-user repository using specified reference
- Determine build type (Go/Rust) based on component
- Create pacman package with PKGBUILD
- Upload package to R2 storage
Output: Pacman package uploaded to {branch}/os/x86_64/
Purpose: Manage pacman repository database
Process:
- Download all packages from R2
- Generate repository database
- Clean old packages
- Upload updated database
Output: Updated feralfile.db.tar.gz and feralfile.files.tar.gz
Purpose: Complete ISO build pipeline
Workflow:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Build All │ │ Update Pacman │ │ Build ISO │
│ Components │───▶│ Repository │───▶│ Image │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
Upload Packages Generate DB Upload ISO
to R2 Storage Clean Old Pkgs to R2 Storage
Steps:
- Component Build Phase: Build all components in parallel
- Repository Update Phase: Update pacman repository
- ISO Generation Phase:
- Copy archiso profile
- Merge user data from ffos-user
- Configure pacman repositories
- Build ISO image
- Upload to R2
Purpose: Fast ISO build without component building
Use Case: When components already exist in R2 storage
Process:
- Skip component building
- Directly build ISO with existing components
- Upload ISO to R2
ffos-user/components/ → ffos build process → R2/{branch}/os/x86_64/
ffos-user/users/ → ISO airootfs/home/ → Final ISO
ffos-user/users/feralfile/.config/ → ISO /home/feralfile/.config/
ffos-user/users/soaktest/ → ISO /home/soaktest/ (conditional)
CLOUDFLARE_ACCOUNT_ID: Cloudflare account identifierCLOUDFLARE_ACCESS_KEY_ID: R2 access keyCLOUDFLARE_SECRET_ACCESS_KEY: R2 secret keyREPO_ACCESS_TOKEN: GitHub token for ffos-user access
version: ISO version numberffos_user_ref: ffos-user repository referencesoak-test: Include soak test componentsenvironment: Development/Production environmentis_development: Include development toolsinstall_to_emmc: Build installation image
{branch}/
├── os/x86_64/
│ ├── feral-controld-{version}-x86_64.pkg.tar.zst
│ ├── feral-setupd-{version}-x86_64.pkg.tar.zst
│ ├── feral-sys-monitord-{version}-x86_64.pkg.tar.zst
│ ├── feral-watchdog-{version}-x86_64.pkg.tar.zst
│ ├── feralfile.db.tar.gz
│ └── feralfile.files.tar.gz
├── FF1-{develop|release|demo|other}-{version}.iso
└── release_notes_{version}.md