Tutorial
Upstream Package Dependencies
Airfield packages list dependencies by name in airfield.yaml. Each dependency
must have a matching manifest in dependencies/<target-device>/ or in the shared
Airfield packages repository.
Use local dependency manifests while developing a package. Upstream them when they are ready to be shared by other packages.
1. Add a local manifest
For a project package, place manifests at the project root:
my_robot/
dependencies/
x86_64/
my_driver.yaml
For a standalone package, place manifests at the package root:
nav_stack/
dependencies/
x86_64/
my_driver.yaml
Example manifest:
name: my_driver
version: 1.0.0
ros_versions:
- jazzy
system:
- apt-get update && apt-get install -y libmy-driver-dev && rm -rf /var/lib/apt/lists/*
user: []
Then reference it from the package:
dependencies:
- my_driver
2. Check for shared-repository conflicts
Run the check from the package or project directory:
airfield package dependencies check . --target-device x86_64
Or pass the directory explicitly:
airfield package dependencies check ./packages/nav_stack --target-device x86_64
Airfield prints the local dependency root, the shared repository root, and any manifest names that already exist upstream. If a conflict is reported, rename the local manifest or use the existing shared dependency.
3. Copy manifests into the shared package repository
airfield package dependencies upstream . --target-device x86_64
Airfield asks before copying local manifest files into the shared packages
repository. After copying, create a feature branch, commit, push, and open a pull
request in https://github.com/airfield/packages.
4. Repeat for each target device
Dependency manifests are target-specific. If the dependency supports both architectures, check and upstream each target:
airfield package dependencies check . --target-device x86_64
airfield package dependencies upstream . --target-device x86_64
airfield package dependencies check . --target-device arm64
airfield package dependencies upstream . --target-device arm64
Manifest fields
namemust match the YAML filename without.yaml.versionversions the dependency manifest.ros_versionsis optional and limits the manifest to specific ROS distributions.systemcommands run as root during image build.usercommands run as the package user during image build.host_dependenciescan declare host-side requirements such as GPU drivers.