Release #33
Workflow file for this run
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
| # Modified from original work: | |
| # MIT License | |
| # | |
| # Copyright (c) 2022 Charles Marsh | |
| # | |
| # Permission is hereby granted, free of charge, to any person obtaining a copy | |
| # of this software and associated documentation files (the "Software"), to deal | |
| # in the Software without restriction, including without limitation the rights | |
| # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| # copies of the Software, and to permit persons to whom the Software is | |
| # furnished to do so, subject to the following conditions: | |
| # | |
| # The above copyright notice and this permission notice shall be included in all | |
| # copies or substantial portions of the Software. | |
| # | |
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
| # SOFTWARE. | |
| # | |
| # Modifications made by Karen Petrosyan, 2025. | |
| 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@v4 | |
| with: | |
| fetch-depth: ${{ env.FETCH_DEPTH }} | |
| - uses: actions/setup-python@v5 | |
| 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@v4 | |
| with: | |
| fetch-depth: ${{ env.FETCH_DEPTH }} | |
| # Install Python dependencies (including Uv's native binary). | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.x" | |
| # ARM builds on macOS, which should select Uv'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 Uv'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 Uv's ARM binary. | |
| - uses: uraimo/run-on-arch-action@v2 | |
| 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 Uv's musl binaries. | |
| - uses: jirutka/setup-alpine@v1 | |
| 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@v4 | |
| 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/uv-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }} | |
| - name: Package Extension (nightly) | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| run: npx vsce package -o "./dist/uv-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }} --pre-release | |
| # Upload the extension. | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| 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@v4 | |
| with: | |
| node-version: 22 | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: ${{ env.FETCH_DEPTH }} | |
| # Download all built artifacts. | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: dist-aarch64-apple-darwin | |
| path: dist | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: dist-x86_64-apple-darwin | |
| path: dist | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: dist-x86_64-unknown-linux-gnu | |
| path: dist | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: dist-aarch64-unknown-linux-gnu | |
| path: dist | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: dist-arm-unknown-linux-gnueabihf | |
| path: dist | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: dist-x86_64-pc-windows-msvc | |
| path: dist | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: dist-aarch64-pc-windows-msvc | |
| path: dist | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: dist-x86_64-unknown-linux-musl | |
| path: dist | |
| - uses: actions/download-artifact@v4 | |
| 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/uv-*.vsix | |
| - name: Publish Extension (Code Marketplace, nightly) | |
| if: "!startsWith(github.ref, 'refs/tags/')" | |
| run: npx vsce publish --pat ${{ secrets.MARKETPLACE_TOKEN }} --packagePath ./dist/uv-*.vsix --pre-release |