feat(lifecycle): implement ROS 2 managed node lifecycle #421
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |