mirror of
https://github.com/danbulant/oxc
synced 2026-05-21 21:29:01 +00:00
247 lines
7.5 KiB
YAML
247 lines
7.5 KiB
YAML
name: Release Oxlint
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- npm/oxlint/package.json # Please only commit this file, so we don't need to wait for all the other CI jobs to finish.
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
check:
|
|
name: Check version
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
version_changed: ${{ steps.version.outputs.changed }}
|
|
version: ${{ steps.version.outputs.version }}
|
|
steps:
|
|
- uses: taiki-e/checkout-action@v1
|
|
|
|
- name: Check version changes
|
|
uses: EndBug/version-check@v2
|
|
id: version
|
|
with:
|
|
static-checking: localIsNew
|
|
file-url: https://unpkg.com/oxlint@latest/package.json
|
|
file-name: npm/oxlint/package.json
|
|
|
|
- name: Print version
|
|
if: steps.version.outputs.changed == 'true'
|
|
run: |
|
|
echo "Version change found! New version: ${{ steps.version.outputs.version }}"
|
|
|
|
build:
|
|
needs: check
|
|
if: needs.check.outputs.version_changed == 'true'
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: windows-latest
|
|
target: x86_64-pc-windows-msvc
|
|
code-target: win32-x64
|
|
|
|
- os: windows-latest
|
|
target: aarch64-pc-windows-msvc
|
|
code-target: win32-arm64
|
|
|
|
- os: ubuntu-latest
|
|
target: x86_64-unknown-linux-gnu
|
|
code-target: linux-x64-gnu
|
|
|
|
- os: ubuntu-latest
|
|
target: aarch64-unknown-linux-gnu
|
|
code-target: linux-arm64-gnu
|
|
|
|
- os: ubuntu-latest
|
|
target: x86_64-unknown-linux-musl
|
|
code-target: linux-x64-musl
|
|
|
|
- os: ubuntu-latest
|
|
target: aarch64-unknown-linux-musl
|
|
code-target: linux-arm64-musl
|
|
|
|
- os: macos-latest
|
|
target: x86_64-apple-darwin
|
|
code-target: darwin-x64
|
|
|
|
- os: macos-latest
|
|
target: aarch64-apple-darwin
|
|
code-target: darwin-arm64
|
|
|
|
name: Package ${{ matrix.code-target }}
|
|
runs-on: ${{ matrix.os }}
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
env:
|
|
OXC_VERSION: ${{ needs.check.outputs.version }}
|
|
steps:
|
|
- uses: taiki-e/checkout-action@v1
|
|
|
|
- name: Install cross
|
|
uses: taiki-e/install-action@cross
|
|
|
|
- name: Rust Cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
shared-key: release-${{ matrix.target }}
|
|
|
|
- name: Add Rust Target
|
|
run: rustup target add ${{ matrix.target }}
|
|
|
|
- name: Build
|
|
shell: bash
|
|
run: |
|
|
# Need to support 16kb-aligned pages for aarch64 systems,
|
|
# Asahi Linux & Raspberry Pi OS use a 16k page size.
|
|
# https://github.com/oxc-project/oxc/issues/3783
|
|
case ${{ matrix.target }} in
|
|
aarch64-*) export JEMALLOC_SYS_WITH_LG_PAGE=16 ;;
|
|
esac;
|
|
cross build --release --target=${{ matrix.target }} --bin oxlint --features allocator
|
|
cross build -p oxc_language_server --bin oxc_language_server --release --target=${{ matrix.target }}
|
|
|
|
# The binaries are zipped to fix permission loss https://github.com/actions/upload-artifact#permission-loss
|
|
- name: Archive Binaries
|
|
if: runner.os == 'Windows'
|
|
run: |
|
|
OXLINT_BIN_NAME=oxlint-${{ matrix.code-target }}
|
|
mv target/${{ matrix.target }}/release/oxlint.exe $OXLINT_BIN_NAME.exe
|
|
7z a $OXLINT_BIN_NAME.zip $OXLINT_BIN_NAME.exe
|
|
|
|
OXLS_BIN_NAME=oxc_language_server-${{ matrix.code-target }}
|
|
mv target/${{ matrix.target }}/release/oxc_language_server.exe $OXLS_BIN_NAME.exe
|
|
7z a $OXLS_BIN_NAME.zip $OXLS_BIN_NAME.exe
|
|
|
|
# The binaries are zipped to fix permission loss https://github.com/actions/upload-artifact#permission-loss
|
|
- name: Archive Binaries
|
|
if: runner.os != 'Windows'
|
|
run: |
|
|
OXLINT_BIN_NAME=oxlint-${{ matrix.code-target }}
|
|
mv target/${{ matrix.target }}/release/oxlint $OXLINT_BIN_NAME
|
|
tar czf $OXLINT_BIN_NAME.tar.gz $OXLINT_BIN_NAME
|
|
|
|
OXLS_BIN_NAME=oxc_language_server-${{ matrix.code-target }}
|
|
mv target/${{ matrix.target }}/release/oxc_language_server $OXLS_BIN_NAME
|
|
tar czf $OXLS_BIN_NAME.tar.gz $OXLS_BIN_NAME
|
|
|
|
- name: Upload Binary
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
if-no-files-found: error
|
|
name: binaries-${{ matrix.code-target }}
|
|
path: |
|
|
*.zip
|
|
*.tar.gz
|
|
|
|
publish:
|
|
name: Publish
|
|
needs: [check, build]
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write # for softprops/action-gh-release@v1
|
|
id-token: write # for `pnpm publish --provenance`
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0 # for changelog
|
|
|
|
- uses: Boshen/setup-rust@main
|
|
with:
|
|
restore-cache: false
|
|
tools: cargo-release-oxc
|
|
|
|
- name: Run
|
|
id: run
|
|
run: |
|
|
mkdir -p target
|
|
cargo release-oxc changelog --release oxlint
|
|
{
|
|
echo 'CHANGELOG<<EOF'
|
|
cat ./target/OXC_CHANGELOG
|
|
echo EOF
|
|
} >> $GITHUB_OUTPUT
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
merge-multiple: true
|
|
|
|
- name: Unzip
|
|
uses: montudor/action-zip@v1
|
|
with:
|
|
args: unzip -qq *.zip -d .
|
|
|
|
- name: Untar
|
|
run: ls *.gz | xargs -i tar xf {}
|
|
|
|
- uses: ./.github/actions/pnpm
|
|
|
|
- name: Generate npm packages
|
|
run: |
|
|
node npm/oxlint/scripts/generate-packages.mjs
|
|
cat npm/oxlint/package.json
|
|
for package in npm/oxlint*; do cat $package/package.json ; echo ; done
|
|
|
|
- name: Publish npm packages as latest
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
# NOTE: The trailing slash on $package/ changes it to publishing the directory
|
|
run: |
|
|
for package in npm/oxlint*
|
|
do
|
|
pnpm publish $package/ --tag latest --provenance --access public --no-git-checks
|
|
echo '----'
|
|
done
|
|
|
|
- name: Create GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
body: ${{ steps.run.outputs.CHANGELOG }}
|
|
draft: true
|
|
files: oxlint-*
|
|
name: oxlint v${{ needs.check.outputs.version }}
|
|
tag_name: oxlint_v${{ needs.check.outputs.version }}
|
|
fail_on_unmatched_files: true
|
|
target_commitish: ${{ github.sha }}
|
|
|
|
- name: wait 1 minute for smoke test
|
|
run: sleep 60s
|
|
|
|
smoke:
|
|
needs: [check, publish]
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- os: windows-latest
|
|
- os: ubuntu-latest
|
|
- os: ubuntu-latest
|
|
container: node:18-alpine # musl
|
|
- os: macos-latest
|
|
name: Smoke Test ${{ matrix.os }} ${{ matrix.container }}
|
|
runs-on: ${{ matrix.os }}
|
|
container: ${{ matrix.container }}
|
|
steps:
|
|
- name: Test
|
|
run: |
|
|
touch test.js
|
|
ldd --version || true
|
|
npx oxlint@${{ needs.check.outputs.version }} ./test.js
|
|
|
|
eslint-plugin-oxlint:
|
|
needs: [check, publish]
|
|
name: Update eslint-plugin-oxlint
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: taiki-e/checkout-action@v1
|
|
- uses: benc-uk/workflow-dispatch@v1
|
|
with:
|
|
repo: oxc-project/eslint-plugin-oxlint
|
|
workflow: bump_oxlint.yml
|
|
token: ${{ secrets.OXC_BOT_PAT }}
|
|
ref: main
|
|
inputs: '{ "version": "${{ needs.check.outputs.version }}" }'
|