Skip to content

release(oxlint): v0.15.6 (#8456) #136

release(oxlint): v0.15.6 (#8456)

release(oxlint): v0.15.6 (#8456) #136

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@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1
- name: Check version changes
uses: EndBug/version-check@36ff30f37c7deabe56a30caa043d127be658c425 # v2.1.5
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'
env:
NEW_VERSION: ${{ steps.version.outputs.version }}
run: |
echo "Version change found! New version: ${NEW_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@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1
- name: Install cross
uses: taiki-e/install-action@df5dec2a2f73ff6dbace3072df1242669b7bb7d1 # v2.47.9
with:
tool: cross
- name: Rust Cache
uses: Swatinem/rust-cache@f0deed1e0edfc6a9be95417288c0e1099b1eeec3 # v2.7.7
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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # 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/[email protected]
id-token: write # for `pnpm publish --provenance`
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
fetch-depth: 0 # for changelog
persist-credentials: false
- uses: oxc-project/setup-rust@cd82e1efec7fef815e2c23d296756f31c7cdc03d # v1.0.0
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@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
with:
merge-multiple: true
- name: Unzip
uses: montudor/action-zip@0852c26906e00f8a315c704958823928d8018b28 # v1.0.0
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/ --provenance --access public --no-git-checks
echo '----'
done
- name: Create GitHub Release
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1
with:
body: ${{ steps.run.outputs.CHANGELOG }}
draft: false
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 3 minutes for smoke test
run: sleep 180s
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
env:
OXLINT_VERSION: ${{ needs.check.outputs.version}}
run: |
touch test.js
ldd --version || true
npx oxlint@${OXLINT_VERSION} ./test.js
eslint-plugin-oxlint:
needs: [check, publish, smoke]
name: Update eslint-plugin-oxlint
runs-on: ubuntu-latest
steps:
- uses: taiki-e/checkout-action@b13d20b7cda4e2f325ef19895128f7ff735c0b3d # v1.3.1
- uses: benc-uk/workflow-dispatch@e2e5e9a103e331dad343f381a29e654aea3cf8fc # v1.2.4
with:
repo: oxc-project/eslint-plugin-oxlint
workflow: bump_oxlint.yml
token: ${{ secrets.OXC_BOT_PAT }}
ref: main
inputs: '{ "version": "${{ needs.check.outputs.version }}" }'