This repository has been archived by the owner on Aug 31, 2023. It is now read-only.
Release LSP #348
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 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 |