name: CI
on:
push:
pull_request:
permissions:
contents: write
env:
CARGO_TERM_COLOR: always
CARGO_TARGET_DIR: target
jobs:
rust:
name: Rust lint and tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
path: rustscript
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
targets: thumbv6m-none-eabi
- name: Format check
working-directory: rustscript
run: cargo fmt --all -- --check
- name: pd-vm-nostd RP2040 check
working-directory: rustscript
run: cargo check -p pd-vm-nostd --target thumbv6m-none-eabi
- 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 }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
path: rustscript
- uses: dtolnay/rust-toolchain@stable
- 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@v4
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@v2
with:
files: rustscript/dist/*
vscode-extension:
name: VS Code extension
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- uses: actions/setup-node@v4
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@v4
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@v2
with:
files: vscode-rustscript/dist/*.vsix