Skip to content

CI

CI #935

Workflow file for this run

name: CI
on:
schedule:
- cron: "0 */3 * * *" # Every 3 hours.
pull_request:
types: [opened, synchronize]
paths-ignore:
- '**/*.md'
push:
branches:
- main
- "renovate/**"
paths-ignore:
- '**/*.md'
workflow_dispatch:
inputs:
ref:
required: false
type: string
default: 'main'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: ${{ github.ref_name != 'main' }}
jobs:
build:
name: Build
timeout-minutes: 10
runs-on: ubuntu-latest
outputs:
size: ${{ steps.size.outputs.BINARY_SIZE }}
steps:
- uses: taiki-e/checkout-action@v1
- name: Checkout oxc (${{ inputs.ref }})
uses: actions/checkout@v4
with:
repository: oxc-project/oxc
ref: ${{ inputs.ref }}
path: oxc
- run: mv oxc ../oxc
- uses: Boshen/setup-rust@main
with:
save-cache: ${{ github.ref_name == 'main' }}
- run: cargo build --release
env:
RUSTFLAGS: "-C debug-assertions=true"
- name: export BINARY_SIZE
id: size
run: |
BINARY_SIZE=$(ls -l ./target/release/monitor-oxc | awk '{print $5}')
echo $BINARY_SIZE
echo "BINARY_SIZE=$BINARY_SIZE" >> $GITHUB_OUTPUT
- name: Upload Binary
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: monitor-oxc
path: ./target/release/monitor-oxc
# populate pnpm cache
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version-file: .node-version
cache: pnpm
- run: pnpm install
test:
name: Test
needs: build
timeout-minutes: 30
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- command: codegen
- command: compressor
- command: transformer
- command: mangler
- command: whitespace
steps:
- uses: taiki-e/checkout-action@v1
- uses: actions/download-artifact@v4
with:
name: monitor-oxc
- run: chmod +x ./monitor-oxc
- uses: pnpm/[email protected]
- uses: actions/setup-node@v4
with:
node-version-file: .node-version
cache: pnpm
- run: pnpm install
- run: ./monitor-oxc ${{ matrix.command }}
compile-time:
name: Compile Time
runs-on: ubuntu-latest
if: ${{ github.ref_name == 'main' }}
outputs:
time: ${{ steps.run.outputs.COMPILE_TIME }}
steps:
- uses: taiki-e/checkout-action@v1
- name: Checkout oxc
uses: actions/checkout@v4
with:
repository: oxc-project/oxc
ref: main
path: oxc
- run: mv oxc ../oxc
- uses: Boshen/setup-rust@main
- run: cargo clean # build from scatch using local system cache to avoid download from crates.io
- id: run
run: |
/usr/bin/time -f "%e" -o output cargo build --release
cat output
COMPILE_TIME=$(cat output)
echo $COMPILE_TIME
echo "COMPILE_TIME=$COMPILE_TIME" >> $GITHUB_OUTPUT
monitor:
name: Monitor Metrics
needs: [build, compile-time]
if: ${{ github.ref_name == 'main' }}
runs-on: ubuntu-latest
steps:
- uses: taiki-e/checkout-action@v1
- name: Create Data
run: |
echo $(jq ".[0].value = ${{ needs.compile-time.outputs.time }}" metrics.json) > data.json
echo $(jq ".[1].value = ${{ needs.build.outputs.size }}" data.json) > data.json
cat data.json
- uses: benchmark-action/github-action-benchmark@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
name: Oxc Metrics
tool: customSmallerIsBetter
output-file-path: data.json
gh-pages-branch: gh-pages
benchmark-data-dir-path: metrics
auto-push: true
save-data-file: true
isolated_declarations:
needs: build
name: Isolated Declarations
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
repository: vuejs/core
ref: main
- uses: pnpm/[email protected]
- uses: actions/setup-node@v4
with:
node-version-file: .node-version
cache: pnpm
- run: pnpm install
- run: ./node_modules/.bin/tsc -p tsconfig.build.json --noCheck
- uses: actions/download-artifact@v4
with:
name: monitor-oxc
- run: chmod +x ./monitor-oxc
- run: ./monitor-oxc id .
rolldown:
name: Rolldown
runs-on: ubuntu-latest
steps:
- uses: taiki-e/checkout-action@v1
- uses: pnpm/[email protected]
- uses: actions/setup-node@v4
with:
node-version-file: .node-version
cache: pnpm
- run: pnpm install
- run: ./node_modules/.bin/rolldown --version
- run: node --run rolldown