Build Dependencies
This guide covers how to create and manage one-shot build dependencies for Garden Linux packages using bp-package repositories.
What are Build Dependencies?
Some packages require specific versions of library or tool dependencies that are not available in the base Garden Linux environment or in Debian. These are called build-time dependencies - they are only needed during the compilation process, not at runtime.
In Garden Linux, we use bp-package repositories ("build-package") to handle these special build dependencies. These repositories are one-shot solutions that provide exactly what's needed for a specific package build.
When to Use bp-package Repositories
Use a bp-package repository when:
- A package (ABC) requires a build dependency (XYZ) in a specific version
- The required version of XYZ is not available in the base Garden Linux environment
- The dependency is only needed for building, not for runtime
- You need to apply specific patches to the dependency before building
- The dependency is temporary or experimental
Examples:
- Building a package against a newer version of a library
- Applying security patches to a build tool
- Using a forked version of a dependency
- Experimental features requiring custom dependencies
Creating a bp-package Repository
To create a bp-package repository:
- Create a new repository with the naming convention
bp-package-<name> <version> - Follow the same packaging rules as regular packages
- Build and release the package to GitHub
The bp-package repository is not included in the package-releases file of gardenlinux/repo, but it is included in the build of the dependent package.
DANGER
In rescent Garden Linux Release, some bp-* packages ended up in the package-releases files. Please be aware of this.
Using Build Dependencies in Workflows
Specify the build dependency in the GitHub Actions workflow of the main package using the build_dep parameter.
on:
push:
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
jobs:
build:
uses: gardenlinux/package-build/.github/workflows/build.yml@main
with:
release: ${{ github.ref == 'refs/heads/main' }}
build_dep: gardenlinux/package-XYZ 0.0.1-0gl0+bpwhateverParameters:
build_dep: Specifies the dependency repository and version in the format<repo> <tag>- The dependency is automatically fetched and made available during the build
Complete Example
For a package that requires a patched version of libtool:
- Create
bp-package-libtoolrepository with the patched version - Release version
0.0.1-0gl0+bp1 - In the main package workflow, add:
build_dep: gardenlinux/bp-package-libtool 0.0.1-0gl0+bp1The build system will automatically fetch the dependency and use it during compilation.
Important Notes
WARNING
Build-time dependencies between packages are not updated automatically and need to be adjusted manually when needed.
INFO
bp-package repositories should be kept minimal and focused only on providing the necessary build dependency. They are not intended for general use or long-term maintenance.
TIP
For widely-used dependencies that will be needed by multiple packages, consider adding them to the base Garden Linux environment instead of using bp-package.