Skip to content

Report extension package sizes without arbitrary publication caps #107

Report extension package sizes without arbitrary publication caps

Report extension package sizes without arbitrary publication caps #107

Workflow file for this run

name: Check
on:
pull_request:
push:
branches:
- master
- main
tags:
- 'v*'
permissions:
contents: read
concurrency:
group: check-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/') }}
env:
WASM_TOOLS_VERSION: 1.201.0
jobs:
distribution:
name: Determine distribution version and channel
runs-on: ubuntu-latest
outputs:
version: ${{ steps.metadata.outputs.version }}
pre_release: ${{ steps.metadata.outputs.pre_release }}
marketplace: ${{ steps.metadata.outputs.marketplace }}
vsix_name: ${{ steps.metadata.outputs.vsix_name }}
steps:
- name: Check out the repository and release tags
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Install Node.js
uses: actions/setup-node@v7
with:
node-version: 24
- name: Resolve distribution metadata
id: metadata
run: node editors/vscode/scripts/release-metadata.mjs
repository:
name: Compiler, tooling, Wasm, and runtime
needs: distribution
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 }})
needs: distribution
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:
- distribution
- 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
SPLITSCRIPT_GIT_REVISION: ${{ github.sha }}
SPLITSCRIPT_RELEASE_VERSION: ${{ needs.distribution.outputs.version }}
SPLITSCRIPT_PRE_RELEASE: ${{ needs.distribution.outputs.pre_release }}
SPLITSCRIPT_MARKETPLACE_RELEASE: ${{ needs.distribution.outputs.marketplace }}
run: |
node scripts/build.mjs --production --output ../../target/vscode-package/dist
node scripts/probe-package.mjs ../../target/vscode-package/dist ${{ needs.distribution.outputs.vsix_name }}
- name: Upload the assembled VSIX
uses: actions/upload-artifact@v7
with:
name: splitscript-vscode-extension
path: |
editors/vscode/${{ needs.distribution.outputs.vsix_name }}
editors/vscode/${{ needs.distribution.outputs.vsix_name }}.json
if-no-files-found: error
release:
name: Publish GitHub release assets
needs:
- distribution
- vscode-native
- vscode-package
if: github.event_name == 'push' && github.repository == 'LiveSplit/SplitScript' && needs.distribution.outputs.marketplace == 'true'
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 }}
VSIX_NAME: ${{ needs.distribution.outputs.vsix_name }}
RELEASE_VERSION: ${{ needs.distribution.outputs.version }}
PRE_RELEASE: ${{ needs.distribution.outputs.pre_release }}
run: |
cd target/release-assets
assets=(
"$VSIX_NAME"
"$VSIX_NAME.json"
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)
if [[ "$PRE_RELEASE" == "false" ]]; then
if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then
gh release upload "$GITHUB_REF_NAME" "${assets[@]}" --clobber
else
gh release create "$GITHUB_REF_NAME" "${assets[@]}" --verify-tag --generate-notes --title "SplitScript $RELEASE_VERSION"
fi
exit 0
fi
title="Latest SplitScript"
notes="Continuously updated from the latest verified commit on master. Includes the VS Code pre-release extension ($RELEASE_VERSION) 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" --prerelease --latest=false
gh release upload latest "${assets[@]}" --clobber
else
gh release create latest "${assets[@]}" --verify-tag --title "$title" --notes "$notes" --prerelease --latest=false
fi