rust data loaders #2362
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] | |
tags: ["**"] | |
pull_request: {} | |
jobs: | |
rust: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install common dependencies | |
uses: ./.github/actions/common-deps | |
- uses: arduino/setup-protoc@v3 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
version: "29.x" | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
# The last-specified toolchain is the default. | |
toolchain: 1.83.0,nightly,stable | |
- name: Ensure generated protobuf schemas are up to date | |
run: cargo run --bin foxglove_proto_gen && git diff --exit-code | |
- run: cargo fmt --all --check | |
- run: cargo build --verbose | |
# Validate that we can build each example individually. | |
- name: Build examples individually | |
run: | | |
set -euo pipefail | |
cargo metadata --no-deps --format-version 1 \ | |
| jq -r ".packages[].name" \ | |
| grep example \ | |
| while read package; do | |
echo "Building $package" | |
cargo build -p "$package" | |
done | |
# Validate that we can build without default features. | |
- run: cargo build -p foxglove --verbose --no-default-features | |
# Validate that we can build against the MSRV (minimum specified rust version). | |
- run: cargo +1.83.0 build -p foxglove --verbose | |
- run: cargo clippy --no-deps --all-targets --tests -- -D warnings | |
- run: cargo +nightly rustdoc -p foxglove --all-features -- -D warnings --cfg docsrs | |
- run: cargo test --all-features --verbose | |
timeout-minutes: 5 | |
- run: cargo test -p foxglove --no-default-features --verbose | |
timeout-minutes: 5 | |
release-rust: | |
if: startsWith(github.ref, 'refs/tags/sdk/v') | |
runs-on: ubuntu-latest | |
needs: rust | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v4 | |
- id: detect-version | |
name: Detect local Cargo version | |
run: | | |
version=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[] | select(.name=="'foxglove'").version') | |
echo "version=$version" >> $GITHUB_OUTPUT | |
- name: Publish foxglove_derive | |
run: cargo publish --package foxglove_derive | |
env: | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
- name: Wait for foxglove_derive to be published | |
run: until cargo info --registry=crates-io foxglove_derive@${{ steps.detect-version.outputs.version }}; do sleep 10; done | |
- name: Publish foxglove | |
run: cargo publish --package foxglove | |
env: | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
typescript: | |
runs-on: ubuntu-latest | |
permissions: | |
# https://docs.npmjs.com/generating-provenance-statements#publishing-packages-with-provenance-via-github-actions | |
id-token: write | |
steps: | |
- uses: actions/checkout@v4 | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
cache: yarn | |
registry-url: https://registry.npmjs.org | |
- name: Install Flatbuffer compiler | |
run: | | |
curl -LO https://github.com/google/flatbuffers/releases/download/v23.1.21/Linux.flatc.binary.clang++-12.zip | |
echo "359dbbf56153cc1b022170a228adfde4199f67dc Linux.flatc.binary.clang++-12.zip" | shasum -a 1 -c | |
unzip Linux.flatc.binary.clang++-12.zip | |
rm Linux.flatc.binary.clang++-12.zip | |
sudo mv flatc /usr/local/bin | |
- uses: arduino/setup-protoc@v3 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
version: "29.x" | |
- run: yarn install --immutable | |
- run: yarn lint:ci | |
# must run this first because it copies the jsonschema directory | |
- run: yarn workspace @foxglove/schemas build | |
# typecheck remaining files in the repo | |
- run: yarn build | |
- run: yarn test | |
# Install python dependencies required to prettify generated SDK files | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.9" | |
- run: pipx install poetry | |
- run: poetry check --strict | |
- run: poetry install | |
- name: Ensure generated files are up to date | |
run: | | |
yarn generate | |
git add --all | |
changes=$(git status --porcelain) | |
if [ -n "$changes" ]; then | |
echo "::error::The following generated files need to be updated. Run 'yarn generate' to update them." | |
echo "$changes" | |
echo "" | |
git diff --cached | |
exit 1 | |
else | |
echo "Generated schemas are up to date!" | |
fi | |
- name: Validate Flatbuffer definitions | |
run: | | |
output=$(flatc --require-explicit-ids --ts -o /dev/null ./schemas/flatbuffer/*.fbs) | |
if [ -n "$output" ]; then | |
echo "::error::Flatbuffer schema compilation had warnings or errors. Fix them to proceed:" | |
echo "$output" | |
exit 1 | |
fi | |
- name: Validate protobuf definitions | |
run: protoc --proto_path=schemas/proto schemas/proto/**/*.proto --descriptor_set_out=/dev/null | |
- run: yarn workspace @foxglove/schemas pack | |
- name: Publish @foxglove/schemas to NPM | |
if: startsWith(github.ref, 'refs/tags/typescript/schemas/v') | |
# `yarn npm publish` does not currently support --provenance: https://github.com/yarnpkg/berry/issues/5430 | |
run: npm publish typescript/schemas/package.tgz --provenance --access public | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
ros: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- docker_image: rostooling/setup-ros-docker:ubuntu-focal-ros-noetic-ros-base-latest | |
ros_distribution: noetic | |
ros_version: 1 | |
- docker_image: rostooling/setup-ros-docker:ubuntu-focal-ros-foxy-ros-base-latest | |
ros_distribution: foxy | |
ros_version: 2 | |
- docker_image: rostooling/setup-ros-docker:ubuntu-focal-ros-galactic-ros-base-latest | |
ros_distribution: galactic | |
ros_version: 2 | |
- docker_image: rostooling/setup-ros-docker:ubuntu-jammy-ros-humble-ros-base-latest | |
ros_distribution: humble | |
ros_version: 2 | |
- docker_image: rostooling/setup-ros-docker:ubuntu-jammy-ros-iron-ros-base-latest | |
ros_distribution: iron | |
ros_version: 2 | |
- docker_image: rostooling/setup-ros-docker:ubuntu-noble-ros-jazzy-ros-base-latest | |
ros_distribution: jazzy | |
ros_version: 2 | |
- docker_image: rostooling/setup-ros-docker:ubuntu-noble-ros-rolling-ros-base-latest | |
ros_distribution: rolling | |
ros_version: 2 | |
name: "ROS ${{ matrix.ros_distribution }}" | |
container: | |
image: ${{ matrix.docker_image }} | |
steps: | |
- name: setup directories | |
run: mkdir -p ros_ws/src | |
- name: checkout | |
uses: actions/checkout@v4 | |
with: | |
path: ros_ws/src | |
- name: build and test ros1 | |
if: matrix.ros_version == 1 | |
uses: ros-tooling/action-ros-ci@master | |
with: | |
package-name: foxglove_msgs | |
target-ros1-distro: ${{ matrix.ros_distribution }} | |
vcs-repo-file-url: "" | |
- name: Downgrade pydocstyle as a workaround for ament_lint error https://github.com/ament/ament_lint/pull/428 | |
if: matrix.ros_distribution == 'galactic' | |
run: | | |
sudo pip install pydocstyle==6.1.1 | |
- name: Downgrade pytest as a workaround for https://github.com/scientific-python/pytest-doctestplus/issues/240 | |
if: matrix.ros_distribution == 'humble' || matrix.ros_distribution == 'iron' | |
run: | | |
sudo pip install pytest==8.0.2 | |
- name: build and test ros2 | |
if: matrix.ros_version == 2 | |
uses: ros-tooling/action-ros-ci@master | |
with: | |
package-name: foxglove_msgs | |
target-ros2-distro: ${{ matrix.ros_distribution }} | |
vcs-repo-file-url: "" |