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

Commit

Permalink
chore(ci): split the release workflow between the vscode extension an…
Browse files Browse the repository at this point in the history
…d CLI package (#2495)

* chore(ci): split the release workflow between the vscode extension and CLI package

* bump the version number for the CLI package

* use the version number of the npm package in the release builds of the CLI binary
  • Loading branch information
leops committed Apr 27, 2022
1 parent 97fc6b7 commit 41634a0
Show file tree
Hide file tree
Showing 4 changed files with 195 additions and 47 deletions.
182 changes: 182 additions & 0 deletions .github/workflows/release_cli.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
name: Release CLI
on:
workflow_dispatch:
# schedule:
# - cron: '0 0 * * 2-6'
push:
branches:
- main
paths:
- npm/rome/package.json

jobs:
check:
name: Check version
runs-on: ubuntu-latest
outputs:
version: ${{ env.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: npm/rome/package.json

- name: Set version name
run: echo "version=${{ steps.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

- 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 }})"'

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
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 Rust toolchain
run: rustup target add ${{ 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 CLI 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
# Perform full Link-Time Optimizations
CARGO_PROFILE_RELEASE_LTO: "true"
# Strip all debug symbols from the resulting binaries
RUSTFLAGS: "-C strip=symbols"
# Inline the version of the npm package in the CLI binary
ROME_VERSION: ${{ env.version }}

# Copy the CLI binary and rename it to include the name of the target platform
- name: Copy CLI binary
if: matrix.os == 'windows-2022'
run: |
mkdir dist
cp target/${{ matrix.target }}/release/rome.exe ./dist/rome-${{ matrix.code-target }}.exe
- name: Copy CLI binary
if: matrix.os != 'windows-2022'
run: |
mkdir dist
cp target/${{ matrix.target }}/release/rome ./dist/rome-${{ matrix.code-target }}
# Upload the CLI binary as a build artifact
- name: Upload CLI artifact
uses: actions/upload-artifact@v3
with:
name: cli
path: ./dist/rome-*
if-no-files-found: error

- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 14.x

- name: Set release infos
run: |
echo "version=${{ needs.check.outputs.version }}" >> $GITHUB_ENV
echo "prerelease=${{ needs.check.outputs.prerelease }}" >> $GITHUB_ENV
publish:
name: Publish
runs-on: ubuntu-latest
needs: build
environment: marketplace
steps:
- uses: actions/checkout@v3

- name: Download CLI artifacts
uses: actions/download-artifact@v3
with:
name: cli

- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 14.x
registry-url: 'https://registry.npmjs.org'

- name: Generate npm packages
run: node npm/rome/scripts/generate-packages.mjs

- name: Publish npm packages
# For now always publish the CLI to the "next" tag
run: for package in npm/*; do npm publish $package --tag next --access public; done
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}

- name: Create GitHub release and tag
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
name: CLI v${{ needs.build.outputs.version }}
tag_name: cli/v${{ needs.build.outputs.version }}
draft: false
prerelease: ${{ needs.build.outputs.prerelease == 'true' }}
files: |
rome-*
fail_on_unmatched_files: true
generate_release_notes: true
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Release
name: Release LSP
on:
workflow_dispatch:
# schedule:
Expand Down Expand Up @@ -100,36 +100,16 @@ jobs:
if: matrix.code-target == 'linux-x64'
run: cargo audit

# Build the LSP and CLI binaries
# Build the LSP binary
- name: Build binaries
run: cargo build -p rome_lsp -p rome_cli --release --target ${{ matrix.target }}
run: cargo build -p rome_lsp --release --target ${{ matrix.target }}
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
# Perform full Link-Time Optimizations
CARGO_PROFILE_RELEASE_LTO: "true"
# Strip all debug symbols from the resulting binaries
RUSTFLAGS: "-C strip=symbols"

# Copy the CLI binary and rename it to include the name of the target platform
- name: Copy CLI binary
if: matrix.os == 'windows-2022'
run: |
mkdir dist
cp target/${{ matrix.target }}/release/rome.exe ./dist/rome-${{ matrix.code-target }}.exe
- name: Copy CLI binary
if: matrix.os != 'windows-2022'
run: |
mkdir dist
cp target/${{ matrix.target }}/release/rome ./dist/rome-${{ matrix.code-target }}
# Upload the CLI binary as a build artifact
- name: Upload CLI artifact
uses: actions/upload-artifact@v3
with:
name: cli
path: ./dist/rome-*
if-no-files-found: error

- name: Copy LSP binary
if: matrix.os == 'windows-2022'
run: |
Expand Down Expand Up @@ -188,10 +168,6 @@ jobs:
steps:
- uses: actions/checkout@v3

- name: Download CLI artifacts
uses: actions/download-artifact@v3
with:
name: cli
- name: Download extension artifacts
uses: actions/download-artifact@v3
with:
Expand All @@ -203,15 +179,6 @@ jobs:
node-version: 14.x
registry-url: 'https://registry.npmjs.org'

- name: Generate npm packages
run: node npm/rome/scripts/generate-packages.mjs

- name: Publish npm packages
# For now always publish the CLI to the "next" tag
run: for package in npm/*; do npm publish $package --tag next --access public; done
env:
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}

- name: Publish extension (pre-release)
run: npx vsce publish --pre-release --packagePath rome_lsp-*.vsix
if: needs.build.outputs.prerelease == 'true'
Expand All @@ -228,12 +195,11 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
name: v${{ needs.build.outputs.version }}
tag_name: v${{ needs.build.outputs.version }}
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
rome-*
fail_on_unmatched_files: true
generate_release_notes: true
14 changes: 7 additions & 7 deletions crates/rome_cli/src/commands/help.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
use crate::Termination;

const MAIN: &str = concat!(
"Rome v",
env!("CARGO_PKG_VERSION"),
"
const MAIN_HEAD: &str = "Rome v";
const MAIN_BODY: &str = "
Available commands:
- format
- help
",
);
";

const FORMAT: &str = "Rome Formatter
Expand All @@ -30,7 +27,10 @@ OPTIONS:
pub(crate) fn help(command: Option<&str>) -> Result<(), Termination> {
match command {
Some("help") | None => {
print!("{MAIN}");
print!(
"{MAIN_HEAD}{}{MAIN_BODY}",
option_env!("ROME_VERSION").unwrap_or(env!("CARGO_PKG_VERSION"))
);
Ok(())
}
Some("format") => {
Expand Down
2 changes: 1 addition & 1 deletion npm/rome/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rome",
"version": "0.4.2-next",
"version": "0.5.0-next",
"bin": "bin/rome",
"scripts": {
"postinstall": "node scripts/postinstall.js"
Expand Down

0 comments on commit 41634a0

Please sign in to comment.