rust: make interfaces Send (#1284) #4201
This file contains 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: ["releases/**", "go/mcap/*"] | |
pull_request: | |
branches: ["*"] | |
jobs: | |
spellcheck: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: false | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- run: yarn install --immutable | |
- run: echo '::add-matcher::.github/cspell-problem-matcher.json' | |
- run: yarn spellcheck --no-progress | |
conformance-lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: false | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- run: yarn install --immutable | |
- run: yarn workspace @foxglove/mcap-conformance lint:ci | |
- run: yarn workspace @foxglove/mcap-conformance build | |
conformance-cpp: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- uses: actions/cache@v4 | |
with: | |
path: ~/.conan/data | |
key: ${{ runner.os }}-${{ hashFiles('cpp/**/conanfile.py') }} | |
- run: cd cpp && make ci | |
- run: yarn install --immutable | |
- run: yarn test:conformance:generate-inputs --verify | |
- run: yarn test:conformance --runner cpp- | |
conformance-go: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: go/go.work | |
- run: cd go && make build-conformance-binaries | |
- run: yarn install --immutable | |
- run: yarn test:conformance:generate-inputs --verify | |
- run: yarn test:conformance --runner go- | |
conformance-python: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.7 | |
- run: cd python && pip install -e mcap | |
- run: yarn install --immutable | |
- run: yarn test:conformance:generate-inputs --verify | |
- run: yarn test:conformance --runner py- | |
conformance-typescript: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- run: yarn install --immutable | |
- run: yarn test:conformance:generate-inputs --verify | |
- run: yarn test:conformance --runner ts- | |
conformance-kaitai-struct: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- run: yarn install --immutable | |
- run: yarn test:conformance:generate-inputs --verify | |
- run: yarn test:conformance --runner ksy- | |
conformance-swift: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- uses: swift-actions/setup-swift@v2 | |
with: | |
swift-version: "5.7" | |
- run: swift build | |
- run: yarn install --immutable | |
- run: yarn test:conformance:generate-inputs --verify | |
- run: yarn test:conformance --runner swift- | |
conformance-rust: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
default: true | |
- run: cargo build --example=conformance_reader --example=conformance_reader_async --features=tokio | |
working-directory: rust | |
- run: yarn install --immutable | |
- run: yarn test:conformance:generate-inputs --verify | |
- run: yarn test:conformance --runner rust- | |
cpp: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: cpp | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: false | |
- uses: actions/cache@v4 | |
with: | |
path: ~/.conan/data | |
key: ${{ runner.os }}-${{ hashFiles('cpp/**/conanfile.py') }} | |
- run: make ci-format-check | |
- run: make ci | |
- run: make test-host | |
- run: make test-examples-host | |
- run: make run-examples-host | |
cpp-windows: | |
runs-on: windows-latest | |
defaults: | |
run: | |
working-directory: cpp | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: false | |
- uses: actions/cache@v4 | |
with: | |
path: ~/.conan/data | |
key: ${{ runner.os }}-${{ hashFiles('cpp/**/conanfile.py') }} | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.7 | |
- run: pip install conan~=1.0 | |
- run: bash build.sh --build-tests-only | |
- run: ./test/build/Debug/bin/unit-tests | |
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 | |
with: | |
lfs: false | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
registry-url: https://registry.npmjs.org | |
- run: yarn install --immutable | |
- run: yarn dedupe --check | |
- run: yarn prettier:check | |
- run: yarn workspace @mcap/core lint:ci | |
- run: yarn workspace @mcap/core build | |
- run: yarn workspace @mcap/support lint:ci | |
- run: yarn workspace @mcap/support build | |
- run: yarn workspace @mcap/nodejs lint:ci | |
- run: yarn workspace @mcap/nodejs build | |
- run: yarn workspace @mcap/browser lint:ci | |
- run: yarn workspace @mcap/browser build | |
- run: yarn typescript:test | |
- run: yarn workspace @mcap/core pack | |
- name: Publish @mcap/core to NPM | |
if: ${{ startsWith(github.ref, 'refs/tags/releases/typescript/core/v') }} | |
# `yarn npm publish` does not currently support --provenance: https://github.com/yarnpkg/berry/issues/5430 | |
run: npm publish typescript/core/package.tgz --provenance --access public | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
- run: yarn workspace @mcap/support pack | |
- name: Publish @mcap/support to NPM | |
if: ${{ startsWith(github.ref, 'refs/tags/releases/typescript/support/v') }} | |
# `yarn npm publish` does not currently support --provenance: https://github.com/yarnpkg/berry/issues/5430 | |
run: npm publish typescript/support/package.tgz --provenance --access public | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
- run: yarn workspace @mcap/nodejs pack | |
- name: Publish @mcap/nodejs to NPM | |
if: ${{ startsWith(github.ref, 'refs/tags/releases/typescript/nodejs/v') }} | |
# `yarn npm publish` does not currently support --provenance: https://github.com/yarnpkg/berry/issues/5430 | |
run: npm publish typescript/nodejs/package.tgz --provenance --access public | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
- run: yarn workspace @mcap/browser pack | |
- name: Publish @mcap/browser to NPM | |
if: ${{ startsWith(github.ref, 'refs/tags/releases/typescript/browser/v') }} | |
# `yarn npm publish` does not currently support --provenance: https://github.com/yarnpkg/berry/issues/5430 | |
run: npm publish typescript/browser/package.tgz --provenance --access public | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
typescript-examples: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: false | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
cache: yarn | |
- run: yarn install --immutable | |
- run: yarn workspace @foxglove/mcap-benchmarks lint:ci | |
- run: yarn workspace @foxglove/mcap-benchmarks typecheck | |
- run: yarn workspace @foxglove/mcap-example-validate lint:ci | |
- run: yarn workspace @foxglove/mcap-example-validate typecheck | |
- run: yarn workspace @foxglove/mcap-example-bag2mcap lint:ci | |
- run: yarn workspace @foxglove/mcap-example-bag2mcap typecheck | |
- run: yarn workspace @foxglove/mcap-example-basicwriter lint:ci | |
- run: yarn workspace @foxglove/mcap-example-basicwriter typecheck | |
- run: yarn workspace @foxglove/mcap-example-flatbufferswriter lint:ci | |
- run: yarn workspace @foxglove/mcap-example-flatbufferswriter typecheck | |
- run: yarn workspace @foxglove/mcap-example-text-annotation-demo lint:ci | |
- run: yarn workspace @foxglove/mcap-example-text-annotation-demo typecheck | |
python: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: python | |
permissions: | |
id-token: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.8 | |
- run: pip install pipenv==2023.2.4 | |
- run: make lint | |
- run: make test | |
- run: make examples | |
- run: make build | |
- name: Publish mcap to TestPyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }} | |
with: | |
packages_dir: python/mcap/dist | |
repository_url: https://test.pypi.org/legacy/ | |
skip_existing: true | |
- name: Publish mcap-protobuf-support to TestPyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }} | |
with: | |
repository_url: https://test.pypi.org/legacy/ | |
skip_existing: true | |
packages_dir: python/mcap-protobuf-support/dist | |
- name: Publish mcap-ros1-support to TestPyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }} | |
with: | |
repository_url: https://test.pypi.org/legacy/ | |
skip_existing: true | |
packages_dir: python/mcap-ros1-support/dist | |
- name: Publish mcap-ros2-support to TestPyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }} | |
with: | |
repository_url: https://test.pypi.org/legacy/ | |
skip_existing: true | |
packages_dir: python/mcap-ros2-support/dist | |
- name: Publish mcap to PyPI | |
if: | | |
!github.event.pull_request.head.repo.fork && | |
startsWith(github.ref, 'refs/tags/releases/python/mcap/v') | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages_dir: python/mcap/dist | |
- name: Publish mcap-protobuf-support to PyPI | |
if: | | |
!github.event.pull_request.head.repo.fork && | |
startsWith(github.ref, 'refs/tags/releases/python/mcap-protobuf-support/v') | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages_dir: python/mcap-protobuf-support/dist | |
- name: Publish mcap-ros1-support to PyPI | |
if: | | |
!github.event.pull_request.head.repo.fork && | |
startsWith(github.ref, 'refs/tags/releases/python/mcap-ros1-support/v') | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages_dir: python/mcap-ros1-support/dist | |
- name: Publish mcap-ros2-support to PyPI | |
if: | | |
!github.event.pull_request.head.repo.fork && | |
startsWith(github.ref, 'refs/tags/releases/python/mcap-ros2-support/v') | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
packages_dir: python/mcap-ros2-support/dist | |
go: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: go | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: go/go.work | |
- name: install golangci-lint | |
run: go install github.com/golangci/golangci-lint/cmd/[email protected] | |
- run: make lint | |
- run: make test | |
- name: Check library version | |
if: | | |
!github.event.pull_request.head.repo.fork && | |
startsWith(github.ref, 'refs/tags/go/mcap/v') | |
run: make -C cli/mcap build && ./check_tag.sh cli/mcap/bin/mcap | |
go-release-cli: | |
permissions: | |
contents: write | |
needs: | |
- go | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/releases/mcap-cli/v') | |
defaults: | |
run: | |
working-directory: go/cli/mcap | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: linux | |
image: ubuntu-latest | |
arch: amd64 | |
env: {} | |
- os: linux | |
image: ubuntu-latest | |
arch: arm64 | |
setup: sudo apt-get update && sudo apt-get install -qq gcc-aarch64-linux-gnu | |
env: | |
CC: aarch64-linux-gnu-gcc | |
CXX: aarch64-linux-gnu-g++ | |
- os: macos | |
image: macos-latest | |
arch: amd64 | |
env: {} | |
- os: macos | |
image: macos-latest | |
arch: arm64 | |
env: {} | |
- os: windows | |
image: windows-latest | |
arch: amd64 | |
env: {} | |
name: Build (${{ matrix.os }}/${{ matrix.arch }}) | |
runs-on: ${{ matrix.image }} | |
env: ${{ matrix.env }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: "0" | |
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* | |
- uses: actions/setup-go@v5 | |
with: | |
go-version-file: go/go.work | |
- name: Setup environment | |
run: ${{ matrix.setup }} | |
- name: Build binary | |
run: make build | |
env: | |
GOARCH: ${{ matrix.arch }} | |
OUTPUT: mcap-${{ matrix.os }}-${{ matrix.arch }} | |
- name: Make release notes | |
run: | | |
git log --oneline --no-merges --first-parent --grep CLI --decorate-refs=refs $(git describe --tags $(git rev-list --tags=releases/mcap-cli --max-count=1))..HEAD > ${{ github.workspace }}-CHANGELOG.txt | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: ./go/cli/mcap/bin/* | |
body_path: ${{ github.workspace }}-CHANGELOG.txt | |
draft: false | |
swift: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: false | |
- uses: swift-actions/setup-swift@v2 | |
with: | |
swift-version: "5.7" | |
- run: docker run -t --rm -v $(pwd):/work -w /work ghcr.io/realm/swiftlint:0.49.1 | |
- run: docker run -t --rm -v $(pwd):/work ghcr.io/nicklockwood/swiftformat:0.49.18 --lint /work | |
- run: swift build | |
- run: swift test | |
rust: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: rust | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
lfs: true | |
- uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
default: true | |
components: "rustfmt, clippy" | |
- run: rustup target add wasm32-unknown-unknown | |
- run: cargo fmt --all -- --check | |
- run: cargo clippy -- --no-deps | |
- run: cargo clippy --no-default-features -- --no-deps | |
- run: cargo clippy --no-default-features --features lz4 -- --no-deps | |
- run: cargo clippy --no-default-features --features zstd -- --no-deps | |
- run: cargo clippy --no-default-features --features tokio -- --no-deps | |
- run: cargo clippy --no-default-features --features tokio,lz4 -- --no-deps | |
- run: cargo clippy --no-default-features --features tokio,zstd -- --no-deps | |
- run: cargo build --all-features | |
- run: cargo test --all-features | |
- run: cargo build --all-features --target wasm32-unknown-unknown | |
- run: cargo check --all-features --target wasm32-unknown-unknown | |
- run: cargo publish --dry-run | |
- name: "publish to crates.io" | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/releases/rust/v') | |
run: cargo publish --token ${{ secrets.RUST_CRATES_IO_TOKEN }} |