Skip to content

try gitlab workflows after migration #30

try gitlab workflows after migration

try gitlab workflows after migration #30

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:
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,iron,jazzy,kilted,rolling' }}"
else
# Always 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 -c '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]
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
smoke-test:
name: Smoke test ROS2 ${{ matrix.ros_distro }}
runs-on: ubuntu-latest
needs: [determine-distros, generate-debian]
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: Setup environment
run: |
apt-get update -qq
- name: Download Debian packages
uses: actions/download-artifact@v4
with:
name: debian-packages-${{ matrix.ros_distro }}
path: debian_packages/${{ matrix.ros_distro }}/
- name: Install and test packages
run: |
set -eo pipefail
echo "Smoke testing install on ROS2 ${{ matrix.ros_distro }}"
ls -la debian_packages/${{ matrix.ros_distro }}/
# Install the debian packages
apt-get install -y ./debian_packages/${{ matrix.ros_distro }}/ros-${{ matrix.ros_distro }}-greenwave-monitor-interfaces_*.deb ./debian_packages/${{ matrix.ros_distro }}/ros-${{ matrix.ros_distro }}-greenwave-monitor_*.deb ./debian_packages/${{ matrix.ros_distro }}/ros-${{ matrix.ros_distro }}-r2s-gw_*.deb
# Verify packages are installed
dpkg -s ros-${{ matrix.ros_distro }}-r2s-gw ros-${{ matrix.ros_distro }}-greenwave-monitor ros-${{ matrix.ros_distro }}-greenwave-monitor-interfaces
# Install Python dependencies
apt-get install -y python3-pip || true
if [[ "${{ matrix.ros_distro }}" == "jazzy" || \
"${{ matrix.ros_distro }}" == "kilted" || \
"${{ matrix.ros_distro }}" == "rolling" ]]; then
python3 -m pip install -I textual --break-system-packages
else
python3 -m pip install textual
fi
shell: bash
- name: Test r2s_gw execution
run: |
source /opt/ros/${{ matrix.ros_distro }}/setup.bash
timeout 10s bash -lc "script -qfec 'ros2 run r2s_gw r2s_gw' /dev/null <<< \$'q'" || true
shell: bash
- name: Test greenwave_monitor execution
run: |
source /opt/ros/${{ matrix.ros_distro }}/setup.bash
# Start node in background
ros2 run greenwave_monitor greenwave_monitor > /dev/null 2>&1 & echo $! > /tmp/gwm.pid
echo "Started greenwave_monitor with PID: $(cat /tmp/gwm.pid)"
# Wait for node startup
sleep 5
# Check if process is still running
if ps -p $(cat /tmp/gwm.pid) > /dev/null; then
echo "✓ Process is running"
else
echo "✗ Process died!"
exit 1
fi
# List nodes
echo "Running ros2 node list..."
ros2 node list | tee /tmp/nodes.txt
echo "Nodes found:"
cat /tmp/nodes.txt
# Check if our node is in the list
if grep -q greenwave_monitor /tmp/nodes.txt; then
echo "✓ Node found in list"
else
echo "✗ Node NOT found in list"
echo "This is unexpected - failing test"
kill -9 $(cat /tmp/gwm.pid) 2>/dev/null || true
exit 1
fi
# Cleanup
kill -INT "$(cat /tmp/gwm.pid)" || true
sleep 2
kill -9 $(cat /tmp/gwm.pid) 2>/dev/null || true
shell: bash