Skip to content
This repository has been archived by the owner on Aug 31, 2023. It is now read-only.

Release LSP

Release LSP #343

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 Rome binary
rome_version: ${{ env.rome_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@v1
if: env.nightly != 'true'
id: version
with:
diff-search: true
file-name: editors/vscode/package.json
- name: Check Rome version changes
uses: EndBug/version-check@v1
if: env.nightly != 'true'
id: rome_version
with:
diff-search: true
file-name: npm/rome/package.json
- name: Set version name
run: |
echo "version=${{ steps.version.outputs.version }}" >> $GITHUB_ENV
echo "rome_version=${{ steps.rome_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 "rome_version=$(node ./npm/rome/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: Rome Check version status
if: steps.rome_version.outputs.changed == 'true'
run: 'echo "Rome Version change found! New version: ${{ steps.rome_version.outputs.version }} (${{ steps.rome_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
with:
fetch-depth: 1
- 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"
ROME_VERSION: ${{ needs.check.outputs.rome_version }}
- name: Copy LSP binary
if: matrix.os == 'windows-2022'
run: |
mkdir dist
mkdir editors/vscode/server
cp target/${{ matrix.target }}/release/rome.exe editors/vscode/server/rome.exe
- name: Copy LSP binary
if: matrix.os != 'windows-2022'
run: |
mkdir dist
mkdir editors/vscode/server
cp target/${{ matrix.target }}/release/rome editors/vscode/server/rome
- 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: Package extension
run: |
npm ci
npm run compile
npx vsce package -o "../../dist/rome_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
npx vsce package --pre-release -o "../../dist/rome_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/rome_lsp-${{ matrix.code-target }}.vsix
if-no-files-found: error
publish:
name: Publish
runs-on: ubuntu-latest
needs: build
environment: marketplace
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: Publish extension to Microsoft Marketplace (pre-release)
run: npx vsce publish --pre-release --packagePath rome_lsp-*.vsix
if: needs.build.outputs.prerelease == 'true'
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
- name: Publish extension to Microsoft Marketplace
run: npx vsce publish --packagePath rome_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 rome_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 rome_lsp-*.vsix
if: needs.build.outputs.prerelease != 'true'
env:
OVSX_PAT: ${{ secrets.OVSX_PAT }}
- 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' }}
files: |
rome_lsp-*.vsix
fail_on_unmatched_files: true
generate_release_notes: true