Skip to content

go: reader: make ordered iteration faster #3826

go: reader: make ordered iteration faster

go: reader: make ordered iteration faster #3826

Workflow file for this run

name: CI
on:
push:
branches: [main]
tags: ["releases/**", "go/mcap/*"]
pull_request:
branches: ["*"]
jobs:
spellcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
lfs: true
- 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@v3
with:
lfs: true
- 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@v3
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@v3
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@v3
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@v3
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@v3
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@v3
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@v3
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: cd rust && cargo build --example=conformance_reader
- 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@v3
with:
lfs: true
- 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@v3
with:
lfs: true
- 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@v3
with:
lfs: true
- 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@v3
with:
lfs: true
- 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@v3
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@v3
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/golangci-lint@v1.56.2
- 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@v3
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@v3
with:
lfs: true
- 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@v3
with:
lfs: true
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
default: true
components: "rustfmt, clippy"
- 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 build
- run: cargo test
- 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 }}