Skip to content

feat(remote): implement wire compression tables #2498

feat(remote): implement wire compression tables

feat(remote): implement wire compression tables #2498

Workflow file for this run

name: ci
on:
push:
branches:
- main
pull_request:
branches:
- main
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
inputs:
runner:
description: Runner to use for this manual CI run
required: true
default: ubuntu-latest
type: choice
options:
- ubuntu-latest
- self-hosted
env:
CARGO_TERM_COLOR: always
CARGO_BUILD_JOBS: "4"
RUSTFLAGS: -D warnings
CARGO_NET_OFFLINE: false
DYLINT_VERSION: "6.0.0"
RUST_TOOLCHAIN: nightly-2025-12-01
# NOTE: On self-hosted runners, CARGO_HOME, RUSTUP_HOME, and TMPDIR are set
# per-job via the `./.github/actions/setup-isolated-rust` composite action.
# They are NOT pinned at the workflow level because:
# 1. `${{ github.workspace }}/.cargo` is a *fixed* path inside each
# runner's `_work/<repo>` directory. On self-hosted runners that
# reuse the same workspace between successive jobs, stale state
# from a crashed previous job (broken `.cargo/bin/cargo` symlink,
# half-written registry index, etc.) leaks into the next job.
# 2. The cargo/rustup binaries themselves are installed by
# `dtolnay/rust-toolchain` under `${HOME}/.cargo/bin`, not under
# the workflow-pinned `CARGO_HOME`. When PATH lookup happens to
# land on the workspace path first, the shell tries
# `<workspace>/.cargo/bin/cargo` which may not exist, and the job
# fails with ENOENT.
# 3. Multiple self-hosted runners share the same home directory
# (`~/.cargo/bin/` and `~/.rustup/`), so concurrent jobs calling
# `rustup default <toolchain>` can truncate `~/.rustup/settings.toml`
# (missing field `version` error) and overwrite `~/.cargo/bin/rustup`
# while another job is executing it (ETXTBSY / text file busy).
# The composite action uses `mktemp -d` rooted at `${RUNNER_TEMP}` for
# true uniqueness (auto-cleaned by the runner), COPIES the rustup binary
# (not symlink, so ETXTBSY is avoided), and copies `~/.rustup/` so that
# toolchain state is isolated from other concurrent jobs. It MUST run
# before `dtolnay/rust-toolchain@master` so that action writes to the
# isolated paths.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
# Format check (fastest, prerequisite for other jobs)
format:
name: Format Check
runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.runner == 'self-hosted' && 'self-hosted' || 'ubuntu-latest' }}
steps:
- name: Checkout source
uses: actions/checkout@v6
- name: Setup isolated CARGO_HOME / RUSTUP_HOME / TMPDIR
if: ${{ runner.environment == 'self-hosted' }}
uses: ./.github/actions/setup-isolated-rust
- name: Setup Rust toolchain (nightly)
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
components: rustfmt
- name: Setup Cargo cache
uses: Swatinem/rust-cache@v2
- name: Check formatting
run: ./scripts/ci-check.sh lint
# Lint checks
lint:
name: Lint Check
runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.runner == 'self-hosted' && 'self-hosted' || 'ubuntu-latest' }}
needs: format
strategy:
matrix:
check:
- name: Clippy
script: clippy
- name: Dylint
script: dylint
steps:
- name: Checkout source
uses: actions/checkout@v6
- name: Setup isolated CARGO_HOME / RUSTUP_HOME / TMPDIR
if: ${{ runner.environment == 'self-hosted' }}
uses: ./.github/actions/setup-isolated-rust
- name: Setup Rust toolchain (nightly)
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
components: clippy
- name: Setup Cargo cache
uses: Swatinem/rust-cache@v2
with:
shared-key: lint
- name: Run ${{ matrix.check.name }}
run: ./scripts/ci-check.sh ${{ matrix.check.script }}
# ビルドと単体テスト
#
# 実行頻度の方針:
# - pull_request / main push: まず単体テスト中心の correctness gate を必ず実行する。
# - integration / E2E は下の dedicated job で別途実行し、失敗箇所を切り分ける。
# - performance / benchmark は CI の正しさゲートに含めない。
test:
name: Test (${{ matrix.target.name }})
runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.runner == 'self-hosted' && 'self-hosted' || 'ubuntu-latest' }}
needs: format
env:
TEST_TIME_FACTOR: "2.0"
strategy:
fail-fast: false
matrix:
target:
- name: no_std
script: no-std
- name: std
script: std
- name: unit
script: unit-test
steps:
- name: Checkout source
uses: actions/checkout@v6
- name: Setup isolated CARGO_HOME / RUSTUP_HOME / TMPDIR
if: ${{ runner.environment == 'self-hosted' }}
uses: ./.github/actions/setup-isolated-rust
- name: Setup Rust toolchain (nightly)
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
- name: Setup Cargo cache
uses: Swatinem/rust-cache@v2
with:
shared-key: test-${{ matrix.target.name }}
- name: Run ${{ matrix.target.name }} tests
run: ./scripts/ci-check.sh ${{ matrix.target.script }}
# 結合テスト / E2E
#
# `scripts/ci-check.sh integration-test` は workspace の `--tests --examples`
# と cross-crate E2E 専用 crate を明示実行する。actor の classic/typed user flow
# や std adaptor boot、`tests/e2e` の runtime boot など、テストピラミッド上の
# Integration / E2E 層はここで PR ごとに検証する。
integration-e2e:
name: Integration / E2E
runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.runner == 'self-hosted' && 'self-hosted' || 'ubuntu-latest' }}
needs: test
env:
TEST_TIME_FACTOR: "2.0"
CI_CHECK_GUARD_TIMEOUT_INTEGRATION_SEC: "5400"
steps:
- name: Checkout source
uses: actions/checkout@v6
- name: Setup isolated CARGO_HOME / RUSTUP_HOME / TMPDIR
if: ${{ runner.environment == 'self-hosted' }}
uses: ./.github/actions/setup-isolated-rust
- name: Setup Rust toolchain (nightly)
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
- name: Setup Cargo cache
uses: Swatinem/rust-cache@v2
with:
shared-key: integration-e2e
- name: Run integration and E2E tests
run: ./scripts/ci-check.sh integration-test
# カバレッジレポート
#
# `scripts/coverage.sh` は各 package の Unit / Contract /
# Integration / E2E をまとめて計測し、HTML レポートを生成する。
# PR / main push / schedule で成果物として確認できるよう、
# 通常テストとは別ジョブで実行して artifact に保存する。
coverage:
name: Coverage Report
runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.runner == 'self-hosted' && 'self-hosted' || 'ubuntu-latest' }}
needs: integration-e2e
permissions:
contents: read
id-token: write
env:
TEST_TIME_FACTOR: "2.0"
CI_CHECK_GUARD_TIMEOUT_INTEGRATION_SEC: "5400"
steps:
- name: Checkout source
uses: actions/checkout@v6
- name: Setup isolated CARGO_HOME / RUSTUP_HOME / TMPDIR
if: ${{ runner.environment == 'self-hosted' }}
uses: ./.github/actions/setup-isolated-rust
- name: Setup Rust toolchain (nightly)
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
- name: Setup Cargo cache
uses: Swatinem/rust-cache@v2
with:
shared-key: coverage
- name: Generate fraktor coverage reports
run: ./scripts/coverage.sh --tool llvm-cov --format html-lcov --output target/coverage
- name: Upload fraktor coverage HTML report
if: always()
uses: actions/upload-artifact@v7
with:
name: fraktor-coverage-html
path: target/coverage/html
if-no-files-found: warn
retention-days: 14
- name: Upload coverage reports to Codecov
# third-party action の mutable tag リスクを避けるため、v6 の commit SHA に固定する。
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2
with:
use_oidc: true
files: target/coverage/lcov.info
disable_search: true
flags: fraktor
name: fraktor-coverage
fail_ci_if_error: true
# Documentation build
docs:
name: Documentation
runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.runner == 'self-hosted' && 'self-hosted' || 'ubuntu-latest' }}
needs: format
steps:
- name: Checkout source
uses: actions/checkout@v6
- name: Setup isolated CARGO_HOME / RUSTUP_HOME / TMPDIR
if: ${{ runner.environment == 'self-hosted' }}
uses: ./.github/actions/setup-isolated-rust
- name: Setup Rust toolchain (nightly)
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
- name: Setup Cargo cache
uses: Swatinem/rust-cache@v2
with:
shared-key: docs
- name: Build documentation
run: ./scripts/ci-check.sh doc
# Examples build
examples:
name: Examples
runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.runner == 'self-hosted' && 'self-hosted' || 'ubuntu-latest' }}
needs: format
steps:
- name: Checkout source
uses: actions/checkout@v6
- name: Setup isolated CARGO_HOME / RUSTUP_HOME / TMPDIR
if: ${{ runner.environment == 'self-hosted' }}
uses: ./.github/actions/setup-isolated-rust
- name: Setup Rust toolchain (nightly)
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
- name: Setup Cargo cache
uses: Swatinem/rust-cache@v2
with:
shared-key: examples
- name: Build examples
run: ./scripts/ci-check.sh examples
# All jobs completion check
ci-success:
name: CI Success
runs-on: ${{ github.event_name == 'workflow_dispatch' && inputs.runner == 'self-hosted' && 'self-hosted' || 'ubuntu-latest' }}
needs:
- format
- lint
- test
- integration-e2e
- coverage
- docs
- examples
if: always()
steps:
- name: All checks passed
run: |
if [[ "${{ needs.format.result }}" != "success" ]]; then
echo "format failed"
exit 1
fi
if [[ "${{ needs.lint.result }}" != "success" ]]; then
echo "lint failed"
exit 1
fi
if [[ "${{ needs.test.result }}" != "success" ]]; then
echo "test failed"
exit 1
fi
if [[ "${{ needs['integration-e2e'].result }}" != "success" ]]; then
echo "integration-e2e failed"
exit 1
fi
if [[ "${{ needs.coverage.result }}" != "success" ]]; then
echo "coverage failed"
exit 1
fi
if [[ "${{ needs.docs.result }}" != "success" ]]; then
echo "docs failed"
exit 1
fi
if [[ "${{ needs.examples.result }}" != "success" ]]; then
echo "examples failed"
exit 1
fi
echo "✅ All CI checks passed successfully"