Skip to content

rust data loaders #2362

rust data loaders

rust data loaders #2362

Workflow file for this run

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: ""