feat(remote): implement wire compression tables #2493
Workflow file for this run
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 | |
| 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" |