Merge pull request #4 from swc-project/main #27
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: | |
pull_request: | |
types: ["opened", "reopened", "synchronize"] | |
push: | |
branches: | |
- main | |
env: | |
CI: 1 | |
CARGO_INCREMENTAL: 0 | |
CARGO_TERM_COLOR: "always" | |
DIFF: 0 | |
# For faster CI | |
RUST_LOG: "off" | |
# https://github.com/actions/setup-node/issues/899#issuecomment-1819151595 | |
SKIP_YARN_COREPACK_CHECK: 1 | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: "${{ github.event_name == 'pull_request' }}" | |
jobs: | |
cargo-fmt: | |
name: Cargo fmt | |
runs-on: ubuntu-latest | |
env: | |
RUST_LOG: "0" | |
steps: | |
- uses: actions/checkout@v4 | |
# We explicitly do this to cache properly. | |
- uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
components: rustfmt | |
- run: cargo fmt --all -- --check | |
cargo-clippy: | |
name: Cargo clippy | |
if: >- | |
${{ !contains(github.event.head_commit.message, 'chore: ') }} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
components: clippy | |
- run: cargo clippy --all --all-targets -- -D warnings | |
cargo-deny: | |
name: Check license of dependencies | |
runs-on: ubuntu-latest | |
if: >- | |
${{ !contains(github.event.head_commit.message, 'chore: ') }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
- name: Install cargo-deny | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: [email protected] | |
- name: Check licenses | |
run: | | |
cargo deny check | |
cargo-check: | |
name: Check | |
runs-on: ${{ matrix.os }} | |
if: >- | |
${{ !contains(github.event.head_commit.message, 'chore: ') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
- macos-latest | |
- windows-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
# We explicitly do this to cache properly. | |
- name: Install Rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
# MSRV is current stable for ES crates and nightly for other languages | |
# toolchain: stable | |
# override: true | |
- run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "18" | |
cache: "yarn" | |
- name: Install node dependencies | |
shell: bash | |
run: | | |
corepack enable | |
yarn | |
# Ensure that all components are compilable. | |
- name: Run cargo check for all targets | |
run: cargo check --all --all-targets | |
test-wasm: | |
name: Test wasm | |
if: >- | |
${{ !contains(github.event.head_commit.message, 'chore: ') }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
pkg: | |
- binding_core_wasm | |
- binding_minifier_wasm | |
- binding_typescript_wasm | |
steps: | |
- uses: actions/checkout@v4 | |
- shell: bash | |
run: corepack enable | |
# We explicitly do this to cache properly. | |
- uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
- name: Patch | |
shell: bash | |
run: | | |
echo '[patch.crates-io]' >> bindings/Cargo.toml | |
./scripts/cargo/patch-section.sh >> bindings/Cargo.toml | |
cd bindings && cargo update -p swc_core -p swc_fast_ts_strip | |
- name: Install wasm-pack | |
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "18" | |
cache: "yarn" | |
- name: Install node dependencies | |
shell: bash | |
run: | | |
corepack enable | |
yarn | |
- name: Test | |
run: | | |
(cd bindings/${{ matrix.pkg }} && ./scripts/test.sh) | |
list-cargo-tests: | |
if: >- | |
${{ !contains(github.event.head_commit.message, 'chore: ') }} | |
name: List crates | |
runs-on: ubuntu-latest | |
outputs: | |
settings: ${{ steps.list-tests.outputs.settings }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/actions/setup-node | |
- name: List crates | |
id: list-tests | |
run: echo "settings=$(npx zx ./scripts/github/get-test-matrix.mjs)" >> $GITHUB_OUTPUT | |
cargo-test: | |
name: Test - ${{ matrix.settings.crate }} - ${{ matrix.settings.os }} | |
runs-on: ${{ matrix.settings.os }} | |
needs: | |
- list-cargo-tests | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: ${{fromJson(needs.list-cargo-tests.outputs.settings)}} | |
steps: | |
- name: Handle line endings | |
shell: bash | |
if: runner.os == 'Windows' | |
run: | | |
git config --system core.autocrlf false | |
git config --system core.eol lf | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- run: corepack enable | |
# Source map format | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "18" | |
cache: "yarn" | |
# We explicitly do this to cache properly. | |
- name: Install Rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
target: wasm32-wasi | |
# MSRV is current stable for ES crates and nightly for other languages | |
# toolchain: stable | |
# override: true | |
- uses: denoland/setup-deno@v1 | |
if: matrix.settings.crate == 'swc_bundler' | |
with: | |
deno-version: v1.x | |
- name: Install node dependencies | |
shell: bash | |
run: | | |
corepack enable | |
yarn | |
# I don't want to think deeply about this | |
yarn global add jest@27 mocha || \ | |
yarn global add jest@27 mocha || \ | |
yarn global add jest@27 mocha || \ | |
yarn global add jest@27 mocha || \ | |
yarn global add jest@27 mocha || \ | |
yarn global add jest@27 mocha || \ | |
yarn global add jest@27 mocha || \ | |
yarn global add jest@27 mocha || true | |
- name: Configure path (windows) | |
shell: bash | |
if: runner.os == 'Windows' | |
run: | | |
echo $(yarn global bin) >> $GITHUB_PATH | |
- name: Verify dependencies | |
shell: bash | |
run: | | |
yarn jest --version && yarn mocha --version | |
- name: Configure execution cache | |
shell: bash | |
run: | | |
mkdir -p .swc-exec-cache | |
echo "SWC_ECMA_TESTING_CACHE_DIR=$(pwd)/.swc-exec-cache" >> $GITHUB_ENV | |
- name: Cache execution results | |
uses: actions/cache@v3 | |
if: ${{ matrix.settings.crate }} == 'swc' || ${{ startsWith(matrix.settings.crate, 'swc_ecma_transforms_') }} | |
with: | |
path: | | |
.swc-exec-cache | |
key: swc-exec-cache-${{ matrix.settings.crate }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
swc-exec-cache-${{ matrix.settings.crate }} | |
- name: Run cargo test | |
if: matrix.settings.crate != 'swc_plugin_runner' && matrix.settings.crate != 'swc_ecma_parser' && matrix.settings.crate != 'swc_ecma_minifier' && matrix.settings.crate != 'swc_core' && matrix.settings.crate != 'swc_ecma_quote' && matrix.settings.crate != 'swc_cli' && matrix.settings.crate != 'binding_core_wasm' | |
run: | | |
cargo test -p ${{ matrix.settings.crate }} | |
- name: Run cargo test (core) | |
if: matrix.settings.crate == 'swc_core' | |
run: | | |
rustup target add wasm32-unknown-unknown | |
cargo test -p swc_core --features ecma_quote --features common --features ecma_utils | |
- name: Run cargo test (binding_core_wasm) | |
if: matrix.settings.crate == 'binding_core_wasm' | |
run: | | |
cargo test --manifest-path ./bindings/binding_core_wasm/Cargo.toml | |
- name: Run cargo test (cli) | |
if: matrix.settings.crate == 'swc_cli' | |
run: | | |
cargo test --manifest-path ./bindings/swc_cli/Cargo.toml --features plugin | |
- name: Run cargo test (plugin) | |
if: matrix.settings.crate == 'swc_plugin_runner' | |
run: | | |
# export CARGO_TARGET_DIR=$(pwd)/target | |
cargo test -p swc_plugin_runner --release --features plugin_transform_schema_v1 --features rkyv-impl --features ecma --features css | |
- name: Run cargo test (swc_ecma_minifier) | |
if: matrix.settings.crate == 'swc_ecma_minifier' | |
run: | | |
cargo test -p swc_ecma_minifier --features concurrent | |
- name: Run cargo test (swc_ecma_parser) | |
if: matrix.settings.crate == 'swc_ecma_parser' | |
run: | | |
cargo test -p swc_ecma_parser --features verify | |
- name: Run cargo test (all features) | |
if: matrix.settings.crate == 'swc_ecma_parser' || matrix.settings.crate == 'swc_ecma_loader' | |
run: | | |
cargo test -p ${{ matrix.settings.crate }} --all-features | |
- name: Run cargo test (transforms with stacker) | |
if: matrix.settings.crate == 'swc_ecma_transforms' | |
run: | | |
cargo test -p ${{ matrix.settings.crate }} --all-features --features swc_ecma_utils/stacker | |
- name: Run cargo test (concurrent) | |
if: runner.os == 'Linux' && matrix.settings.crate != 'swc_ecma_minifier' | |
shell: bash | |
run: | | |
./scripts/github/test-concurrent.sh ${{ matrix.settings.crate }} | |
- name: Install cargo-hack | |
uses: taiki-e/install-action@v2 | |
if: matrix.settings.os == 'ubuntu-latest' | |
with: | |
tool: [email protected] | |
- name: Check compilation | |
if: matrix.settings.os == 'ubuntu-latest' | |
run: | | |
./scripts/github/run-cargo-hack.sh ${{ matrix.settings.crate }} | |
node-test: | |
name: Test node bindings - ${{ matrix.os }} | |
if: >- | |
${{ !contains(github.event.head_commit.message, 'chore: ') }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
# - ubuntu-latest | |
- windows-latest | |
- macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- shell: bash | |
run: corepack enable | |
# We explicitly do this to cache properly. | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
cache: "yarn" | |
- name: Patch | |
shell: bash | |
run: | | |
echo '[patch.crates-io]' >> bindings/Cargo.toml | |
./scripts/cargo/patch-section.sh | |
./scripts/cargo/patch-section.sh >> bindings/Cargo.toml | |
cd bindings && cargo update -p swc_core -p swc_fast_ts_strip | |
- name: Set platform name | |
run: | | |
export NODE_PLATFORM_NAME=$(node -e "console.log(require('os').platform())") | |
echo "PLATFORM_NAME=$NODE_PLATFORM_NAME" >> $GITHUB_ENV | |
shell: bash | |
- name: Install wasm-pack | |
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh | |
- name: Prepare | |
run: | | |
rustup target add wasm32-wasi | |
corepack enable | |
yarn | |
- name: Build | |
working-directory: packages/core | |
run: | | |
yarn build:dev | |
- name: Test | |
working-directory: packages/core | |
run: | | |
yarn test | |
integration-test: | |
name: "Test with @swc/cli" | |
if: >- | |
${{ !contains(github.event.head_commit.message, 'chore: ') }} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- shell: bash | |
run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
cache: "yarn" | |
- name: Set platform name | |
run: | | |
export NODE_PLATFORM_NAME=$(node -e "console.log(require('os').platform())") | |
echo "PLATFORM_NAME=$NODE_PLATFORM_NAME" >> $GITHUB_ENV | |
shell: bash | |
- name: Install wasm-pack | |
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh | |
- name: Patch | |
shell: bash | |
run: | | |
echo '[patch.crates-io]' >> bindings/Cargo.toml | |
./scripts/cargo/patch-section.sh >> bindings/Cargo.toml | |
cd bindings && cargo update -p swc_core -p swc_fast_ts_strip | |
- name: Prepare | |
run: | | |
rustup target add wasm32-wasi | |
corepack enable | |
yarn | |
yarn build:dev | |
# Avoid no space left on device, copyfile | |
cargo clean | |
(cd ./bindings && cargo clean) | |
npm install -g @swc/[email protected] | |
npm link | |
npm install -g file:$PWD | |
- name: Print info | |
run: | | |
npm list -g | |
- name: (swc) three.js | |
run: | | |
# mkdir -p tests/integration/three-js | |
# yarn global add qunit failonlyreporter | |
# Download three.js | |
# git clone --depth 1 https://github.com/mrdoob/three.js.git -b r117 tests/integration/three-js/repo | |
# TODO | |
# swc -C isModule=unknown -C test=\".*.js$\" -C module.type=commonjs --sync tests/integration/three-js/repo/ -d tests/integration/three-js/build/ | |
# TODO | |
# (cd tests/integration/three-js/build/test && qunit -r failonlyreporter unit/three.source.unit.js) | |
# terser: contains with statement in test | |
# Rome.js: I forgot the cause, but it didn't work. | |
# jQuery: browser only (window.document is required) | |
- name: (swc) redux | |
run: | | |
# mkdir -p tests/integration/redux | |
# yarn global add qunit failonlyreporter | |
# Download | |
# git clone --depth 1 https://github.com/reduxjs/redux.git -b v4.1.0 tests/integration/redux/repo | |
# TODO | |
# swc --sync tests/integration/redux/repo/src/ -d tests/integration/redux/repo/lib/ | |
# echo "module.exports=require('./index')" > tests/integration/redux/repo/lib/redux.js | |
# TODO | |
# swc --sync tests/integration/redux/repo/src/ -d tests/integration/redux/repo/test/ | |
# TODO | |
# swc --sync tests/integration/redux/repo/test/ -d tests/integration/redux/repo/test/ | |
# TODO | |
# (cd tests/integration/redux/repo && yarn) | |
# TODO | |
# (cd tests/integration/redux/repo && npx jest '.*.js' --modulePathIgnorePatterns 'typescript') | |
- name: (swcpack) example react app | |
run: | | |
export NODE_OPTIONS="--unhandled-rejections=warn" | |
(cd crates/swc_node_bundler/tests/integration/react && npm install && npx spack) | |
miri: | |
name: Miri | |
runs-on: ubuntu-latest | |
if: >- | |
${{ !contains(github.event.head_commit.message, 'chore: ') }} | |
strategy: | |
fail-fast: false | |
matrix: | |
crate: | |
- better_scoped_tls | |
- string_enum | |
- swc | |
- swc_bundler | |
# - swc_ecma_codegen | |
# - swc_ecma_minifier | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- shell: bash | |
run: corepack enable | |
- uses: actions/setup-node@v4 | |
with: | |
node-version: "18" | |
cache: "yarn" | |
- name: Install node dependencies | |
shell: bash | |
run: | | |
corepack enable | |
yarn | |
- name: Print rustup toolchain version | |
shell: bash | |
id: rustup-version | |
run: | | |
export RUST_TOOLCHAIN="$(cat rust-toolchain | tr -d '\n')" | |
echo "Rust toolchain: $RUST_TOOLCHAIN" | |
echo "RUST_TOOLCHAIN=$RUST_TOOLCHAIN" >> "$GITHUB_OUTPUT" | |
- name: Install | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: "${{ steps.rustup-version.outputs.RUST_TOOLCHAIN }}" | |
components: miri | |
- run: cargo miri test -p ${{ matrix.crate }} --no-fail-fast | |
continue-on-error: true | |
env: | |
MIRIFLAGS: "-Zmiri-disable-isolation" | |
done: | |
needs: | |
- cargo-fmt | |
- cargo-clippy | |
- cargo-deny | |
- cargo-check | |
- test-wasm | |
- cargo-test | |
- node-test | |
- integration-test | |
if: >- | |
${{ always() && !contains(github.event.head_commit.message, 'chore: ') }} | |
runs-on: ubuntu-latest | |
name: Done | |
steps: | |
- run: exit 1 | |
if: ${{ always() && (contains(needs.*.result, 'failure') || contains(needs.*.result, 'skipped') || contains(needs.*.result, 'cancelled')) }} |