Skip to content

Release

Release #176

Workflow file for this run

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-latest-xlarge
# target: aarch64-apple-darwin
# code-target: darwin-arm64
- os: ubuntu-20.04
target: x86_64-unknown-linux-musl
code-target: alpine-x64
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') }}
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
# x64 Alpine builds.
- uses: jirutka/setup-alpine@v1
if: ${{ startsWith(matrix.os, 'ubuntu') && endsWith(matrix.target, 'musl') }}
- 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')) && !(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
# - 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