diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 454ca55d450..16775faf3b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,445 +21,7 @@ on: tags-ignore: - "**" -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: ${{ github.ref_name != 'main' }} - jobs: get-runner-labels: name: Get Runner Labels uses: ./.github/workflows/get-runner-labels.yml - - check-changed: - runs-on: ubuntu-latest - name: Check Source Changed - outputs: - changed: ${{ steps.filter.outputs.changed == 'true' }} - document_changed: ${{ steps.document_filter.outputs.changed == 'true' }} - steps: - - uses: actions/checkout@v4 - - uses: dorny/paths-filter@v3 - id: filter - with: - predicate-quantifier: "every" - filters: | - changed: - - "!**/*.md" - - "!**/*.mdx" - - "!website/**" - - uses: dorny/paths-filter@v3 - id: document_filter - with: - predicate-quantifier: "every" - filters: | - changed: - - "website/**" - - test-linux: - name: Test Linux - needs: [get-runner-labels, check-changed] - uses: ./.github/workflows/reusable-build.yml - with: - target: x86_64-unknown-linux-gnu - profile: "debug" - native: ${{ needs.get-runner-labels.outputs.LINUX_RUNNER_LABELS == '"ubuntu-22.04"' }} - runner: ${{ needs.get-runner-labels.outputs.LINUX_RUNNER_LABELS }} - skipable: ${{ needs.check-changed.outputs.changed != 'true' }} - - test-release-linux: - name: Test Release Linux - needs: [get-runner-labels] - if: contains(github.event.pull_request.title, '!linux') - uses: ./.github/workflows/reusable-build.yml - strategy: - fail-fast: false # Build and test everything so we can look at all the errors - matrix: - array: - - target: x86_64-unknown-linux-gnu - - target: aarch64-unknown-linux-gnu - - target: x86_64-unknown-linux-musl - - target: aarch64-unknown-linux-musl - with: - target: ${{ matrix.array.target }} - runner: ${{ needs.get-runner-labels.outputs.LINUX_RUNNER_LABELS }} - - test-windows: - name: Test Windows - needs: [get-runner-labels, check-changed] - uses: ./.github/workflows/reusable-build.yml - with: - target: x86_64-pc-windows-msvc - profile: "debug" - runner: ${{ needs.get-runner-labels.outputs.WINDOWS_RUNNER_LABELS }} - skipable: ${{ needs.check-changed.outputs.changed != 'true' }} - - test-release-windows: - name: Test Release Windows - needs: [get-runner-labels] - if: contains(github.event.pull_request.title, '!windows') - uses: ./.github/workflows/reusable-build.yml - strategy: - fail-fast: false # Build and test everything so we can look at all the errors - matrix: - array: - - target: i686-pc-windows-msvc - - target: x86_64-pc-windows-msvc - - target: aarch64-pc-windows-msvc - with: - target: ${{ matrix.array.target }} - runner: ${{ needs.get-runner-labels.outputs.WINDOWS_RUNNER_LABELS }} - - test-mac: - name: Test Mac - needs: [get-runner-labels, check-changed] - if: github.ref_name == 'main' || contains(github.event.pull_request.title, '!macos') - uses: ./.github/workflows/reusable-build.yml - with: - target: x86_64-apple-darwin - profile: "debug" - runner: ${{ needs.get-runner-labels.outputs.MACOS_RUNNER_LABELS }} - skipable: ${{ needs.check-changed.outputs.changed != 'true' }} - - test-release-mac: - name: Test Release Mac - needs: [get-runner-labels] - if: contains(github.event.pull_request.title, '!macos') - uses: ./.github/workflows/reusable-build.yml - strategy: - fail-fast: false # Build and test everything so we can look at all the errors - matrix: - array: - - target: x86_64-apple-darwin - - target: aarch64-apple-darwin - with: - target: ${{ matrix.array.target }} - runner: ${{ needs.get-runner-labels.outputs.MACOS_RUNNER_LABELS }} - - cargo-deny: - name: Check license of dependencies - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: dorny/paths-filter@v3 - id: filter - with: - filters: | - src: - - 'Cargo.lock' - - name: Install cargo-deny - if: steps.filter.outputs.src == 'true' - uses: taiki-e/install-action@v2 - with: - tool: cargo-deny@0.16 - - name: Check licenses - if: steps.filter.outputs.src == 'true' - run: cargo deny check license - - spell: - name: Spell check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: crate-ci/typos@v1.28.4 - with: - files: . - - lint: - name: Lint and format code - runs-on: ubuntu-latest - needs: [check-changed] - if: ${{ needs.check-changed.outputs.changed == 'true' }} - steps: - - uses: actions/checkout@v4 - - - uses: dorny/paths-filter@v3 - id: changes - with: - filters: | - src: - - pnpm-lock.yaml - - '**/*.{ts,js,mjs,tsx,jsx}' - - - name: Pnpm Cache - uses: ./.github/actions/pnpm-cache - - - name: Lint js - if: steps.changes.outputs.src == 'true' - run: pnpm run lint-ci:js - - name: Prettier - if: steps.changes.outputs.src == 'true' - run: pnpm run format-ci:js - - - name: Check Dependency Version - if: steps.changes.outputs.src == 'true' - run: pnpm run check-dependency-version - - lint-website: - name: Lint and format website - runs-on: ubuntu-latest - needs: [check-changed] - if: ${{ needs.check-changed.outputs.document_changed == 'true' }} - steps: - - uses: actions/checkout@v4 - - - name: Pnpm Cache - uses: ./.github/actions/pnpm-cache - - - name: Run - run: | - cd website - pnpm install - pnpm run check:ci - - rust_changes: - name: Rust Changes - runs-on: ubuntu-latest - needs: [check-changed] - if: ${{ needs.check-changed.outputs.changed == 'true' }} - outputs: - changed: ${{ steps.filter.outputs.changed }} - steps: - - uses: actions/checkout@v4 - - - uses: dorny/paths-filter@v3 - id: filter - with: - filters: | - changed: - - '.github/workflows/ci.yml' - - 'crates/**' - - 'Cargo.lock' - - 'Cargo.toml' - - 'rust-toolchain.toml' - - pnpm_lockfile_check: - name: Pnpm Lockfile Check - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Pnpm Cache # Required by some tests - uses: ./.github/actions/pnpm-cache - with: - frozen-lockfile: true - - rust_check: - name: Rust check - needs: [get-runner-labels, rust_changes] - if: ${{ needs.rust_changes.outputs.changed == 'true' }} - runs-on: ${{ fromJSON(needs.get-runner-labels.outputs.LINUX_RUNNER_LABELS) }} - steps: - - uses: actions/checkout@v4 - - - name: Install Rust Toolchain - uses: ./.github/actions/rustup - with: - clippy: true - fmt: true - shared-key: check - - - name: Pnpm Cache # Required by some tests - uses: ./.github/actions/pnpm-cache - - - name: Run Cargo Check - run: cargo check --workspace --all-targets --locked # Not using --release because it uses too much cache, and is also slow. - - - name: Run Clippy - uses: actions-rs/cargo@v1 - with: - command: clippy - args: --workspace --all-targets --tests -- -D warnings - - - name: Run rustfmt - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check - - - name: Run toml format check - run: pnpm run format-ci:toml - - rust_unused_dependencies: - name: Check Rust Unused Dependencies - needs: [get-runner-labels, rust_changes] - if: ${{ needs.rust_changes.outputs.changed == 'true' }} - runs-on: ${{ fromJSON(needs.get-runner-labels.outputs.LINUX_RUNNER_LABELS) }} - steps: - - uses: actions/checkout@v4 - - uses: ./.github/actions/rustup - with: - shared-key: check - - uses: cargo-bins/cargo-binstall@v1.10.17 - - run: cargo binstall --no-confirm cargo-shear - - run: cargo shear - - rust_test: - name: Rust test - needs: [get-runner-labels, rust_changes] - if: ${{ needs.rust_changes.outputs.changed == 'true' }} - runs-on: ${{ fromJSON(needs.get-runner-labels.outputs.LINUX_RUNNER_LABELS) }} - steps: - - uses: actions/checkout@v4 - - - name: Pnpm Cache # Required by some tests - uses: ./.github/actions/pnpm-cache - - - name: Install Rust Toolchain - uses: ./.github/actions/rustup - with: - save-cache: ${{ github.ref_name == 'main' }} - shared-key: check - - # Compile test without debug info for reducing the CI cache size - - name: Change profile.test - shell: bash - run: | - echo '[profile.test]' >> Cargo.toml - echo 'debug = false' >> Cargo.toml - - - name: Run test - # reason for excluding https://github.com/napi-rs/napi-rs/issues/2200 - run: cargo test --workspace --exclude rspack_node -- --nocapture - - rust_test_miri: - name: Rust test miri - needs: [get-runner-labels, rust_changes] - if: needs.rust_changes.outputs.changed == 'true' && github.ref_name == 'main' && github.repository_owner == 'web-infra-dev' - runs-on: ${{ fromJSON(needs.get-runner-labels.outputs.LINUX_RUNNER_LABELS) }} - steps: - - uses: actions/checkout@v4 - - - name: Pnpm Cache # Required by some tests - uses: ./.github/actions/pnpm-cache - - - name: Install Rust Toolchain - uses: ./.github/actions/rustup - with: - save-cache: ${{ github.ref_name == 'main' }} - shared-key: check - miri: true - - # Compile test without debug info for reducing the CI cache size - - name: Change profile.test - shell: bash - run: | - echo '[profile.test]' >> Cargo.toml - echo 'debug = false' >> Cargo.toml - - - name: Run test - env: - MIRIFLAGS: -Zmiri-tree-borrows -Zmiri-disable-isolation - # reason for excluding https://github.com/napi-rs/napi-rs/issues/2200 - run: cargo miri test --workspace --exclude rspack_node -- --nocapture - - run_rust_benchmark: - name: Run rust benchmark - runs-on: ubuntu-latest - needs: [rust_changes, rust_check, rust_test] - steps: - - uses: actions/checkout@v4 - - name: Pnpm Cache # Required by some tests - uses: ./.github/actions/pnpm-cache - - - name: Install Rust Toolchain - uses: ./.github/actions/rustup - with: - save-cache: ${{ github.ref_name == 'main' }} - shared-key: check - - - name: Install Tools - uses: taiki-e/install-action@v2 - with: - tool: cargo-codspeed - - - name: Build Benchmark - run: cargo codspeed build -p rspack_benchmark --features codspeed - - - name: Run benchmark - uses: CodSpeedHQ/action@v3 - timeout-minutes: 30 - with: - run: cargo codspeed run - token: ${{ secrets.CODSPEED_TOKEN }} - - run_benchmark: - name: Run benchmark - runs-on: ubuntu-latest - if: github.ref_name == 'main' && github.repository_owner == 'web-infra-dev' - steps: - - name: Run Benchmark - uses: convictional/trigger-workflow-and-wait@v1.6.5 - with: - owner: ${{ github.repository_owner }} - repo: "rspack-ecosystem-benchmark" - workflow_file_name: "bench_rspack_commit.yml" - github_token: ${{ secrets.RSPACK_ACCESS_TOKEN }} - ref: "main" - client_payload: '{"commit_sha":"${{ github.sha }}"}' - - run_ecosystem_ci: - name: Run Ecosystem CI - runs-on: ubuntu-latest - if: github.ref_name == 'main' && github.repository_owner == 'web-infra-dev' - steps: - - name: Run Ecosystem CI - id: eco_ci - continue-on-error: true - uses: convictional/trigger-workflow-and-wait@v1.6.5 - with: - owner: "rspack-contrib" - repo: "rspack-ecosystem-ci" - workflow_file_name: "ecosystem-ci-from-commit.yml" - github_token: ${{ secrets.RSPACK_ACCESS_TOKEN }} - ref: "main" - client_payload: '{"commitSHA":"${{ github.sha }}","repo":"web-infra-dev/rspack","suite":"-","suiteRefType":"precoded","suiteRef":"precoded"}' - - - if: steps.eco_ci.outcome == 'failure' - uses: actions/checkout@v4 - - if: steps.eco_ci.outcome == 'failure' - uses: actions/setup-node@v4 - with: - node-version: 20 - - name: Send Failure Notification - if: steps.eco_ci.outcome == 'failure' - shell: bash - run: ./scripts/alert/lark.js - env: - TITLE: Ecosystem CI failed on main branch - DESCRIPTION: | - commitID: [${{github.sha}}](${{github.server_url}}/${{github.repository}}/commit/${{github.sha}}) - URL: ${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}} - LARK_WEBHOOK_URL: ${{secrets.LARK_WEBHOOK_URL}} - - failure_notification: - name: Failure Notification - needs: - [test-linux, test-windows, test-mac, rust_check, rust_test, run_benchmark] - if: ${{ failure() && !cancelled() && github.ref_name == 'main' && github.repository_owner == 'web-infra-dev' }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 20 - - shell: bash - run: ./scripts/alert/lark.js - env: - TITLE: CI failed on main branch - DESCRIPTION: | - commitID: [${{github.sha}}](${{github.server_url}}/${{github.repository}}/commit/${{github.sha}}) - URL: ${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}} - LARK_WEBHOOK_URL: ${{secrets.LARK_WEBHOOK_URL}} - - pkg-preview: - name: Pkg Preview - needs: - - test-linux - - test-windows - - cargo-deny - - lint - - rust_check - - rust_test - # after merged to main branch - if: ${{ !failure() && github.event_name == 'push' }} - uses: ./.github/workflows/preview-commit.yml diff --git a/.github/workflows/get-runner-labels.yml b/.github/workflows/get-runner-labels.yml index ba231579820..679f3aa4d7c 100644 --- a/.github/workflows/get-runner-labels.yml +++ b/.github/workflows/get-runner-labels.yml @@ -22,7 +22,7 @@ on: jobs: main: name: Get Runner Labels - runs-on: [ubuntu-22.04] + runs-on: [self-hosted, Linux] outputs: LINUX_RUNNER_LABELS: ${{ steps.run.outputs.LINUX_RUNNER_LABELS }} MACOS_RUNNER_LABELS: ${{ steps.run.outputs.MACOS_RUNNER_LABELS }}