Release #28
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: Release | |
| on: | |
| workflow_dispatch: | |
| release: | |
| types: [published] | |
| env: | |
| FETCH_DEPTH: 0 | |
| 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.BUILD_ID }} | |
| NIGHTLY_BUILD_ID: ${{ steps.nightly-build-id-generator.outputs.BUILD_ID }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| fetch-depth: ${{ env.FETCH_DEPTH }} | |
| - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 | |
| with: | |
| python-version: "3.x" | |
| - name: Generate Build ID (release) | |
| if: "startsWith(github.ref, 'refs/tags/')" | |
| id: release-build-id-generator | |
| run: | | |
| export BUILD_ID=$(python -m build.generate_build_id) | |
| echo "BUILD_ID: ${BUILD_ID}" | |
| echo "BUILD_ID=${BUILD_ID}" >> $GITHUB_OUTPUT | |
| - name: Generate Build ID (nightly) | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| id: nightly-build-id-generator | |
| run: | | |
| export BUILD_ID=$(python -m build.generate_build_id --pre-release) | |
| echo "BUILD_ID: ${BUILD_ID}" | |
| echo "BUILD_ID=${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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| fetch-depth: ${{ env.FETCH_DEPTH }} | |
| # Install Python dependencies (including ty's native binary). | |
| - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.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@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | |
| with: | |
| node-version: 22 | |
| # Install Node dependencies. | |
| - run: npm ci | |
| # Set the Build ID. | |
| - name: Set Build ID (release) | |
| if: "startsWith(github.ref, 'refs/tags/')" | |
| run: | | |
| python -m build.update_ext_version --build-id ${{ needs.build-id.outputs.RELEASE_BUILD_ID }} --for-publishing | |
| - name: Set Build ID (nightly) | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| run: | | |
| python -m build.update_ext_version --build-id ${{ needs.build-id.outputs.NIGHTLY_BUILD_ID }} --for-publishing --pre-release | |
| # Build the extension. | |
| - name: Package Extension (release) | |
| if: "startsWith(github.ref, 'refs/tags/')" | |
| run: npx vsce package -o "./dist/ty-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }} | |
| - name: Package Extension (nightly) | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| 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@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | |
| with: | |
| node-version: 22 | |
| - name: Checkout repository | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| fetch-depth: ${{ env.FETCH_DEPTH }} | |
| # Download all built artifacts. | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-aarch64-apple-darwin | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-x86_64-apple-darwin | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-x86_64-unknown-linux-gnu | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-aarch64-unknown-linux-gnu | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-arm-unknown-linux-gnueabihf | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-x86_64-pc-windows-msvc | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-aarch64-pc-windows-msvc | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-x86_64-unknown-linux-musl | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.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: "startsWith(github.ref, 'refs/tags/')" | |
| run: npx vsce publish --pat ${{ secrets.MARKETPLACE_TOKEN }} --packagePath ./dist/ty-*.vsix | |
| - name: Publish Extension (Code Marketplace, nightly) | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| 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@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 | |
| with: | |
| node-version: 22 | |
| - name: Checkout repository | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| fetch-depth: ${{ env.FETCH_DEPTH }} | |
| # Download all built artifacts. | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-aarch64-apple-darwin | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-x86_64-apple-darwin | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-x86_64-unknown-linux-gnu | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-aarch64-unknown-linux-gnu | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-arm-unknown-linux-gnueabihf | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-x86_64-pc-windows-msvc | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-aarch64-pc-windows-msvc | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 | |
| with: | |
| name: dist-x86_64-unknown-linux-musl | |
| path: dist | |
| - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.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: "startsWith(github.ref, 'refs/tags/')" | |
| run: npx ovsx publish --pat ${{ secrets.OPENVSX_TOKEN }} --packagePath ./dist/ty-*.vsix | |
| timeout-minutes: 2 | |
| - name: Publish Extension (OpenVSX, nightly) | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| run: npx ovsx publish --pat ${{ secrets.OPENVSX_TOKEN }} --packagePath ./dist/ty-*.vsix --pre-release | |
| timeout-minutes: 2 |