Skip to content

feat(lifecycle): implement ROS 2 managed node lifecycle #421

feat(lifecycle): implement ROS 2 managed node lifecycle

feat(lifecycle): implement ROS 2 managed node lifecycle #421

Workflow file for this run

name: CI
on:
push:
branches: [main]
paths-ignore:
- '**.md'
- 'book/**'
- '.github/workflows/docs.yml'
- '.github/workflows/mdbook-preview.yml'
- '.github/workflows/test.yml'
- '.github/workflows/rmw-zenoh-rs.yml'
- '.github/workflows/semantic-pr.yml'
- '.github/workflows/pr-draft-check.yml'
pull_request:
branches: [main]
paths-ignore:
- '**.md'
- 'book/**'
- '.github/workflows/docs.yml'
- '.github/workflows/mdbook-preview.yml'
- '.github/workflows/test.yml'
- '.github/workflows/rmw-zenoh-rs.yml'
- '.github/workflows/semantic-pr.yml'
- '.github/workflows/pr-draft-check.yml'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
formatting:
name: Check Formatting
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Determinate Nix
uses: DeterminateSystems/determinate-nix-action@v3
- name: FlakeHub cache
uses: DeterminateSystems/flakehub-cache-action@main
- name: Check formatting
run: nix build .#checks.x86_64-linux.pre-commit-check -L
no-ros:
name: ROS-independent Test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
permissions:
id-token: write
contents: read
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Linux-specific setup
- name: Free Disk Space (Ubuntu)
if: runner.os == 'Linux'
uses: jlumbroso/free-disk-space@main
with:
large-packages: true
tool-cache: false
android: false
dotnet: false
haskell: false
docker-images: false
swap-storage: false
- name: Install Determinate Nix (Linux)
if: runner.os == 'Linux'
uses: DeterminateSystems/determinate-nix-action@v3
- name: FlakeHub cache (Linux)
if: runner.os == 'Linux'
uses: DeterminateSystems/flakehub-cache-action@main
- name: Install Nushell (Linux via Nix)
if: runner.os == 'Linux'
run: |
nix profile install nixpkgs#nushell
chmod +x scripts/test-pure-rust.nu
- name: Setup nix environment (Linux)
if: runner.os == 'Linux'
run: |
nix print-dev-env '.#pureRust-ci' --accept-flake-config > /tmp/nix-dev-env.sh
echo "export CI=true" >> /tmp/nix-dev-env.sh
# macOS-specific setup
- name: Install Rust toolchain (macOS)
if: runner.os == 'macOS'
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
components: clippy, rustfmt
- name: Install dependencies (macOS)
if: runner.os == 'macOS'
run: |
brew install nushell protobuf
chmod +x scripts/test-pure-rust.nu
- name: Install cargo-nextest (macOS)
if: runner.os == 'macOS'
uses: taiki-e/install-action@v2
with:
tool: cargo-nextest
# Common setup
- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ runner.os }}-pureRust
- name: Set environment variables (macOS)
if: runner.os == 'macOS'
run: |
echo "CI=true" >> $GITHUB_ENV
# Test steps
- name: Clippy (default workspace)
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
source /tmp/nix-dev-env.sh
fi
nu scripts/test-pure-rust.nu clippy-workspace
shell: bash
- name: Run tests
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
source /tmp/nix-dev-env.sh
fi
nu scripts/test-pure-rust.nu run-tests
shell: bash
- name: Check ros-z-msgs feature flags
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
source /tmp/nix-dev-env.sh
fi
nu scripts/test-pure-rust.nu check-bundled-msgs
shell: bash
- name: Check ros-z-console
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
source /tmp/nix-dev-env.sh
fi
nu scripts/test-pure-rust.nu check-console
shell: bash
- name: Build all examples
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
source /tmp/nix-dev-env.sh
fi
nu scripts/test-pure-rust.nu check-examples
shell: bash
- name: Check distro feature flags
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
source /tmp/nix-dev-env.sh
fi
nu scripts/test-pure-rust.nu check-distro-features
shell: bash
- name: SHM tests
if: runner.os == 'Linux'
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-pure-rust.nu test-shm
shell: bash
python-tests:
name: Python Tests (ros-z-py) (${{ matrix.distro }})
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
strategy:
fail-fast: false
matrix:
distro: [humble, jazzy, kilted]
# Skip for draft PRs to save CI time during development
if: |
github.event_name == 'push' ||
github.event.pull_request.draft == false
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Determinate Nix
uses: DeterminateSystems/determinate-nix-action@v3
with:
extra-conf: |
extra-substituters = https://ros.cachix.org
extra-trusted-public-keys = ros.cachix.org-1:dSyZxI8geDCJrwgvCOHDoAfOm5sV1wCPjBkKL+38Rvo=
- name: Setup Cachix
uses: cachix/cachix-action@v15
with:
name: ros
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
# Push ros-z's own built Nix derivations on main-branch runs so
# subsequent runs (including PRs) can download them from Cachix
# instead of rebuilding. ROS packages are already in ros.cachix.org
# (maintained by nix-ros-overlay for all distros including kilted).
skipPush: ${{ github.event_name == 'pull_request' }}
- name: FlakeHub cache
uses: DeterminateSystems/flakehub-cache-action@main
- name: Install Nushell
run: |
nix profile install nixpkgs#nushell
chmod +x scripts/test-python.nu
- name: Setup nix environment
run: |
nix print-dev-env '.#ros-${{ matrix.distro }}-ci' --accept-flake-config > /tmp/nix-dev-env.sh
echo "export CI=true" >> /tmp/nix-dev-env.sh
- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ matrix.distro }}-python
- name: Setup venv
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} setup-venv
- name: Clippy (ros-z-py)
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} clippy
- name: Ruff linting
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} lint-ruff
- name: Ruff format check
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} format-ruff
- name: Build package
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} build-package
- name: MyPy type checking
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} typecheck-mypy
- name: Run pytest
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} run-pytest
- name: Run examples
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} run-examples
- name: Run Python-Rust interop tests
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} run-python-interop
- name: Cleanup
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} cleanup-python
ros-tests:
name: ROS Tests (clippy-rmw, interop) (${{ matrix.distro }})
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
strategy:
fail-fast: false
matrix:
distro: [humble, jazzy, kilted]
# Skip for draft PRs to save CI time during development
if: |
github.event_name == 'push' ||
github.event.pull_request.draft == false
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Determinate Nix
uses: DeterminateSystems/determinate-nix-action@v3
with:
extra-conf: |
extra-substituters = https://ros.cachix.org
extra-trusted-public-keys = ros.cachix.org-1:dSyZxI8geDCJrwgvCOHDoAfOm5sV1wCPjBkKL+38Rvo=
- name: Setup Cachix
uses: cachix/cachix-action@v15
with:
name: ros
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
skipPush: ${{ github.event_name == 'pull_request' }}
- name: FlakeHub cache
uses: DeterminateSystems/flakehub-cache-action@main
- name: Install Nushell
run: |
nix profile install nixpkgs#nushell
chmod +x scripts/test-ros.nu
- name: Setup nix environment
run: |
nix print-dev-env '.#ros-${{ matrix.distro }}-ci' \
--accept-flake-config > /tmp/nix-dev-env.sh
echo "export CI=true" >> /tmp/nix-dev-env.sh
- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ matrix.distro }}-ros
- name: Run ROS tests
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-ros.nu --distro ${{ matrix.distro }}