Skip to content

refactor(cli): use command runner to run predictable logic #851

refactor(cli): use command runner to run predictable logic

refactor(cli): use command runner to run predictable logic #851

Workflow file for this run

name: Release
on:
pull_request:
types: [ closed ]
branches: [ main ]
jobs:
retrieve-version:
if: github.head_ref == 'release/automated-ci' && github.event.pull_request.merged == true
name: Retrieve version
runs-on: ubuntu-latest
outputs:
version: ${{ env.version }}
version_changed: ${{ steps.version.outputs.changed }}
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Check version changes
uses: EndBug/version-check@d4be4219408b50d1bbbfd350a47cbcb126878692 # v2.1.4
id: version
with:
diff-search: true
file-name: packages/@biomejs/biome/package.json
- name: Set version name
if: steps.version.outputs.changed == 'true'
run: |
echo "Version change found! New version: ${{ steps.version.outputs.version }} (${{ steps.version.outputs.version_type }})"
echo "version=${{ steps.version.outputs.version }}" >> $GITHUB_ENV
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: ubuntu-20.04
target: x86_64-unknown-linux-musl
code-target: linux-x64-musl
- os: ubuntu-20.04
target: aarch64-unknown-linux-musl
code-target: linux-arm64-musl
- os: macos-14
target: x86_64-apple-darwin
code-target: darwin-x64
- os: macos-14
target: aarch64-apple-darwin
code-target: darwin-arm64
name: Package ${{ matrix.code-target }}
runs-on: ${{ matrix.os }}
needs: retrieve-version
env:
version: ${{ needs.check.outputs.version }}
outputs:
version: ${{ env.version }}
steps:
- name: Checkout repository
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Install Node.js
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: 20
- name: Install toolchain
uses: moonrepo/setup-rust@e013866c4215f77c925f42f60257dec7dd18836e # v1.2.1
with:
channel: stable
cache-target: release
cache-base: main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install arm64 toolchain
if: matrix.code-target == 'linux-arm64' || matrix.code-target == 'linux-arm64-musl'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu
- name: Install musl toolchain
if: matrix.code-target == 'linux-x64-musl' || matrix.code-target == 'linux-arm64-musl'
run: |
sudo apt-get update
sudo apt-get install -y musl-tools
- name: Audit crates.io dependencies
if: matrix.code-target == 'linux-x64'
run: cargo audit
- name: Set jemalloc page size for linux-arm64
if: matrix.code-target == 'linux-arm64'
run: |
echo "JEMALLOC_SYS_WITH_LG_PAGE=16" >> $GITHUB_ENV
# Build the CLI binary
- name: Build binaries
run: cargo build -p biome_cli --release --target ${{ matrix.target }}
env:
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER: aarch64-linux-gnu-gcc
# Strip all debug symbols from the resulting binaries
RUSTFLAGS: "-C strip=symbols"
# Inline the version of the npm package in the CLI binary
BIOME_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/biome.exe ./dist/biome-${{ matrix.code-target }}.exe
- name: Copy CLI binary
if: matrix.os != 'windows-2022'
run: |
mkdir dist
cp target/${{ matrix.target }}/release/biome ./dist/biome-${{ matrix.code-target }}
- name: Upload Artifact
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: cli-${{ matrix.target }}
path: ./dist/biome-*
if-no-files-found: error
build-wasm:
name: Build WASM
runs-on: ubuntu-latest
needs: retrieve-version
steps:
- name: Checkout repository
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Install wasm-pack
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- name: Build WASM module for bundlers
run: wasm-pack build --out-dir ../../packages/@biomejs/wasm-bundler --target bundler --release --scope biomejs crates/biome_wasm
- name: Build WASM module for node.js
run: wasm-pack build --out-dir ../../packages/@biomejs/wasm-nodejs --target nodejs --release --scope biomejs crates/biome_wasm
- name: Build WASM module for the web
run: wasm-pack build --out-dir ../../packages/@biomejs/wasm-web --target web --release --scope biomejs crates/biome_wasm
- name: Upload WASM artifact
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0
with:
name: wasm-${{ matrix.target }}
path: |
./packages/@biomejs/wasm-bundler
./packages/@biomejs/wasm-nodejs
./packages/@biomejs/wasm-web
if-no-files-found: error
release:
name: Publish
runs-on: ubuntu-latest
needs:
- build
- build-wasm
environment: npm-publish
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Download CLI artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
pattern: cli-*
merge-multiple: true
- name: Download WASM artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
pattern: wasm-*
merge-multiple: true
path: packages/@biomejs
- uses: knope-dev/action@407e9ef7c272d2dd53a4e71e39a7839e29933c48 # v2.1.0
with:
version: 0.16.2
github-token: ${{ secrets.GITHUB_TOKEN }}
- run: knope release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish-npm:
name: Publish npm packages
runs-on: ubuntu-latest
needs: release
environment: npm-publish
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Download CLI artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
pattern: cli-*
merge-multiple: true
- name: Download WASM artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
pattern: wasm-*
merge-multiple: true
path: packages/@biomejs
- name: Install Node.js
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version: 20
registry-url: 'https://registry.npmjs.org'
- name: Publish npm packages as latest
run: for package in packages/@biomejs/*; do if [ $package != "packages/@biomejs/js-api" ]; then npm publish $package --tag latest --access public; fi; done
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Publish npm packages as nightly
run: for package in packages/@biomejs/*; do if [ $package != "packages/@biomejs/js-api" ]; then npm publish $package --tag nightly --access public; fi; done
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
publish-crate:
name: Publish crates
needs: release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Install toolchain
uses: moonrepo/setup-rust@e013866c4215f77c925f42f60257dec7dd18836e # v1.2.1
with:
channel: stable
cache-target: release
cache-base: main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: katyo/publish-crates@v2
with:
registry-token: ${{ secrets.CARGO_TOKEN }}