name: CI on: # push: # branches: [] pull_request: branches: [develop] # Avoid running the same CI multiple times for the same PR concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: # Job 1: Check markdown files markdown: name: Markdown Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Lint Markdown files uses: DavidAnson/markdownlint-cli2-action@v22 with: globs: '**/*.md' # Job 2: Check code style (very fast) style: name: Format & Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Install Nightly Rust uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 with: toolchain: nightly-2026-05-01 components: rustfmt, clippy - name: Check Formatting # This now works with cargo +nightly fmt run: make fmt-check - name: Check workspace architecture run: make architecture-check - name: Lint with Clippy run: make lint - name: Validate native Docker workspace skeleton run: docker build --target workspace-skeleton -f docker/Dockerfile . - name: Validate cross Docker workspace skeleton run: docker build --target rust-toolchain -f docker/cross.Dockerfile . docs: name: Documentation Build runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Install mdBook uses: taiki-e/install-action@v2 with: tool: mdbook - name: Build documentation run: make docs frontend: name: Frontend Build runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Install Rust Tools uses: taiki-e/install-action@v2 with: tool: trunk,wasm-bindgen-cli,mdbook - name: Install Stable Rust uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown - name: Rust Cache uses: Swatinem/rust-cache@v2 with: cache-targets: "true" - name: Install wasm tools 128 run: | chmod +x ./bin/install_wasm_tools.sh WASM_TOOLS_BIN="$(./bin/install_wasm_tools.sh 128)" echo "${WASM_TOOLS_BIN}" >> "$GITHUB_PATH" - name: Build frontend with wasm-opt run: | chmod +x ./bin/build_docs.sh ./bin/build_fe.sh ./bin/build_fe.sh release windows: name: Windows Build runs-on: windows-latest permissions: contents: read steps: - uses: actions/checkout@v5 with: persist-credentials: false - name: Install Stable Rust uses: dtolnay/rust-toolchain@stable - name: Rust Cache uses: Swatinem/rust-cache@v2 # Non-test code only. `--all-targets` would additionally compile the # test modules, ~10 of which still use ungated `std::os::unix` # (alias_repository, xtream_repository, bplustree/v3/publish, # iptv/stalker/client, api_utils, api/model/download, setup_api). # Widening this step means gating those first; the recording module # tree is already `--all-targets`-clean on Windows. - name: Check Windows build run: cargo check --package tuliprox # Job 3: Build and Test (takes longer) test: name: Build & Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Install Stable Rust uses: dtolnay/rust-toolchain@stable - name: Rust Cache # This magic step saves compiled dependencies between runs uses: Swatinem/rust-cache@v2 - name: Run Tests run: make test