fix(infra): default manage_apex/www_records to true (prevent DNS dest… #2598
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] | |
| paths-ignore: | |
| - "docs/**" | |
| - "skills/**" | |
| - "website/**" | |
| - "blog/**" | |
| - "engine/src/workers/**/*.md" | |
| - "**/*.md" | |
| - "**/*.mdx" | |
| - ".cursor/**" | |
| pull_request: | |
| branches: [main] | |
| paths-ignore: | |
| - "docs/**" | |
| - "skills/**" | |
| - "website/**" | |
| - "blog/**" | |
| - "engine/src/workers/**/*.md" | |
| - "**/*.md" | |
| - "**/*.mdx" | |
| - ".cursor/**" | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| env: | |
| CARGO_TERM_COLOR: always | |
| III_TELEMETRY_ENABLED: "false" | |
| jobs: | |
| # ────────────────────────────────────────────────────────────── | |
| # Change detection (used to scope expensive jobs like coverage) | |
| # ────────────────────────────────────────────────────────────── | |
| changes: | |
| name: Detect changes | |
| runs-on: ubuntu-latest | |
| outputs: | |
| engine: ${{ steps.filter.outputs.engine }} | |
| benches: ${{ steps.filter.outputs.benches }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dorny/paths-filter@v3 | |
| id: filter | |
| with: | |
| filters: | | |
| engine: | |
| - 'engine/**' | |
| - 'crates/**' | |
| - 'Cargo.toml' | |
| - 'Cargo.lock' | |
| - '.github/workflows/ci.yml' | |
| benches: | |
| - 'engine/benches/**' | |
| - 'engine/Cargo.toml' | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine Build — critical path, produces iii binary for downstream | |
| # ────────────────────────────────────────────────────────────── | |
| engine-build: | |
| name: Engine Build (artifact) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: engine | |
| - name: Install system dependencies | |
| run: | | |
| # Fast path: GitHub runner images ship with fresh apt lists, so | |
| # install directly (the slow `apt-get update` refreshes every index). | |
| # Fall back to a full update only if the cached index misses. | |
| sudo apt-get install -y libcap-ng-dev \ | |
| || { sudo apt-get update && sudo apt-get install -y libcap-ng-dev; } | |
| - name: Build iii (debug, all-features) | |
| run: cargo build -p iii --all-features | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: iii-binary | |
| path: target/debug/iii | |
| retention-days: 1 | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine Coverage — runs the full engine + crate test suite under | |
| # llvm-cov instrumentation. This is the single test gate (it supersedes | |
| # the old separate "Engine Tests" job, which re-ran the same tests | |
| # uninstrumented). Scoped: always on push/dispatch, and on PRs only when | |
| # engine/crates/Cargo paths change. Parallel, does not gate downstream. | |
| # ────────────────────────────────────────────────────────────── | |
| engine-coverage: | |
| name: Engine Coverage | |
| needs: changes | |
| if: >- | |
| github.event_name != 'pull_request' || needs.changes.outputs.engine == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| # Free up disk space to avoid "No space left on device" — the | |
| # coverage-instrumented build is large. | |
| - name: Free disk space | |
| run: | | |
| sudo rm -rf /opt/hostedtoolcache/CodeQL | |
| sudo rm -rf /usr/share/dotnet | |
| sudo rm -rf /usr/local/lib/android | |
| sudo rm -rf /opt/ghc | |
| sudo rm -rf /opt/microsoft | |
| df -h / | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: llvm-tools-preview | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: engine-coverage | |
| - uses: taiki-e/install-action@cargo-llvm-cov | |
| - name: Install system dependencies | |
| run: | | |
| # Fast path: GitHub runner images ship with fresh apt lists, so | |
| # install directly (the slow `apt-get update` refreshes every index). | |
| # Fall back to a full update only if the cached index misses. | |
| sudo apt-get install -y libcap-ng-dev lld \ | |
| || { sudo apt-get update && sudo apt-get install -y libcap-ng-dev lld; } | |
| - name: Build and install iii-worker (needed by iii integration tests) | |
| run: | | |
| cargo build -p iii-worker | |
| mkdir -p ~/.local/bin | |
| cp target/debug/iii-worker ~/.local/bin/iii-worker | |
| chmod +x ~/.local/bin/iii-worker | |
| - name: Run tests with coverage | |
| run: | | |
| eval "$(cargo llvm-cov show-env --export-prefix)" | |
| # The coverage-instrumented `iii` test binary is large enough that the | |
| # default GNU bfd linker exhausts the runner's memory and crashes | |
| # ("ld terminated with signal 7 / Bus error, core dumped"). Link with | |
| # lld, which links large binaries with far less peak memory. Appended | |
| # so the `-C instrument-coverage` RUSTFLAGS exported above are kept. | |
| export RUSTFLAGS="${RUSTFLAGS:-} -C link-arg=-fuse-ld=lld" | |
| # cargo test runs the crate's tests (incl. doctests) parallel within | |
| # each binary in one process. The VM crates run with default features | |
| # only (--all-features would enable integration-vm/-oci, which need KVM | |
| # and have their own jobs); iii runs with --all-features. (Process-per- | |
| # test runners like nextest aren't used here: several engine tests rely | |
| # on shared in-process global state — tracing/metrics singletons, | |
| # ports — and aren't isolation-safe.) | |
| cargo test -p iii-worker -p iii-filesystem -p iii-network -p iii-init | |
| cargo test -p iii --all-features | |
| # Reports re-read the merged profdata (no recompile), so emitting the | |
| # terminal summary, an lcov file, and a browsable HTML tree is cheap. | |
| IGNORE='engine/src/main\.rs|(cron|pubsub|queue|state|stream)/adapters/(redis_adapter|bridge)\.rs|queue/adapters/rabbitmq/|^sdk/' | |
| cargo llvm-cov report --ignore-filename-regex "$IGNORE" | |
| cargo llvm-cov report --ignore-filename-regex "$IGNORE" --lcov --output-path coverage.lcov | |
| cargo llvm-cov report --ignore-filename-regex "$IGNORE" --html | |
| - name: Upload coverage report | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: engine-coverage-report | |
| path: | | |
| coverage.lcov | |
| target/llvm-cov/html | |
| if-no-files-found: ignore | |
| retention-days: 7 | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine Benches — compile-only check, parallel, does not gate. | |
| # ────────────────────────────────────────────────────────────── | |
| engine-benches: | |
| name: Engine Benches Compile | |
| # Bench compile (~20m cold) is redundant with bench-release.yml, which | |
| # compiles and runs benches on every release tag. On PRs/pushes only run it | |
| # when bench sources actually change, so the common path skips it entirely. | |
| needs: changes | |
| if: needs.changes.outputs.benches == 'true' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: engine-benches | |
| - name: Install system dependencies | |
| run: | | |
| # Fast path: GitHub runner images ship with fresh apt lists, so | |
| # install directly (the slow `apt-get update` refreshes every index). | |
| # Fall back to a full update only if the cached index misses. | |
| sudo apt-get install -y libcap-ng-dev \ | |
| || { sudo apt-get update && sudo apt-get install -y libcap-ng-dev; } | |
| - name: Check benches compile | |
| run: cargo bench --benches --no-run | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine Formatting — fast, parallel | |
| # ────────────────────────────────────────────────────────────── | |
| engine-fmt: | |
| name: Engine Formatting | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt | |
| - name: Check formatting | |
| run: cargo fmt --all -- --check | |
| # - name: Run clippy | |
| # run: cargo clippy -p iii -p function-macros -p iii-sdk --all-targets --all-features -- -D warnings | |
| # ────────────────────────────────────────────────────────────── | |
| # CLI Docs Built — regenerate docs/next/cli-reference/ from the | |
| # clap definitions (hidden `gen-cli-docs` subcommands) and fail when | |
| # the committed pages don't match. Guarantees the published CLI | |
| # reference can never go stale relative to the CLI source. | |
| # ────────────────────────────────────────────────────────────── | |
| cli-docs-built: | |
| name: CLI Docs Built | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: engine | |
| - name: Install system dependencies | |
| run: | | |
| # Fast path: GitHub runner images ship with fresh apt lists, so | |
| # install directly (the slow `apt-get update` refreshes every index). | |
| # Fall back to a full update only if the cached index misses. | |
| sudo apt-get install -y libcap-ng-dev \ | |
| || { sudo apt-get update && sudo apt-get install -y libcap-ng-dev; } | |
| - name: Regenerate CLI reference pages | |
| run: ./scripts/generate-cli-docs.sh | |
| - name: Verify committed pages match | |
| run: | | |
| if [[ -n "$(git status --porcelain -- docs/next/cli-reference)" ]]; then | |
| git status --porcelain -- docs/next/cli-reference | |
| git diff -- docs/next/cli-reference | head -200 | |
| echo "::error::docs/next/cli-reference is stale. Run scripts/generate-cli-docs.sh (or 'make cli-docs') and commit the result." | |
| exit 1 | |
| fi | |
| # ────────────────────────────────────────────────────────────── | |
| # Engine RabbitMQ Integration Tests | |
| # ────────────────────────────────────────────────────────────── | |
| engine-rabbitmq-tests: | |
| name: Engine RabbitMQ Integration Tests | |
| runs-on: ubuntu-latest | |
| services: | |
| rabbitmq: | |
| image: rabbitmq:3-management-alpine | |
| ports: | |
| - 5672:5672 | |
| - 15672:15672 | |
| options: >- | |
| --health-cmd "rabbitmq-diagnostics check_running" --health-interval 10s --health-timeout | |
| 5s --health-retries 5 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: engine | |
| - name: Run RabbitMQ integration tests | |
| env: | |
| RABBITMQ_URL: amqp://localhost:5672 | |
| RUST_LOG: info | |
| run: cargo test -p iii --test rabbitmq_queue_integration -- --nocapture | |
| engine-build-matrix: | |
| name: Engine Build - ${{ matrix.target }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - target: x86_64-apple-darwin | |
| os: macos-latest | |
| - target: x86_64-pc-windows-msvc | |
| os: windows-latest | |
| - target: x86_64-unknown-linux-gnu | |
| os: ubuntu-latest | |
| - target: x86_64-unknown-linux-musl | |
| os: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: ${{ matrix.target }} | |
| - name: Install musl tools | |
| if: matrix.target == 'x86_64-unknown-linux-musl' | |
| run: | | |
| # Fast path: install directly; the slow `apt-get update` only runs as | |
| # a fallback if the runner image's apt index is stale. | |
| sudo apt-get install -y musl-tools \ | |
| || { sudo apt-get update && sudo apt-get install -y musl-tools; } | |
| - name: Add target | |
| run: rustup target add ${{ matrix.target }} | |
| # Debug build: this matrix only validates that iii compiles on every | |
| # target. Optimized release builds are produced separately at tag time by | |
| # release-iii.yml (which always uses --release). | |
| - name: Build for target | |
| run: cargo build -p iii --target ${{ matrix.target }} | |
| # ────────────────────────────────────────────────────────────── | |
| # Worker Build Matrix (matches release targets) | |
| # ────────────────────────────────────────────────────────────── | |
| worker-build-matrix: | |
| name: Worker Build - ${{ matrix.target }} | |
| runs-on: ${{ matrix.os }} | |
| env: | |
| CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc | |
| CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_PKG_CONFIG_ALLOW_CROSS: "1" | |
| PKG_CONFIG_SYSROOT_DIR_aarch64_unknown_linux_gnu: /usr/aarch64-linux-gnu | |
| PKG_CONFIG_PATH_aarch64_unknown_linux_gnu: /usr/lib/aarch64-linux-gnu/pkgconfig | |
| CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS: "-C link-arg=-L/usr/lib/aarch64-linux-gnu" | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - target: aarch64-apple-darwin | |
| os: macos-latest | |
| - target: x86_64-unknown-linux-gnu | |
| os: ubuntu-latest | |
| - target: aarch64-unknown-linux-gnu | |
| os: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-${{ matrix.target }} | |
| - name: Install system dependencies (x86_64 Linux) | |
| if: matrix.target == 'x86_64-unknown-linux-gnu' | |
| run: | | |
| # Fast path: GitHub runner images ship with fresh apt lists, so | |
| # install directly (the slow `apt-get update` refreshes every index). | |
| # Fall back to a full update only if the cached index misses. | |
| sudo apt-get install -y libcap-ng-dev \ | |
| || { sudo apt-get update && sudo apt-get install -y libcap-ng-dev; } | |
| - name: Install cross-compilation tools (aarch64 Linux) | |
| if: matrix.target == 'aarch64-unknown-linux-gnu' | |
| run: | | |
| sudo dpkg --add-architecture arm64 | |
| sudo sed -i 's/^deb /deb [arch=amd64] /' /etc/apt/sources.list | |
| MIRROR=http://azure.ports.ubuntu.com/ubuntu-ports/ | |
| echo "deb [arch=arm64] $MIRROR $(lsb_release -cs) main restricted universe" | sudo tee /etc/apt/sources.list.d/arm64.list | |
| echo "deb [arch=arm64] $MIRROR $(lsb_release -cs)-updates main restricted universe" | sudo tee -a /etc/apt/sources.list.d/arm64.list | |
| # The amd64 cross toolchain is already indexed on the runner image, so | |
| # install it directly (full `apt-get update` only as a fallback). | |
| sudo apt-get install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross \ | |
| || { sudo apt-get update && sudo apt-get install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross; } | |
| # The arm64 runtime lib needs the freshly-added arm64 source indexed. | |
| # Scope the update to just that list so we don't refresh every index. | |
| sudo apt-get update \ | |
| -o Dir::Etc::sourcelist="sources.list.d/arm64.list" \ | |
| -o Dir::Etc::sourceparts="-" \ | |
| -o APT::Get::List-Cleanup="0" | |
| sudo apt-get install -y libcap-ng-dev:arm64 | |
| - name: Add target | |
| run: rustup target add ${{ matrix.target }} | |
| - name: Build iii-worker for target | |
| run: cargo build -p iii-worker --target ${{ matrix.target }} | |
| # ────────────────────────────────────────────────────────────── | |
| # Worker Test Matrix (cross-platform integration tests) | |
| # ────────────────────────────────────────────────────────────── | |
| worker-test-matrix: | |
| name: Worker Tests - ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| - os: macos-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-${{ matrix.os }} | |
| - uses: taiki-e/install-action@cargo-nextest | |
| - name: Install system dependencies (Linux only) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| # Fast path: GitHub runner images ship with fresh apt lists, so | |
| # install directly (the slow `apt-get update` refreshes every index). | |
| # Fall back to a full update only if the cached index misses. | |
| sudo apt-get install -y libcap-ng-dev \ | |
| || { sudo apt-get update && sudo apt-get install -y libcap-ng-dev; } | |
| - name: Run iii-worker tests | |
| run: cargo nextest run -p iii-worker --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-${{ matrix.os }} | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| # ────────────────────────────────────────────────────────────── | |
| # Worker Feature-Gated Tests | |
| # ────────────────────────────────────────────────────────────── | |
| worker-test-vm-linux: | |
| name: Worker Tests (VM) - linux | |
| runs-on: ubuntu-24.04 | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-vm-linux | |
| - uses: taiki-e/install-action@cargo-nextest | |
| # Public GitHub-hosted Linux runners expose /dev/kvm as of April 2024 | |
| # (github.blog/changelog/2024-04-02-github-actions-hardware-accelerated-android-virtualization-now-available). | |
| # The udev rule below grants the runner user direct access — required for | |
| # libkrun-backed sandbox tests that boot a real microVM. Cheap no-op for | |
| # any feature-gated tests that don't actually launch a guest. | |
| - name: Enable KVM | |
| run: | | |
| if [ -e /dev/kvm ]; then | |
| echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \ | |
| | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
| sudo udevadm control --reload-rules | |
| sudo udevadm trigger --name-match=kvm | |
| ls -l /dev/kvm | |
| else | |
| echo "::warning::/dev/kvm missing on this runner image; libkrun guest boot will be unavailable" | |
| fi | |
| - name: Install system dependencies | |
| run: | | |
| # Fast path: GitHub runner images ship with fresh apt lists, so | |
| # install directly (the slow `apt-get update` refreshes every index). | |
| # Fall back to a full update only if the cached index misses. | |
| sudo apt-get install -y libcap-ng-dev \ | |
| || { sudo apt-get update && sudo apt-get install -y libcap-ng-dev; } | |
| - name: Run VM feature-gated tests | |
| run: cargo nextest run -p iii-worker --features integration-vm --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-vm-linux | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| worker-test-vm-macos: | |
| name: Worker Tests (VM) - macos | |
| runs-on: macos-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-vm-macos | |
| - uses: taiki-e/install-action@cargo-nextest | |
| - name: Run VM feature-gated tests | |
| run: cargo nextest run -p iii-worker --features integration-vm --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-vm-macos | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| worker-test-oci-linux: | |
| name: Worker Tests (OCI) - linux | |
| runs-on: ubuntu-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-oci-linux | |
| - uses: taiki-e/install-action@cargo-nextest | |
| - name: Install system dependencies | |
| run: | | |
| # Fast path: GitHub runner images ship with fresh apt lists, so | |
| # install directly (the slow `apt-get update` refreshes every index). | |
| # Fall back to a full update only if the cached index misses. | |
| sudo apt-get install -y libcap-ng-dev \ | |
| || { sudo apt-get update && sudo apt-get install -y libcap-ng-dev; } | |
| - name: Run OCI feature-gated tests | |
| run: cargo nextest run -p iii-worker --features integration-oci --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-oci-linux | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| worker-test-oci-macos: | |
| name: Worker Tests (OCI) - macos | |
| runs-on: macos-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: worker-test-oci-macos | |
| - uses: taiki-e/install-action@cargo-nextest | |
| - name: Run OCI feature-gated tests | |
| run: cargo nextest run -p iii-worker --features integration-oci --profile ci | |
| - uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: junit-worker-test-oci-macos | |
| path: target/nextest/ci/junit.xml | |
| retention-days: 7 | |
| # ────────────────────────────────────────────────────────────── | |
| # SDK Node | |
| # ────────────────────────────────────────────────────────────── | |
| sdk-node-ci: | |
| name: SDK Node Tests | |
| needs: engine-build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| #- name: Lint | |
| # run: npx @biomejs/biome check sdk/packages/node | |
| - name: Build helper packages (prerequisite for type check) | |
| run: pnpm --filter @iii-dev/observability build && pnpm --filter @iii-dev/helpers build | |
| - name: Type check | |
| run: pnpm --filter iii-sdk exec tsc --noEmit | |
| - name: Build | |
| run: pnpm --filter iii-sdk build | |
| - name: Download III binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iii-binary | |
| - name: Start III Engines | |
| run: | | |
| chmod +x ./iii | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-test.yaml \ | |
| --port 49199 | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-bridge-backend.yaml \ | |
| --port 49198 \ | |
| --pid-file /tmp/iii-backend.pid \ | |
| --log-file /tmp/iii-backend.log | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-bridge.yaml \ | |
| --port 49197 \ | |
| --pid-file /tmp/iii-bridge.pid \ | |
| --log-file /tmp/iii-bridge.log | |
| - name: Run tests with coverage | |
| env: | |
| III_URL: ws://localhost:49199 | |
| III_HTTP_URL: http://localhost:3199 | |
| run: pnpm --filter iii-sdk test:coverage | |
| - name: Stop III Engines | |
| if: always() | |
| run: bash scripts/stop-iii.sh /tmp/iii-engine.pid /tmp/iii-backend.pid /tmp/iii-bridge.pid | |
| # ────────────────────────────────────────────────────────────── | |
| # SDK Node Browser | |
| # ────────────────────────────────────────────────────────────── | |
| sdk-node-browser-ci: | |
| name: SDK Browser Tests | |
| needs: engine-build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Type check | |
| run: pnpm --filter iii-browser-sdk exec tsc --noEmit | |
| - name: Build | |
| run: pnpm --filter iii-browser-sdk build | |
| - name: Run unit tests | |
| run: pnpm --filter iii-browser-sdk test | |
| - name: Download III binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iii-binary | |
| - name: Start III Engine | |
| run: | | |
| chmod +x ./iii | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-test.yaml \ | |
| --port 49199 | |
| - name: Run integration tests | |
| env: | |
| III_URL: ws://localhost:49199 | |
| III_HTTP_URL: http://localhost:3199 | |
| run: pnpm --filter iii-browser-sdk test:integration | |
| - name: Stop III Engine | |
| if: always() | |
| run: bash scripts/stop-iii.sh /tmp/iii-engine.pid | |
| # ────────────────────────────────────────────────────────────── | |
| # SDK Python | |
| # ────────────────────────────────────────────────────────────── | |
| sdk-python-ci: | |
| name: SDK Python (${{ matrix.python-version }}) | |
| needs: engine-build | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.10", "3.11", "3.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - uses: astral-sh/setup-uv@v5 | |
| with: | |
| enable-cache: true | |
| cache-dependency-glob: "sdk/packages/python/iii/uv.lock" | |
| - name: Install dependencies | |
| working-directory: sdk/packages/python/iii | |
| run: uv sync --extra dev | |
| - name: Lint | |
| working-directory: sdk/packages/python/iii | |
| run: uv run ruff check src | |
| - name: Type check | |
| working-directory: sdk/packages/python/iii | |
| run: uv run mypy src | |
| - name: Download III binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iii-binary | |
| - name: Start III Engine | |
| run: | | |
| chmod +x ./iii | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-test.yaml \ | |
| --port 49199 | |
| - name: Run tests with coverage | |
| working-directory: sdk/packages/python/iii | |
| env: | |
| III_URL: ws://localhost:49199 | |
| III_HTTP_URL: http://localhost:3199 | |
| run: uv run pytest -q | |
| - name: Stop III Engine | |
| if: always() | |
| run: bash scripts/stop-iii.sh /tmp/iii-engine.pid | |
| # ────────────────────────────────────────────────────────────── | |
| # SDK Rust | |
| # ────────────────────────────────────────────────────────────── | |
| sdk-rust-ci: | |
| name: SDK Rust Tests | |
| needs: engine-build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: sdk-rust | |
| - name: Check formatting | |
| run: cargo fmt -p iii-sdk -- --check | |
| - name: Run clippy | |
| run: cargo clippy -p iii-sdk --all-targets --all-features -- -D warnings | |
| - name: Download III binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iii-binary | |
| - name: Start III Engine | |
| run: | | |
| chmod +x ./iii | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-test.yaml \ | |
| --port 49199 | |
| - name: Run tests | |
| env: | |
| III_URL: ws://localhost:49199 | |
| III_HTTP_URL: http://localhost:3199 | |
| run: cargo test -p iii-sdk --all-features | |
| - name: Stop III Engine | |
| if: always() | |
| run: bash scripts/stop-iii.sh /tmp/iii-engine.pid | |
| sdk-go-ci: | |
| name: SDK Go Tests | |
| needs: engine-build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-go@v5 | |
| with: | |
| go-version: "1.24" | |
| cache-dependency-path: sdk/packages/go/iii/go.sum | |
| - name: Check formatting | |
| run: test -z "$(gofmt -l sdk/packages/go/iii)" || { gofmt -l sdk/packages/go/iii; exit 1; } | |
| - name: Vet | |
| working-directory: sdk/packages/go/iii | |
| run: go vet ./... | |
| - name: Unit tests (race) | |
| working-directory: sdk/packages/go/iii | |
| run: go test -race ./... | |
| - name: Download III binary | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: iii-binary | |
| - name: Start III Engine | |
| run: | | |
| chmod +x ./iii | |
| bash scripts/start-iii.sh \ | |
| --config sdk/fixtures/config-test.yaml \ | |
| --port 49199 | |
| - name: Integration tests | |
| working-directory: sdk/packages/go/iii | |
| env: | |
| III_URL: ws://localhost:49199 | |
| III_HTTP_URL: http://localhost:3199 | |
| run: go test -tags integration ./tests/... | |
| - name: Stop III Engine | |
| if: always() | |
| run: bash scripts/stop-iii.sh /tmp/iii-engine.pid | |
| # ────────────────────────────────────────────────────────────── | |
| # Console | |
| # ────────────────────────────────────────────────────────────── | |
| console-ci: | |
| name: Console Build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: "22" | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Lint frontend | |
| run: pnpm --filter console-frontend lint | |
| - name: Build frontend | |
| run: pnpm --filter console-frontend build | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: console | |
| - name: Build console binary | |
| run: cargo build -p iii-console --release |