CI #17564
Workflow file for this run
This file contains 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: | |
merge_group: | |
types: [checks_requested] | |
workflow_dispatch: | |
inputs: | |
debug_enabled: | |
type: boolean | |
description: "Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)" | |
required: false | |
default: false | |
pull_request: | |
types: [opened, synchronize] | |
push: | |
branches: | |
- main | |
paths-ignore: | |
- "**/*.md" | |
- "website/**" | |
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: [email protected] | |
- 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/[email protected] | |
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/[email protected] | |
- 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/[email protected] | |
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/[email protected] | |
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 |