name: CI on: workflow_dispatch: pull_request: types: [opened, synchronize] paths-ignore: - '**/*.md' push: branches: - main paths-ignore: - '**/*.md' concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} cancel-in-progress: ${{ github.ref_name != 'main' }} jobs: cache: # Warm cache factory for all other CI jobs name: Check and Build strategy: fail-fast: false matrix: include: - os: windows-latest - os: ubuntu-latest - os: macos-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: Install Rust Toolchain uses: ./.github/actions/rustup with: save-cache: ${{ github.ref_name == 'main' }} - name: Install cargo-nextest if: runner.os != 'Windows' uses: taiki-e/install-action@cargo-nextest - name: Cargo check run: cargo ck # NAPI crashes nextest on windows # https://github.com/napi-rs/napi-rs/issues/1405 - name: Build cache by Cargo Check and Cargo Test if: runner.os == 'Windows' run: | cargo test run --workspace --all-targets --all-features --no-run - name: Build cache by Cargo Check and Cargo Test if: runner.os != 'Windows' run: | cargo nextest run --workspace --all-targets --all-features --no-run wasm: name: Check Wasm runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install Rust Toolchain uses: ./.github/actions/rustup with: shared-key: 'wasm' # cache is saved from the website workflow - name: Check run: | rustup target add wasm32-unknown-unknown cargo check -p oxc_wasm --target wasm32-unknown-unknown typos: name: Spell Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: crate-ci/typos@master with: files: . check-dependencies: name: Check Unused Dependencies runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dorny/paths-filter@v2 id: filter with: filters: | src: - 'Cargo.lock' - name: Install cargo-udeps if: steps.filter.outputs.src == 'true' uses: taiki-e/install-action@cargo-udeps - if: steps.filter.outputs.src == 'true' run: cargo udeps deny: name: Cargo Deny runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: dorny/paths-filter@v2 id: filter with: filters: | src: - 'Cargo.lock' - name: Install cargo-deny if: steps.filter.outputs.src == 'true' uses: taiki-e/install-action@cargo-deny - if: steps.filter.outputs.src == 'true' run: cargo deny check format: name: Format runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install Rust uses: ./.github/actions/rustup with: fmt: true restore-cache: false - run: cargo fmt --all -- --check lint: name: Clippy runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install Rust uses: ./.github/actions/rustup with: clippy: true - name: Run Clippy run: cargo lint -- -D warnings test: name: Test strategy: fail-fast: false matrix: include: - os: windows-latest - os: ubuntu-latest - os: macos-latest runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - name: Install Rust Toolchain uses: ./.github/actions/rustup - name: Install cargo-nextest uses: taiki-e/install-action@cargo-nextest # NAPI crashes nextest on windows # https://github.com/napi-rs/napi-rs/issues/1405 - if: runner.os == 'Windows' run: cargo test - if: runner.os != 'Windows' run: cargo nextest run conformance: name: Conformance runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: true # Pull submodules for `cargo coverage` - name: Install Rust Toolchain uses: ./.github/actions/rustup - run: cargo coverage - run: cargo minsize - name: Check for snapshot diff run: git diff --exit-code