pd-vm 0.22.6

RustScript bytecode compiler and VM
Documentation
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