Skip to content

Release LSP

Release LSP #47

Workflow file for this run

name: Release LSP
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * 2-6'
push:
branches:
- main
paths:
- editors/vscode/package.json
jobs:
check:
name: Check version
runs-on: ubuntu-latest
outputs:
# LSP Extension Version
version: ${{ env.version }}
# Version of the Biome binary
biome_version: ${{ env.biome_version }}
prerelease: ${{ env.prerelease }}
nightly: ${{ env.nightly }}
version_changed: ${{ steps.version.outputs.changed }}
steps:
- uses: actions/checkout@v3
- name: Check nightly status
id: nightly
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
run: echo "nightly=true" >> $GITHUB_ENV
- name: Check version changes
uses: EndBug/version-check@v2
if: env.nightly != 'true'
id: version
with:
diff-search: true
file-name: editors/vscode/package.json
- name: Check Biome version changes
uses: EndBug/version-check@v2
if: env.nightly != 'true'
id: biome_version
with:
diff-search: true
file-name: packages/@biomejs/biome/package.json
- name: Set version name
run: |
echo "version=${{ steps.version.outputs.version }}" >> $GITHUB_ENV
echo "biome_version=${{ steps.biome_version.outputs.version }}" >> $GITHUB_ENV
- name: Check prerelease status
id: prerelease
if: env.nightly == 'true' || steps.version.outputs.type == 'prerelease' || steps.version.outputs.type == 'prepatch' || steps.version.outputs.type == 'premajor' || steps.version.outputs.type == 'preminor'
run: |
echo "prerelease=true" >> $GITHUB_ENV
node ./editors/vscode/scripts/update-nightly-version.mjs >> $GITHUB_ENV
echo "biome_version=$(node packages/@biomejs/biome/scripts/update-nightly-version.mjs)" >> $GITHUB_ENV
- name: Check version status
if: steps.version.outputs.changed == 'true'
run: 'echo "Version change found! New version: ${{ steps.version.outputs.version }} (${{ steps.version.outputs.version_type }})"'
- name: Biome Check version status
if: steps.biome_version.outputs.changed == 'true'
run: 'echo "Biome Version change found! New version: ${{ steps.biome_version.outputs.version }} (${{ steps.biome_version.outputs.version_type }})"'
build:
strategy:
matrix:
include:
- os: windows-2022
target: x86_64-pc-windows-msvc
code-target: win32-x64
- os: windows-2022
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
- os: macos-11
target: x86_64-apple-darwin
code-target: darwin-x64
- os: macos-11
target: aarch64-apple-darwin
code-target: darwin-arm64
name: Package ${{ matrix.code-target }}
runs-on: ${{ matrix.os }}
needs: check
env:
version: ${{ needs.check.outputs.version }}
prerelease: ${{ needs.check.outputs.prerelease }}
if: needs.check.outputs.version_changed == 'true' || needs.check.outputs.nightly == 'true'
outputs:
version: ${{ env.version }}
prerelease: ${{ env.prerelease }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install toolchain
uses: moonrepo/setup-rust@v0
with:
targets: ${{ matrix.target }}
- name: Install arm64 toolchain
if: matrix.code-target == 'linux-arm64'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu
- name: Audit crates.io dependencies
if: matrix.code-target == 'linux-x64'
run: cargo audit
# Build the LSP binary
- name: Build binaries
run: cargo build -p rome_cli --release --target ${{ matrix.target }}
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
# Strip all debug symbols from the resulting binaries
RUSTFLAGS: "-C strip=symbols"
BIOME_VERSION: ${{ needs.check.outputs.biome_version }}
- name: Copy LSP binary
if: matrix.os == 'windows-2022'
run: |
mkdir dist
mkdir editors/vscode/server
cp target/${{ matrix.target }}/release/biome.exe editors/vscode/server/biome.exe
- name: Copy LSP binary
if: matrix.os != 'windows-2022'
run: |
mkdir dist
mkdir editors/vscode/server
cp target/${{ matrix.target }}/release/biome editors/vscode/server/biome
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Update package.json version
if: needs.check.outputs.prerelease == 'true'
working-directory: editors/vscode
run: |
node ./scripts/update-nightly-version.mjs >> $GITHUB_ENV
- name: Install VCSE
run: npm i -g @vscode/vsce
- name: Package extension
run: |
npm ci
npm run compile
vsce package -o "../../dist/biome_lsp-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }}
working-directory: editors/vscode
if: needs.check.outputs.prerelease != 'true'
- name: Package extension (pre-release)
run: |
npm ci
npm run compile
vsce package --pre-release -o "../../dist/biome_lsp-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }}
working-directory: editors/vscode
if: needs.check.outputs.prerelease == 'true'
- name: Upload VSCode extension artifact
uses: actions/upload-artifact@v3
with:
name: vscode_packages
path: ./dist/biome_lsp-${{ matrix.code-target }}.vsix
if-no-files-found: error
publish:
name: Publish
runs-on: ubuntu-latest
needs: build
environment: marketplace
permissions:
contents: write
steps:
- uses: actions/checkout@v3
- name: Download extension artifacts
uses: actions/download-artifact@v3
with:
name: vscode_packages
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 18
registry-url: 'https://registry.npmjs.org'
- name: Install VCSE
run: npm i -g @vscode/vsce
- name: Publish extension to Microsoft Marketplace (pre-release)
run: vsce publish --pre-release --packagePath biome_lsp-*.vsix
if: needs.build.outputs.prerelease == 'true'
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
- name: Publish extension to Microsoft Marketplace
run: vsce publish --packagePath biome_lsp-*.vsix
if: needs.build.outputs.prerelease != 'true'
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
- name: Publish extension to Open VSX (pre-release)
run: npx ovsx publish --pre-release --packagePath biome_lsp-*.vsix
if: needs.build.outputs.prerelease == 'true'
env:
OVSX_PAT: ${{ secrets.OVSX_PAT }}
- name: Publish extension to Open VSX
run: npx ovsx publish --packagePath biome_lsp-*.vsix
if: needs.build.outputs.prerelease != 'true'
env:
OVSX_PAT: ${{ secrets.OVSX_PAT }}
- name: Extract changelog
run: |
bash scripts/print-changelog.sh ${{ needs.build.outputs.version }} >| ${{ github.workspace }}/RELEASE_NOTES
- name: Create GitHub release and tag
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
name: VSCode Extension v${{ needs.build.outputs.version }}
tag_name: lsp/v${{ needs.build.outputs.version }}
draft: false
prerelease: ${{ needs.build.outputs.prerelease == 'true' }}
body_path: ${{ github.workspace }}/RELEASE_NOTES
files: |
biome_lsp-*.vsix
fail_on_unmatched_files: true
generate_release_notes: true