2024.14.0 #191
Workflow file for this run
This file contains 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@v3 | |
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-20.04 | |
target: x86_64-unknown-linux-gnu | |
code-target: linux-x64 | |
- os: ubuntu-20.04 | |
target: aarch64-unknown-linux-gnu | |
code-target: linux-arm64 | |
arch: aarch64 | |
- os: ubuntu-20.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-20.04 | |
target: x86_64-unknown-linux-musl | |
code-target: alpine-x64 | |
arch: x86_64 | |
- os: ubuntu-20.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@v3 | |
with: | |
fetch-depth: ${{ env.FETCH_DEPTH }} | |
# Install Python dependencies (including Ruff's native binary). | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
# ARM builds on macOS, which should select Ruff'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 Ruff'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 Ruff'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 Ruff'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@v3 | |
with: | |
node-version: 18 | |
# 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/ruff-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }} | |
- name: Package Extension (nightly) | |
if: "!startsWith(github.ref, 'refs/tags/')" | |
run: npx vsce package -o "./dist/ruff-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }} --pre-release | |
# Upload the extension. | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dist-${{ matrix.target }} | |
path: ./dist | |
# Phase 3: Publish the built extension to the Marketplace. | |
publish: | |
name: "Publish" | |
needs: ["build"] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Install Nodejs | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: ${{ env.FETCH_DEPTH }} | |
# Download all built artifacts. | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist-aarch64-apple-darwin | |
path: dist | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist-x86_64-apple-darwin | |
path: dist | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist-x86_64-unknown-linux-gnu | |
path: dist | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist-aarch64-unknown-linux-gnu | |
path: dist | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist-arm-unknown-linux-gnueabihf | |
path: dist | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist-x86_64-pc-windows-msvc | |
path: dist | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist-aarch64-pc-windows-msvc | |
path: dist | |
- uses: actions/download-artifact@v3 | |
with: | |
name: dist-x86_64-unknown-linux-musl | |
path: dist | |
- uses: actions/download-artifact@v3 | |
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/ruff-*.vsix | |
- name: Publish Extension (Code Marketplace, nightly) | |
if: "!startsWith(github.ref, 'refs/tags/')" | |
run: npx vsce publish --pat ${{ secrets.MARKETPLACE_TOKEN }} --packagePath ./dist/ruff-*.vsix --pre-release | |
# Publish to OpenVSX. | |
- name: Publish Extension (OpenVSX, release) | |
if: "startsWith(github.ref, 'refs/tags/')" | |
run: npx ovsx publish --pat ${{ secrets.OPENVSX_TOKEN }} --packagePath ./dist/ruff-*.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/ruff-*.vsix --pre-release | |
timeout-minutes: 2 |