Skip to content

chore: remove hiroz-bridge and Ros2Dds key expression format #1094

chore: remove hiroz-bridge and Ros2Dds key expression format

chore: remove hiroz-bridge and Ros2Dds key expression format #1094

Workflow file for this run

name: CI
on:
push:
branches: [main]
paths-ignore:
- '**.md'
- 'docs/**'
- 'mkdocs.yml'
- '.github/workflows/docs.yml'
- '.github/workflows/mkdocs-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:
types: [opened, synchronize, reopened, ready_for_review]
branches: [main]
paths-ignore:
- '**.md'
- 'docs/**'
- 'mkdocs.yml'
- '.github/workflows/docs.yml'
- '.github/workflows/mkdocs-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:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Nix
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
extra-substituters = https://hiroz.cachix.org
extra-trusted-public-keys = hiroz.cachix.org-1:wKJuqEckTG0DL3Df7Ly9OVsg5S5TGBHtvlPGs+vlqrY=
- name: Setup Cachix
uses: cachix/cachix-action@v15
with:
name: hiroz
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
skipPush: ${{ github.event_name == 'pull_request' }}
- name: Check formatting
run: nix build .#checks.x86_64-linux.pre-commit-check -L
no-ros-test:
name: ROS-independent Test (${{ matrix.os }})
runs-on: ${{ matrix.os }}
permissions:
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 Nix (Linux)
if: runner.os == 'Linux'
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
extra-substituters = https://hiroz.cachix.org
extra-trusted-public-keys = hiroz.cachix.org-1:wKJuqEckTG0DL3Df7Ly9OVsg5S5TGBHtvlPGs+vlqrY=
- name: Setup Cachix (Linux)
if: runner.os == 'Linux'
uses: cachix/cachix-action@v15
with:
name: hiroz
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
skipPush: ${{ github.event_name == 'pull_request' }}
- 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-test
- 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
no-ros-shm:
name: SHM Tests (ubuntu-latest)
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Free Disk Space (Ubuntu)
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 Nix (Linux)
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
extra-substituters = https://hiroz.cachix.org
extra-trusted-public-keys = hiroz.cachix.org-1:wKJuqEckTG0DL3Df7Ly9OVsg5S5TGBHtvlPGs+vlqrY=
- name: Setup Cachix
uses: cachix/cachix-action@v15
with:
name: hiroz
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
skipPush: ${{ github.event_name == 'pull_request' }}
- name: Install Nushell (Linux via Nix)
run: |
nix profile install nixpkgs#nushell
chmod +x scripts/test-pure-rust.nu
- name: Setup nix environment (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
- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ runner.os }}-pureRust-shm
- name: SHM tests
run: |
sudo prlimit --memlock=unlimited --pid=$$
source /tmp/nix-dev-env.sh
nu scripts/test-pure-rust.nu test-shm
shell: bash
coverage:
name: Code Coverage (ubuntu-latest)
runs-on: ubuntu-latest
continue-on-error: false
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Free Disk Space (Ubuntu)
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 Nix
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
extra-substituters = https://hiroz.cachix.org
extra-trusted-public-keys = hiroz.cachix.org-1:wKJuqEckTG0DL3Df7Ly9OVsg5S5TGBHtvlPGs+vlqrY=
- name: Setup Cachix
uses: cachix/cachix-action@v15
with:
name: hiroz
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
skipPush: ${{ github.event_name == 'pull_request' }}
- name: Install Nushell
run: nix profile install nixpkgs#nushell
- name: Setup nix environment
run: |
nix print-dev-env '.#pureRust-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: ubuntu-latest-coverage
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@v2
with:
tool: cargo-llvm-cov
- name: Run coverage
run: |
source /tmp/nix-dev-env.sh
cargo llvm-cov \
-p hiroz -p hiroz-codegen -p hiroz-cdr -p hiroz-protocol -p hiroz-schema \
-p hiroz-tests \
-j4 \
--lcov --output-path lcov.info
shell: bash
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: lcov.info
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
no-ros-checks:
name: ROS-independent Checks (${{ matrix.os }})
runs-on: ${{ matrix.os }}
permissions:
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 Nix (Linux)
if: runner.os == 'Linux'
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
extra-substituters = https://hiroz.cachix.org
extra-trusted-public-keys = hiroz.cachix.org-1:wKJuqEckTG0DL3Df7Ly9OVsg5S5TGBHtvlPGs+vlqrY=
- name: Setup Cachix (Linux)
if: runner.os == 'Linux'
uses: cachix/cachix-action@v15
with:
name: hiroz
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
skipPush: ${{ github.event_name == 'pull_request' }}
- 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
# Common setup
- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ runner.os }}-pureRust-checks-v2
- name: Set environment variables (macOS)
if: runner.os == 'macOS'
run: |
echo "CI=true" >> $GITHUB_ENV
# Check steps
- name: Check hiroz-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 hiroz-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: Check 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: Clippy (hiroz-py)
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
source /tmp/nix-dev-env.sh
fi
nu scripts/test-pure-rust.nu clippy-hiroz-py
shell: bash
go-tests:
name: Go Tests (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
- name: Install Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ runner.os }}-go-ffi
- name: Install Nushell
uses: hustcer/setup-nu@v3
with:
version: '0.102'
- name: Go vet (static analysis)
run: nu scripts/test-go.nu --vet-only
- name: Go pure tests (codegen + testdata)
run: nu scripts/test-go.nu --codegen-only
- name: Go FFI tests (hiroz unit tests)
run: nu scripts/test-go.nu --ffi-only
python-tests:
name: Python Tests (hiroz-py) (${{ matrix.distro }})
runs-on: ubuntu-latest
permissions:
contents: read
strategy:
fail-fast: false
matrix:
distro: [humble, jazzy, kilted, lyrical]
# 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 Nix
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
extra-substituters = https://ros.cachix.org https://hiroz.cachix.org
extra-trusted-public-keys = ros.cachix.org-1:dSyZxI8geDCJrwgvCOHDoAfOm5sV1wCPjBkKL+38Rvo=
extra-trusted-public-keys = hiroz.cachix.org-1:wKJuqEckTG0DL3Df7Ly9OVsg5S5TGBHtvlPGs+vlqrY=
- name: Setup Cachix
uses: cachix/cachix-action@v15
with:
name: hiroz
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
# Push hiroz's own built Nix derivations on main-branch runs so
# subsequent runs (including PRs) can download them from Cachix
# instead of rebuilding. hiroz.cachix.org is our own cache;
# ros.cachix.org is read-only for upstream ROS packages.
skipPush: ${{ github.event_name == 'pull_request' }}
- 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: Cache generated Python types
uses: actions/cache@v4
with:
path: crates/hiroz-msgs/python/hiroz_msgs_py/types
key: >-
${{ runner.os }}-${{ matrix.distro }}-python-types-${{
hashFiles('Cargo.lock', 'crates/hiroz-msgs/python/**') }}
restore-keys: |
${{ runner.os }}-${{ matrix.distro }}-python-types-
- name: Setup venv
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} setup-venv
- 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: MyPy type checking
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-python.nu --distro ${{ matrix.distro }} typecheck-mypy
- name: Run pytest
run: |
sudo prlimit --memlock=unlimited --pid=$$
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:
contents: read
strategy:
fail-fast: false
matrix:
distro: [humble, jazzy, kilted, lyrical]
# 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 Nix
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
extra-substituters = https://ros.cachix.org https://hiroz.cachix.org
extra-trusted-public-keys = ros.cachix.org-1:dSyZxI8geDCJrwgvCOHDoAfOm5sV1wCPjBkKL+38Rvo=
extra-trusted-public-keys = hiroz.cachix.org-1:wKJuqEckTG0DL3Df7Ly9OVsg5S5TGBHtvlPGs+vlqrY=
- name: Setup Cachix
uses: cachix/cachix-action@v15
with:
name: hiroz
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
skipPush: ${{ github.event_name == 'pull_request' }}
- 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-v2
- name: Run ROS tests
run: |
source /tmp/nix-dev-env.sh
nu scripts/test-ros.nu --distro ${{ matrix.distro }}
bridge-interop:
name: Bridge Interop (humble ↔ jazzy)
runs-on: ubuntu-latest
permissions:
contents: read
# Only run on push or non-draft PRs to save CI time
if: |
github.event_name == 'push' ||
github.event.pull_request.draft == false
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Nix
uses: cachix/install-nix-action@v31
with:
extra_nix_config: |
extra-substituters = https://ros.cachix.org https://hiroz.cachix.org
extra-trusted-public-keys = ros.cachix.org-1:dSyZxI8geDCJrwgvCOHDoAfOm5sV1wCPjBkKL+38Rvo=
extra-trusted-public-keys = hiroz.cachix.org-1:wKJuqEckTG0DL3Df7Ly9OVsg5S5TGBHtvlPGs+vlqrY=
- name: Setup Cachix
uses: cachix/cachix-action@v15
with:
name: hiroz
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
skipPush: ${{ github.event_name == 'pull_request' }}
- name: Setup Rust cache
uses: Swatinem/rust-cache@v2
with:
shared-key: jazzy-bridge-interop
- name: Setup bridge interop nix environment
run: |
nix print-dev-env '.#ros-bridge-interop' \
--accept-flake-config > /tmp/nix-dev-env-jazzy.sh
echo "export CI=true" >> /tmp/nix-dev-env-jazzy.sh
- name: Build hiroz-bridge binary
run: |
source /tmp/nix-dev-env-jazzy.sh
cargo build -p hiroz-bridge --features jazzy -j4
- name: Run bridge unit tests
run: |
source /tmp/nix-dev-env-jazzy.sh
cargo test -p hiroz-bridge --features jazzy -j4
- name: Run bridge interop tests
run: |
source /tmp/nix-dev-env-jazzy.sh
cargo test -p hiroz-tests --test humble_jazzy_bridge \
--features jazzy,humble-jazzy-bridge-tests -j4 \
-- --nocapture 2>&1