mirror of
https://github.com/biomejs/biome.git
synced 2025-12-23 08:21:13 +00:00
276 lines
10 KiB
YAML
276 lines
10 KiB
YAML
# To keep it as emergency workflow until preview, beta and changesets releases are stable
|
|
name: Release CLI
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
|
|
jobs:
|
|
check:
|
|
name: Check version
|
|
runs-on: depot-ubuntu-24.04-arm-small
|
|
outputs:
|
|
version: ${{ env.version }}
|
|
steps:
|
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
|
|
- 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@5102328418c0130d66ca712d755c303e93368ce2 # v2.1.7
|
|
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
|
|
|
|
- name: Set prerelease status
|
|
if: env.nightly == 'true'
|
|
run: |
|
|
echo "prerelease=true" >> $GITHUB_ENV
|
|
echo "version=$(node packages/@biomejs/biome/scripts/update-nightly-version.mjs)" >> $GITHUB_ENV
|
|
|
|
build:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: depot-windows-2022-16
|
|
target: x86_64-pc-windows-msvc
|
|
code-target: win32-x64
|
|
- os: depot-windows-2022-16
|
|
target: aarch64-pc-windows-msvc
|
|
code-target: win32-arm64
|
|
- os: depot-ubuntu-24.04-16
|
|
target: x86_64-unknown-linux-musl
|
|
code-target: linux-x64-musl
|
|
- os: depot-ubuntu-24.04-arm-16
|
|
target: aarch64-unknown-linux-musl
|
|
code-target: linux-arm64-musl
|
|
- os: depot-macos-14
|
|
target: x86_64-apple-darwin
|
|
code-target: darwin-x64
|
|
- os: depot-macos-14
|
|
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'
|
|
env:
|
|
version: ${{ needs.check.outputs.version }}
|
|
outputs:
|
|
version: ${{ env.version }}
|
|
prerelease: ${{ needs.check.outputs.prerelease }}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
|
|
- name: Install Rust toolchain
|
|
run: rustup target add ${{ matrix.target }}
|
|
|
|
- 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: Install cargo-audit
|
|
uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49
|
|
if: matrix.code-target == 'linux-x64-musl'
|
|
with:
|
|
tool: cargo-audit
|
|
|
|
- name: Audit crates.io dependencies
|
|
if: matrix.code-target == 'linux-x64-musl'
|
|
run: cargo audit
|
|
|
|
# Build the CLI binary
|
|
- name: Build binaries
|
|
run: cargo build -p biome_cli --release --target ${{ matrix.target }}
|
|
env:
|
|
# Strip all debug symbols from the resulting binaries
|
|
RUSTFLAGS: "-C strip=symbols -C codegen-units=1"
|
|
# 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 == 'depot-windows-2022-16'
|
|
run: |
|
|
mkdir dist
|
|
cp target/${{ matrix.target }}/release/biome.exe ./dist/biome-${{ matrix.code-target }}.exe
|
|
- name: Copy CLI binary
|
|
if: matrix.os != 'depot-windows-2022-16'
|
|
run: |
|
|
mkdir dist
|
|
cp target/${{ matrix.target }}/release/biome ./dist/biome-${{ matrix.code-target }}
|
|
|
|
# Upload the CLI binary as a build artifact
|
|
- name: Upload CLI artifact
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: cli-${{ matrix.target }}
|
|
path: ./dist/biome-*
|
|
if-no-files-found: error
|
|
|
|
# Build GNU/Linux binaries in Docker, using Debian 11 (bullseye), to support older versions of glibc.
|
|
build-gnu:
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: depot-ubuntu-24.04-16
|
|
target: x86_64-unknown-linux-gnu
|
|
code-target: linux-x64
|
|
- os: depot-ubuntu-24.04-arm-16
|
|
target: aarch64-unknown-linux-gnu
|
|
code-target: linux-arm64
|
|
|
|
name: Package ${{ matrix.code-target }}
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
needs: check
|
|
if: needs.check.outputs.version_changed == 'true' || needs.check.outputs.nightly == 'true'
|
|
env:
|
|
version: ${{ needs.check.outputs.version }}
|
|
outputs:
|
|
version: ${{ env.version }}
|
|
prerelease: ${{ needs.check.outputs.prerelease }}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
|
|
- 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:
|
|
# Strip all debug symbols from the resulting binaries
|
|
RUSTFLAGS: "-C strip=symbols -C codegen-units=1"
|
|
# 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
|
|
run: |
|
|
mkdir dist
|
|
cp target/${{ matrix.target }}/release/biome ./dist/biome-${{ matrix.code-target }}
|
|
|
|
# Upload the CLI binary as a build artifact
|
|
- name: Upload CLI artifact
|
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: cli-${{ matrix.target }}
|
|
path: ./dist/biome-*
|
|
if-no-files-found: error
|
|
|
|
build-wasm:
|
|
name: Build WASM
|
|
runs-on: depot-ubuntu-24.04-arm-16
|
|
needs: check
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: wasm-${{ matrix.target }}
|
|
path: |
|
|
./packages/@biomejs/wasm-bundler
|
|
./packages/@biomejs/wasm-nodejs
|
|
./packages/@biomejs/wasm-web
|
|
if-no-files-found: error
|
|
|
|
publish:
|
|
name: Publish
|
|
runs-on: ubuntu-24.04 # Must be a GitHub hosted runner for provenance
|
|
needs:
|
|
- build
|
|
- build-gnu
|
|
- build-wasm
|
|
environment: npm-publish
|
|
permissions:
|
|
contents: write
|
|
id-token: write
|
|
steps:
|
|
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
|
|
|
|
- name: Download CLI artifacts
|
|
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
|
|
with:
|
|
pattern: cli-*
|
|
merge-multiple: true
|
|
- name: Download WASM artifacts
|
|
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
|
|
with:
|
|
pattern: wasm-*
|
|
merge-multiple: true
|
|
path: packages/@biomejs
|
|
|
|
- name: Install Node.js
|
|
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
with:
|
|
node-version: 20.19.5
|
|
registry-url: 'https://registry.npmjs.org'
|
|
|
|
- name: Set release infos
|
|
if: needs.build.outputs.prerelease == 'true'
|
|
run: node packages/@biomejs/biome/scripts/update-nightly-version.mjs
|
|
- name: Generate npm packages
|
|
run: node packages/@biomejs/biome/scripts/generate-packages.mjs
|
|
|
|
- name: Publish npm packages as latest
|
|
run: for package in packages/@biomejs/*; do if [ $package != "packages/@biomejs/js-api" ] && [ $package != "packages/@biomejs/plugin-api" ]; then npm publish $package --tag latest --access public --provenance; fi; done
|
|
if: needs.build.outputs.prerelease != 'true'
|
|
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" ] && [ $package != "packages/@biomejs/plugin-api" ]; then npm publish $package --tag nightly --access public --provenance; fi; done
|
|
if: needs.build.outputs.prerelease == 'true'
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
|
|
- 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@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2
|
|
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' }}
|
|
body_path: ${{ github.workspace }}/RELEASE_NOTES
|
|
files: |
|
|
biome-*
|
|
fail_on_unmatched_files: true
|
|
generate_release_notes: true
|