name: CI
on:
push:
pull_request:
permissions:
contents: write
pull-requests: read
env:
CARGO_TERM_COLOR: always
CARGO_TARGET_DIR: target
jobs:
detect_changes:
name: Select CLI matrix
runs-on: ubuntu-latest
outputs:
os: ${{ steps.select.outputs.os }}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
fetch-depth: 0
- uses: dorny/paths-filter@d1c1ffe0248fe513906c8e24db8ea791d46f8590
id: changes
with:
filters: |
vm_jit:
- 'src/vm/jit/**'
- 'src/vm/native/**'
- 'src/vm/mod.rs'
- 'src/builtins/runtime/jit.rs'
- 'tests/jit/**'
- 'tests/jit_tests.rs'
- id: select
env:
VM_JIT_CHANGED: ${{ steps.changes.outputs.vm_jit }}
shell: bash
run: |
if [[ "$VM_JIT_CHANGED" == "true" ]]; then
echo 'os=["ubuntu-latest","macos-latest","windows-latest"]' >> "$GITHUB_OUTPUT"
else
echo 'os=["ubuntu-latest"]' >> "$GITHUB_OUTPUT"
fi
rust:
name: Rust lint and tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
path: rustscript
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30
with:
components: rustfmt, clippy
- name: Format check
working-directory: rustscript
run: cargo fmt --all -- --check
- name: pd-vm-nostd tests
working-directory: rustscript
run: cargo test -p pd-vm-nostd
- name: Runtime-only dependency check
working-directory: rustscript
run: cargo check -p pd-vm --no-default-features --features runtime
- name: Clippy
working-directory: rustscript
run: cargo clippy --workspace --all-targets --all-features
- name: Tests
working-directory: rustscript
run: cargo test --workspace
pd-vm-cli:
name: pd-vm CLI (${{ matrix.os }})
needs: detect_changes
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: ${{ fromJSON(needs.detect_changes.outputs.os) }}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
path: rustscript
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30
- name: Build pd-vm CLI
working-directory: rustscript
run: cargo build -p pd-vm --bin pd-vm-run --release
- name: Stage pd-vm CLI artifact
working-directory: rustscript
shell: bash
run: |
mkdir -p dist
suffix=""
if [[ "${{ runner.os }}" == "Windows" ]]; then suffix=".exe"; fi
cp "target/release/pd-vm-run${suffix}" "dist/pd-vm-run-${{ runner.os }}-${{ runner.arch }}${suffix}"
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: pd-vm-cli-${{ runner.os }}-${{ runner.arch }}
path: rustscript/dist/*
- name: Upload pd-vm CLI release asset
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65
with:
files: rustscript/dist/*
vscode-extension:
name: VS Code extension
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30
with:
targets: wasm32-unknown-unknown
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: '22'
- name: Build language service wasm
run: cargo build -p pd-vm-wasm --target wasm32-unknown-unknown --release
- name: Stage language service wasm
shell: bash
run: |
mkdir -p vscode-rustscript/wasm
cp target/wasm32-unknown-unknown/release/pd_vm_wasm.wasm vscode-rustscript/wasm/pd_vm_wasm.wasm
- name: Package VS Code extension
working-directory: vscode-rustscript
run: |
mkdir -p dist
npx --yes @vscode/vsce package --out dist/rustscript-vscode.vsix
- name: Verify VS Code grammar registration
run: python3 scripts/verify_vscode_extension.py --vsix vscode-rustscript/dist/rustscript-vscode.vsix
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: rustscript-vscode-extension
path: vscode-rustscript/dist/*.vsix
- name: Upload VS Code extension release asset
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65
with:
files: vscode-rustscript/dist/*.vsix