feat(napi/parser): add experimental lazy visitor #47745
Workflow file for this run
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 | |
permissions: {} | |
on: | |
workflow_dispatch: | |
pull_request: | |
types: [opened, synchronize] | |
paths-ignore: | |
- "**/*.md" | |
- "**/*.yml" | |
- "!.github/workflows/ci.yml" | |
- "!.github/actions/clone-submodules/action.yml" | |
push: | |
branches: | |
- main | |
paths-ignore: | |
- "**/*.md" | |
- "**/*.yml" | |
- "!.github/workflows/ci.yml" | |
- "!.github/actions/clone-submodules/action.yml" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} | |
cancel-in-progress: ${{ github.ref_name != 'main' }} | |
jobs: | |
test-ubuntu: | |
name: Test Linux | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
with: | |
save-cache: ${{ github.ref_name == 'main' }} | |
cache-key: warm | |
- run: cargo ck | |
- run: cargo test --all-features | |
- run: git diff --exit-code # Must commit everything | |
# Separate job to save a job on PRs | |
test-mac: | |
name: Test Mac | |
runs-on: macos-latest | |
if: ${{ github.ref_name == 'main' }} | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
with: | |
save-cache: ${{ github.ref_name == 'main' }} | |
cache-key: warm | |
- run: cargo ck | |
- run: cargo test --all-features | |
- run: git diff --exit-code # Must commit everything | |
test-windows: | |
name: Test Windows | |
if: ${{ github.ref_name == 'main' }} | |
runs-on: windows-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
# Unsung heros of the internet, who led me here to speed up window's slowness: | |
# https://github.com/actions/cache/issues/752#issuecomment-1847036770 | |
# https://github.com/astral-sh/uv/blob/502e04200d52de30d3159894833b3db4f0d6644d/.github/workflows/ci.yml#L158 | |
- uses: samypr100/setup-dev-drive@b9079d2711b01ed39de859c79c96484bfd80e078 # v3.4.1 | |
with: | |
workspace-copy: true | |
drive-size: 8GB | |
drive-format: NTFS | |
env-mapping: | | |
CARGO_HOME,{{ DEV_DRIVE }}/.cargo | |
RUSTUP_HOME,{{ DEV_DRIVE }}/.rustup | |
- name: Install Rust | |
working-directory: ${{ env.DEV_DRIVE_WORKSPACE }} | |
shell: bash | |
run: | | |
# This `awk` command will find the value of our Minimum Supported Rust Version and store it as `MSRV`. | |
# NOTE: this will fail if there are any other items named `rust-version`. We assume there is only one in our `Cargo.toml`. | |
MSRV=$(awk -F'=' '/rust-version/ {gsub(/[" ]/, "", $2); printf "%s", ($2 + "")}' Cargo.toml) | |
# Set profile to minimal and channel to our Minimum Supported Rust Version. | |
# Running our tests on this channel ensures that our code uses APIs that are supported in our `MSRV`. | |
sed -i -e 's/profile = "default"/profile = "minimal"/g' -e "s/channel = .*/channel = \"$MSRV\"/g" rust-toolchain.toml | |
rustup set profile minimal | |
rustup show | |
git restore . | |
- uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2.7.8 | |
with: | |
workspaces: ${{ env.DEV_DRIVE_WORKSPACE }} | |
save-if: ${{ github.ref_name == 'main' }} | |
shared-key: windows-latest | |
- run: cargo test --all-features # cargo ck # no need to `cargo ck` because it's already checked in linux | |
working-directory: ${{ env.DEV_DRIVE_WORKSPACE }} | |
shell: bash | |
test-big-endian: | |
name: Test big-endian # s390x-unknown-linux-gnu is a big-endian | |
if: ${{ github.ref_name == 'main' }} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
with: | |
save-cache: ${{ github.ref_name == 'main' }} | |
cache-key: s390x-unknown-linux-gnu | |
tools: cross | |
- run: cross test --target s390x-unknown-linux-gnu | |
test-wasm32-wasip1-threads: | |
name: Test wasm32-wasip1-threads | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
id: filter | |
with: | |
filters: | | |
src: | |
- '!crates/oxc_linter/**' | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
if: steps.filter.outputs.src == 'true' | |
with: | |
cache-key: wasi | |
save-cache: ${{ github.ref_name == 'main' }} | |
- uses: oxc-project/setup-node@f42e3bda950c7454575e78ee4eaac880a077700c # v1.0.0 | |
if: steps.filter.outputs.src == 'true' | |
- name: Build | |
if: steps.filter.outputs.src == 'true' | |
run: | | |
rustup target add wasm32-wasip1-threads | |
pnpm napi build --target wasm32-wasip1-threads --cwd ./napi/parser | |
pnpm napi build --target wasm32-wasip1-threads --cwd ./napi/transform | |
pnpm napi build --target wasm32-wasip1-threads --cwd ./napi/minify | |
git diff --exit-code # Must commit everything | |
- name: Test wasi in browser | |
if: steps.filter.outputs.src == 'true' | |
working-directory: napi/parser | |
run: | | |
rm -rf *.wasm | |
pnpm exec playwright install chromium | |
pnpm run build-wasi | |
pnpm run build-npm-dir | |
pnpm run test-browser | |
pnpm build-browser-bundle --npmDir npm-dir | |
test-napi: | |
name: Test NAPI | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
id: filter | |
with: | |
predicate-quantifier: "every" | |
filters: | | |
src: | |
- '!crates/oxc_linter/**' | |
- '!crates/oxc_language_server/**' | |
- '!editors/**' | |
- uses: ./.github/actions/clone-submodules | |
if: steps.filter.outputs.src == 'true' | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
if: steps.filter.outputs.src == 'true' | |
with: | |
cache-key: napi | |
save-cache: ${{ github.ref_name == 'main' }} | |
- uses: oxc-project/setup-node@f42e3bda950c7454575e78ee4eaac880a077700c # v1.0.0 | |
if: steps.filter.outputs.src == 'true' | |
- if: steps.filter.outputs.src == 'true' | |
name: Run tests in workspace | |
run: | | |
rustup target add wasm32-wasip1-threads | |
pnpm run build | |
pnpm run test | |
- if: steps.filter.outputs.src == 'true' | |
name: Run e2e tests | |
run: | | |
pnpm install --frozen-lockfile | |
pnpm run test | |
working-directory: tasks/e2e | |
- if: steps.filter.outputs.src == 'true' | |
run: | | |
git diff --exit-code # Must commit everything | |
typos: | |
name: Spell Check | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: crate-ci/typos@b1ae8d918b6e85bd611117d3d9a3be4f903ee5e4 # v1.33.1 | |
with: | |
files: . | |
lint: | |
name: Clippy | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
with: | |
save-cache: ${{ github.ref_name == 'main' }} | |
cache-key: clippy | |
components: clippy | |
- run: cargo lint -- -D warnings | |
- run: cargo lint --profile dev-no-debug-assertions -- -D warnings | |
# Waiting for https://github.com/rust-lang/rust-clippy/pull/13435 | |
- name: Check Char and Byte Offset | |
run: | | |
npm i @ast-grep/cli -g | |
output=$(sg -p '$A.chars().enumerate()' -r '$A.char_indices()' -l rs) | |
echo "Output: $output" | |
if [ -n "$output" ]; then | |
echo "Error: Unexpected output detected" | |
exit 1 | |
fi | |
doc: | |
name: Doc | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
with: | |
cache-key: warm | |
components: rust-docs | |
- run: RUSTDOCFLAGS='-D warnings' cargo doc --no-deps --document-private-items | |
conformance: | |
name: Conformance | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
id: filter | |
with: | |
predicate-quantifier: "every" | |
filters: | | |
src: | |
- '!.github/**' | |
- '!.vscode/**' | |
- '!apps/**' | |
- '!editors/**' | |
- '!napi/**' | |
- '!npm/**' | |
- '!crates/oxc_linter/**' | |
- '!crates/oxc_language_server/**' | |
- '!tasks/**' | |
- uses: ./.github/actions/clone-submodules | |
if: steps.filter.outputs.src == 'true' | |
- uses: oxc-project/setup-node@f42e3bda950c7454575e78ee4eaac880a077700c # v1.0.0 | |
if: steps.filter.outputs.src == 'true' | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
if: steps.filter.outputs.src == 'true' | |
with: | |
cache-key: conformance | |
save-cache: ${{ github.ref_name == 'main' }} | |
tools: just | |
- name: Check Conformance | |
if: steps.filter.outputs.src == 'true' | |
run: | | |
just update-transformer-fixtures | |
just coverage | |
git diff --exit-code | |
minification: | |
name: Minification Size | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
id: filter | |
with: | |
filters: | | |
src: | |
- '.github/workflows/ci.yml' | |
- 'crates/oxc_minifier/**' | |
- 'crates/oxc_codegen/**' | |
- 'tasks/minsize/**' | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
if: steps.filter.outputs.src == 'true' | |
with: | |
cache-key: minsize | |
save-cache: ${{ github.ref_name == 'main' }} | |
- name: Check minification size | |
if: steps.filter.outputs.src == 'true' | |
run: | | |
cargo minsize | |
git diff --exit-code | |
ast_changes: | |
name: AST Changes | |
runs-on: ubuntu-latest | |
steps: | |
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1 | |
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
id: filter | |
with: | |
filters: ".github/generated/ast_changes_watch_list.yml" | |
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0 | |
if: steps.filter.outputs.src == 'true' | |
with: | |
components: rustfmt | |
tools: dprint | |
cache-key: ast_changes | |
save-cache: ${{ github.ref_name == 'main' }} | |
- name: Restore dprint plugin cache | |
uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 | |
with: | |
key: dprint-${{ hashFiles('dprint.json') }} | |
path: ~/.cache/dprint | |
- name: Check AST Changes | |
if: steps.filter.outputs.src == 'true' | |
run: | | |
cargo run -p oxc_ast_tools | |
git diff --exit-code || | |
(echo 'AST changes caused the "generated" code to get outdated. Have you forgotten to run the `just ast` command and/or commit generated codes?' && exit 1) |