Skip to content

Generate Debian Packages #15

Generate Debian Packages

Generate Debian Packages #15

Workflow file for this run

name: Generate Debian Packages
on:
pull_request:
branches: [ main ]
types: [ opened, synchronize, reopened, ready_for_review ]
workflow_dispatch: # Manual trigger
inputs:
ros_distros:
description: 'ROS distributions to build (comma-separated: humble,iron,jazzy,kilted,rolling)'
required: false
default: 'humble,jazzy'
schedule:
- cron: '0 2 * * *' # Nightly at 2 AM UTC
env:
ROS_LOCALHOST_ONLY: 1
ROS_AUTOMATIC_DISCOVERY_RANGE: LOCALHOST
jobs:
# Only run if tests pass
check-tests:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Wait for tests
uses: lewagon/[email protected]
with:
ref: ${{ github.event.pull_request.head.sha }}
check-name: 'Test ROS2 humble'
repo-token: ${{ secrets.GITHUB_TOKEN }}
wait-interval: 30
determine-distros:
runs-on: ubuntu-latest
outputs:
distros: ${{ steps.set-distros.outputs.distros }}
steps:
- name: Determine ROS distributions to build
id: set-distros
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
# Manual trigger - use input or default
DISTROS="${{ github.event.inputs.ros_distros || 'humble,jazzy' }}"
elif [[ "${{ github.event_name }}" == "pull_request" ]]; then
# PR - build key distributions
DISTROS="humble,jazzy"
else
# Scheduled - build all distributions
DISTROS="humble,iron,jazzy,kilted,rolling"
fi
echo "Building for distributions: $DISTROS"
# Convert to JSON array for matrix
JSON_ARRAY=$(echo $DISTROS | jq -R 'split(",") | map(select(length > 0))')
echo "distros=$JSON_ARRAY" >> $GITHUB_OUTPUT
generate-debian:
name: Generate Debian packages for ROS2 ${{ matrix.ros_distro }}
runs-on: ubuntu-latest
needs: [determine-distros]
if: always() && (needs.check-tests.result == 'success' || needs.check-tests.result == 'skipped')
container:
image: ros:${{ matrix.ros_distro }}-ros-base-${{ matrix.ubuntu_distro }}
credentials:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
strategy:
fail-fast: false
matrix:
ros_distro: ${{ fromJson(needs.determine-distros.outputs.distros) }}
include:
- ros_distro: humble
ubuntu_distro: jammy
- ros_distro: iron
ubuntu_distro: jammy
- ros_distro: jazzy
ubuntu_distro: noble
- ros_distro: kilted
ubuntu_distro: noble
- ros_distro: rolling
ubuntu_distro: noble
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Build Debian packages
run: |
chmod +x scripts/build_debian_packages.sh
./scripts/build_debian_packages.sh ${{ matrix.ros_distro }} ${{ matrix.ubuntu_distro }}
shell: bash
- name: Upload Debian packages
uses: actions/upload-artifact@v4
with:
name: debian-packages-${{ matrix.ros_distro }}
path: debian_packages/${{ matrix.ros_distro }}/
retention-days: 30