Skip to content

2025.45.0

2025.45.0 #40

Workflow file for this run

name: Release
on:
workflow_dispatch:
inputs:
prerelease:
description: "Build as prerelease/nightly"
type: boolean
default: false
release:
types: [published]
env:
FETCH_DEPTH: 0
permissions: {}
jobs:
# Phase 1: Generate the Build ID.
# We have to do this ahead-of-time, and store it as a job output,
# to ensure that we use the same Build ID across all build jobs.
build-id:
name: "Build ID"
runs-on: ubuntu-latest
outputs:
release-build-id: ${{ steps.release-build-id-generator.outputs.release-build-id }}
nightly-build-id: ${{ steps.nightly-build-id-generator.outputs.nightly-build-id }}
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: ${{ env.FETCH_DEPTH }}
persist-credentials: false
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: "3.x"
- name: Generate Build ID (release)
if: ${{ (github.event_name == 'workflow_dispatch' && !inputs.prerelease) || (github.event_name == 'release' && !github.event.release.prerelease) }}
id: release-build-id-generator
run: |
release_build_id="$(python -m build.generate_build_id)"
echo "release-build-id: ${release_build_id}"
echo "release-build-id=${release_build_id}" >> "$GITHUB_OUTPUT"
- name: Generate Build ID (nightly)
if: ${{ (github.event_name == 'workflow_dispatch' && inputs.prerelease) || (github.event_name == 'release' && github.event.release.prerelease) }}
id: nightly-build-id-generator
run: |
nightly_build_id="$(python -m build.generate_build_id --pre-release)"
echo "nightly-build-id: ${nightly_build_id}"
echo "nightly-build-id=${nightly_build_id}" >> "$GITHUB_OUTPUT"
# Phase 2: Build the extension on all platforms.
build:
strategy:
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
code-target: win32-x64
- os: windows-latest
target: aarch64-pc-windows-msvc
code-target: win32-arm64
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
code-target: linux-x64
- os: ubuntu-22.04
target: aarch64-unknown-linux-gnu
code-target: linux-arm64
arch: aarch64
- os: ubuntu-22.04
target: arm-unknown-linux-gnueabihf
code-target: linux-armhf
arch: armv7
- os: macos-latest
target: x86_64-apple-darwin
code-target: darwin-x64
- os: macos-14
target: aarch64-apple-darwin
code-target: darwin-arm64
- os: ubuntu-22.04
target: x86_64-unknown-linux-musl
code-target: alpine-x64
arch: x86_64
- os: ubuntu-22.04
target: aarch64-unknown-linux-musl
code-target: alpine-arm64
arch: aarch64
name: Build (${{ matrix.target }})
needs: ["build-id"]
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: ${{ env.FETCH_DEPTH }}
persist-credentials: false
# Install Python dependencies (including ty's native binary).
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: "3.x"
# ARM builds on macOS, which should select ty's universal binary.
- run: arch -arm64 python -m pip install -t ./bundled/libs --implementation py --no-deps --upgrade -r ./requirements.txt
if: ${{ startsWith(matrix.os, 'macos') && startsWith(matrix.target, 'aarch64') }}
# x86_64 builds on macOS, which should select ty's x86_64 binary.
- run: arch -x86_64 python -m pip install -t ./bundled/libs --implementation py --no-deps --upgrade -r ./requirements.txt
if: ${{ startsWith(matrix.os, 'macos') && startsWith(matrix.target, 'x86_64') }}
# ARM builds on Ubuntu, which should select ty's ARM binary.
- uses: uraimo/run-on-arch-action@d94c13912ea685de38fccc1109385b83fd79427d # v3.0.1
if: ${{ startsWith(matrix.os, 'ubuntu') && !startsWith(matrix.target, 'x86_64') && !endsWith(matrix.target, 'musl') }}
with:
arch: ${{ matrix.arch }}
distro: ubuntu20.04
install: |
apt-get update
apt-get install -y --no-install-recommends python3 python3-pip
pip3 install -U pip
run: |
python3 -m pip install -t ./bundled/libs --implementation py --no-deps --upgrade -r ./requirements.txt
# Alpine builds, which should select ty's musl binaries.
- uses: jirutka/setup-alpine@cf5fddcea495dcc19c0f991c6f6fa6a7abf3d50a # v1.3.0
if: ${{ startsWith(matrix.os, 'ubuntu') && endsWith(matrix.target, 'musl') }}
with:
arch: ${{ matrix.arch }}
- shell: alpine.sh --root {0}
if: ${{ startsWith(matrix.os, 'ubuntu') && endsWith(matrix.target, 'musl') }}
run: |
apk add --no-cache python3 py3-pip
python3 -m pip install -t ./bundled/libs --implementation py --no-deps --upgrade -r ./requirements.txt
# Every other architecture, which should defer to `pip` without any special treatment.
- run: python -m pip install -t ./bundled/libs --implementation py --no-deps --upgrade -r ./requirements.txt
if: ${{ !startsWith(matrix.os, 'macos')
&& !(startsWith(matrix.os, 'ubuntu') && !startsWith(matrix.target, 'x86_64') && !endsWith(matrix.target, 'musl'))
&& !(startsWith(matrix.os, 'ubuntu') && endsWith(matrix.target, 'musl')) }}
# Install Node.
- name: Install Node.js
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: 22
# Install Node dependencies.
- run: npm ci
# Set the Build ID.
- name: Set Build ID (release)
if: ${{ (github.event_name == 'workflow_dispatch' && !inputs.prerelease) || (github.event_name == 'release' && !github.event.release.prerelease) }}
shell: bash
run: |
python -m build.update_ext_version --build-id "${BUILD_ID}" --for-publishing
env:
BUILD_ID: ${{ needs.build-id.outputs.release-build-id }}
- name: Set Build ID (nightly)
if: ${{ (github.event_name == 'workflow_dispatch' && inputs.prerelease) || (github.event_name == 'release' && github.event.release.prerelease) }}
shell: bash
run: |
python -m build.update_ext_version --build-id "${BUILD_ID}" --for-publishing --pre-release
env:
BUILD_ID: ${{ needs.build-id.outputs.nightly-build-id }}
# Build the extension.
- name: Package Extension (release)
if: ${{ (github.event_name == 'workflow_dispatch' && !inputs.prerelease) || (github.event_name == 'release' && !github.event.release.prerelease) }}
shell: bash
run: npx vsce package -o "./dist/ty-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }}
- name: Package Extension (nightly)
if: ${{ (github.event_name == 'workflow_dispatch' && inputs.prerelease) || (github.event_name == 'release' && github.event.release.prerelease) }}
shell: bash
run: npx vsce package -o "./dist/ty-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }} --pre-release
# Upload the extension.
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: dist-${{ matrix.target }}
path: ./dist
# Phase 3: Publish the built extension to the Marketplace.
publish-code-marketplace:
name: "Publish (Code Marketplace)"
needs: ["build"]
runs-on: ubuntu-latest
steps:
- name: Install Nodejs
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: 22
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: ${{ env.FETCH_DEPTH }}
persist-credentials: false
# Download all built artifacts.
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-aarch64-apple-darwin
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-x86_64-apple-darwin
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-x86_64-unknown-linux-gnu
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-aarch64-unknown-linux-gnu
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-arm-unknown-linux-gnueabihf
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-x86_64-pc-windows-msvc
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-aarch64-pc-windows-msvc
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-x86_64-unknown-linux-musl
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-aarch64-unknown-linux-musl
path: dist
- run: ls -al ./dist
# Install Node dependencies.
- run: npm ci
# Publish to the Code Marketplace.
- name: Publish Extension (Code Marketplace, release)
if: ${{ (github.event_name == 'workflow_dispatch' && !inputs.prerelease) || (github.event_name == 'release' && !github.event.release.prerelease) }}
run: npx vsce publish --pat ${{ secrets.MARKETPLACE_TOKEN }} --packagePath ./dist/ty-*.vsix
- name: Publish Extension (Code Marketplace, nightly)
if: ${{ (github.event_name == 'workflow_dispatch' && inputs.prerelease) || (github.event_name == 'release' && github.event.release.prerelease) }}
run: npx vsce publish --pat ${{ secrets.MARKETPLACE_TOKEN }} --packagePath ./dist/ty-*.vsix --pre-release
publish-openvsx:
name: "Publish (OpenVSX)"
needs: ["build"]
runs-on: ubuntu-latest
steps:
- name: Install Nodejs
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with:
node-version: 22
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
fetch-depth: ${{ env.FETCH_DEPTH }}
persist-credentials: false
# Download all built artifacts.
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-aarch64-apple-darwin
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-x86_64-apple-darwin
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-x86_64-unknown-linux-gnu
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-aarch64-unknown-linux-gnu
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-arm-unknown-linux-gnueabihf
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-x86_64-pc-windows-msvc
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-aarch64-pc-windows-msvc
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-x86_64-unknown-linux-musl
path: dist
- uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: dist-aarch64-unknown-linux-musl
path: dist
- run: ls -al ./dist
# Install Node dependencies.
- run: npm ci
# Publish to OpenVSX.
- name: Publish Extension (OpenVSX, release)
if: ${{ (github.event_name == 'workflow_dispatch' && !inputs.prerelease) || (github.event_name == 'release' && !github.event.release.prerelease) }}
run: npx ovsx publish --pat ${{ secrets.OPENVSX_TOKEN }} --packagePath ./dist/ty-*.vsix
timeout-minutes: 2
- name: Publish Extension (OpenVSX, nightly)
if: ${{ (github.event_name == 'workflow_dispatch' && inputs.prerelease) || (github.event_name == 'release' && github.event.release.prerelease) }}
run: npx ovsx publish --pat ${{ secrets.OPENVSX_TOKEN }} --packagePath ./dist/ty-*.vsix --pre-release
timeout-minutes: 2