Release #156
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@v4 | |
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-11 | |
target: x86_64-apple-darwin | |
code-target: darwin-x64 | |
- os: macos-11 | |
target: aarch64-apple-darwin | |
code-target: darwin-arm64 | |
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@v4 | |
with: | |
python-version: "3.x" | |
- run: python -m pip install -t ./bundled/libs --implementation py --no-deps --upgrade -r ./requirements.txt | |
if: ${{ !startsWith(matrix.os, 'ubuntu') || startsWith(matrix.target, 'x86_64') }} | |
- 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 | |
# 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 |