Repository navigation
Report extension package sizes without arbitrary publication caps #107
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |