Central Debian package repository for WATonomous projects, hosted via GitHub Pages.
This repository serves as a centralized APT repository where all WATonomous projects can publish their Debian packages. The repository is hosted using GitHub Pages and can be accessed at:
┌─────────────────┐
│ project-a │─┐
│ (source repo) │ │
└─────────────────┘ │
│
┌─────────────────┐ │ ┌──────────────────────┐
│ project-b │─┼───▶│ wato_apt_repository │
│ (source repo) │ │ │ (GitHub Pages) │
└─────────────────┘ │ └──────────────────────┘
│ │
┌─────────────────┐ │ ▼
│ project-c │─┘ ┌─────────┐
│ (source repo) │ │ Users │
└─────────────────┘ └─────────┘
Each source repository builds its .deb packages and pushes them to this central repository via GitHub Actions. Users can then install all WATonomous packages from a single APT source.
To use this repository on Ubuntu/Debian systems:
# Download and add the GPG key
curl -fsSL https://apt.watonomous.ca/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/watonomous-archive-keyring.gpg > /dev/null
# Add the repository
echo "deb [signed-by=/usr/share/keyrings/watonomous-archive-keyring.gpg] https://apt.watonomous.ca stable main" | \
sudo tee /etc/apt/sources.list.d/watonomous.list
# Update package lists
sudo apt update
# Install any WATonomous package
sudo apt install <package-name>amd64(x86_64)arm64(aarch64)
# List all packages from the repository
apt-cache search --names-only '' | grep watonomous
# Show package information
apt show <package-name>
# List installed WATonomous packages
dpkg -l | grep watonomousFor Admins: If you're setting up this repository for the first time, see SETUP.md for complete instructions on:
- Configuring GitHub Pages
- Setting up the PAT token
- Initial deployment and testing
To release packages from your repository to this APT repository:
-
Obtain secrets: Obtain the
APT_REPO_TOKENandGPG_PRIVATE_KEYfrom a WATonomous admin -
Add Workflow: Copy the template workflow to
.github/workflows/release.ymlin your repository -
Release: Push a version tag:
git tag v1.0.0 git push origin v1.0.0
Your package will automatically be built and published to the APT repository!
- SETUP.md - Initial repository and GitHub Pages setup
- RELEASING.md - Guide for setting up automated releases from source repos
- release-templates/workflows/ - Ready-to-use workflow templates including ROS2 bloom releases
After adding packages, regenerate the repository metadata:
./scripts/update-repo.shThis script:
- Scans all packages in
pool/main/ - Generates
Packagesfiles for each architecture - Creates the
Releasefile - Compresses metadata files
To manually add a package (useful for testing):
./scripts/add-package.sh path/to/package.debThis will copy the package to pool/main/ and update the repository metadata.
View all packages currently in the repository:
./scripts/list-packages.sh-
Developer pushes a version tag to a source repository (e.g.,
v1.0.0) -
GitHub Actions triggers in the source repository:
- Checks out the source code
- Builds the Debian package
- Checks out this repository (using PAT from WATonomousAdmin)
- Copies the
.debfile topool/main/ - Runs
update-repo.shto regenerate metadata - Commits and pushes changes
-
GitHub Pages automatically deploys the updated repository
-
Users can install the new package version with
apt update && apt install
The repository uses standard Debian repository structure:
- pool/main/ - Contains all
.debfiles - dists/stable/main/binary-{arch}/Packages - Package indexes for each architecture
- dists/stable/Release - Main release file with checksums
- Check GitHub Actions logs in your source repository
- Verify
APT_REPO_TOKENis correctly configured in your repository secrets - Ensure
update-repo.shran successfully - Run
sudo apt updateon your system to refresh
- Verify the PAT has
reposcope permissions - Check that the
APT_REPO_TOKENsecret is properly configured - Ensure the token hasn't expired (contact WATonomous admin for a refreshed token)
# Check package integrity
dpkg -I pool/main/package.deb
# Test installation locally
sudo dpkg -i pool/main/package.deb
sudo apt-get install -f -yThis repository uses GPG signing to verify package authenticity. All Release files are signed with our repository key:
- Key ID:
611A7AA1F93ABE52418AF41E97A8FB33E7A13CE2 - Key Email:
[email protected] - Public Key: Available at
https://apt.watonomous.ca/public.key
Users must add our public key when setting up the repository (see installation instructions above).
- Restrict APT_REPO_TOKEN access: Only trusted maintainers should have access
- Review packages before publishing: Verify source code and build logs in GitHub Actions
- Monitor repository changes: Watch for unauthorized commits
- Backup the GPG private key: Store securely offline for disaster recovery