Skip to content

Record promoted optimizer costs and validation #102

Record promoted optimizer costs and validation

Record promoted optimizer costs and validation #102

Workflow file for this run

name: Check
on:
pull_request:
push:
branches:
- master
- main
permissions:
contents: read
concurrency:
group: check-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
WASM_TOOLS_VERSION: 1.201.0
jobs:
repository:
name: Compiler, tooling, Wasm, and runtime
runs-on: windows-latest
timeout-minutes: 45
steps:
- name: Check out the repository
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
targets: wasm32-unknown-unknown
- name: Install Node.js
uses: actions/setup-node@v7
with:
node-version: 24
cache: npm
cache-dependency-path: editors/vscode/package-lock.json
- name: Install extension dependencies
working-directory: editors/vscode
run: npm ci
- name: Install WebAssembly validation tools
shell: pwsh
env:
WASM_TOOLS_SHA256: 9b80cf19d25603da8a8a0814c0d2bbfdc5b5fbd70d399c013237ed64661756a7
run: |
$archive = Join-Path $env:RUNNER_TEMP "wasm-tools.zip"
$destination = Join-Path $env:RUNNER_TEMP "wasm-tools"
$url = "https://github.com/bytecodealliance/wasm-tools/releases/download/v$env:WASM_TOOLS_VERSION/wasm-tools-$env:WASM_TOOLS_VERSION-x86_64-windows.zip"
Invoke-WebRequest -Uri $url -OutFile $archive
$actualHash = (Get-FileHash -Algorithm SHA256 $archive).Hash.ToLowerInvariant()
if ($actualHash -ne $env:WASM_TOOLS_SHA256) {
throw "wasm-tools archive checksum mismatch: $actualHash"
}
Expand-Archive -Path $archive -DestinationPath $destination
$binaryDirectory = Join-Path $destination "wasm-tools-$env:WASM_TOOLS_VERSION-x86_64-windows"
$binaryDirectory | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
& (Join-Path $binaryDirectory "wasm-tools.exe") --version
- name: Reject tracked compiler artifacts
shell: pwsh
run: |
# Textual .wat files under test/fixtures are hand-written test inputs.
$artifacts = git ls-files -- '*.wasm' '*.wat' ':(exclude)editors/vscode/test/fixtures/*.wat'
if ($artifacts) {
Write-Error "Generated WebAssembly artifacts must not be tracked:`n$artifacts"
}
- name: Run the repository verification matrix
run: cargo xtask check
vscode-native:
name: Native artifacts (${{ matrix.platform }})
runs-on: ${{ matrix.runner }}
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
include:
- platform: windows-x64
runner: windows-latest
archive: splitscript-windows-x64.zip
- platform: linux-x64
runner: ubuntu-latest
archive: splitscript-linux-x64.tar.gz
- platform: linux-arm64
runner: ubuntu-24.04-arm
archive: splitscript-linux-arm64.tar.gz
- platform: macos-x64
runner: macos-15-intel
archive: splitscript-macos-x64.tar.gz
- platform: macos-arm64
runner: macos-15
archive: splitscript-macos-arm64.tar.gz
steps:
- name: Check out the repository
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install Node.js
uses: actions/setup-node@v7
with:
node-version: 24
- name: Install WebAssembly validation tools
uses: bytecodealliance/actions/wasm-tools/setup@v1
with:
version: ${{ env.WASM_TOOLS_VERSION }}
- name: Test the native process bridge
run: cargo test --package splitscript-process-native
- name: Build the native process bridge
run: node editors/vscode/scripts/build-native.mjs
- name: Probe process discovery and memory access
run: node editors/vscode/scripts/probe-native.mjs
- name: Run native compiler and runtime conformance
env:
SPLITSCRIPT_GIT_REVISION: ${{ github.sha }}
run: cargo xtask conformance
- name: Smoke-test and package the native tools
run: node scripts/package-native.mjs ${{ matrix.platform }}
- name: Upload the native process bridge
uses: actions/upload-artifact@v7
with:
name: vscode-native-${{ matrix.platform }}
path: editors/vscode/dist/native
if-no-files-found: error
- name: Upload the native CLI and language server
uses: actions/upload-artifact@v7
with:
name: splitscript-tools-${{ matrix.platform }}
path: target/release-assets/${{ matrix.archive }}
if-no-files-found: error
vscode-package:
name: Assemble VS Code extension
needs:
- repository
- vscode-native
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v7
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Install Node.js
uses: actions/setup-node@v7
with:
node-version: 24
cache: npm
cache-dependency-path: editors/vscode/package-lock.json
- name: Install extension dependencies
working-directory: editors/vscode
run: npm ci
- name: Download native process bridges
uses: actions/download-artifact@v7
with:
pattern: vscode-native-*
path: ${{ runner.temp }}/splitscript-native
merge-multiple: true
- name: Package the extension
working-directory: editors/vscode
env:
SPLITSCRIPT_NATIVE_ARTIFACTS: ${{ runner.temp }}/splitscript-native
run: |
node scripts/build.mjs --production --output ../../target/vscode-package/dist
node scripts/probe-package.mjs ../../target/vscode-package/dist splitscript-latest.vsix --pre-release
- name: Upload the assembled VSIX
uses: actions/upload-artifact@v7
with:
name: splitscript-vscode-extension
path: editors/vscode/splitscript-latest.vsix
if-no-files-found: error
release:
name: Publish latest release
needs:
- vscode-native
- vscode-package
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Check out the repository
uses: actions/checkout@v7
- name: Download the assembled VSIX
uses: actions/download-artifact@v7
with:
name: splitscript-vscode-extension
path: target/release-assets
- name: Download the native CLI and language server archives
uses: actions/download-artifact@v7
with:
pattern: splitscript-tools-*
path: target/release-assets
merge-multiple: true
- name: Publish the latest release
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
cd target/release-assets
assets=(
splitscript-latest.vsix
splitscript-windows-x64.zip
splitscript-linux-x64.tar.gz
splitscript-linux-arm64.tar.gz
splitscript-macos-x64.tar.gz
splitscript-macos-arm64.tar.gz
)
for asset in "${assets[@]}"; do
test -s "$asset"
done
sha256sum "${assets[@]}" > SHA256SUMS
assets+=(SHA256SUMS)
title="Latest SplitScript"
notes="Continuously updated from the latest verified commit on master. Includes the VS Code extension as a Marketplace-compatible pre-release and native splitc/splitls archives. This early build may introduce breaking language changes."
git tag --force latest "$GITHUB_SHA"
git push --force origin refs/tags/latest
if gh release view latest >/dev/null 2>&1; then
gh release edit latest --title "$title" --notes "$notes" --latest
gh release upload latest "${assets[@]}" --clobber
else
gh release create latest "${assets[@]}" --verify-tag --title "$title" --notes "$notes" --latest
fi