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