Skip to content

oxlint ecosystem ci #1109

oxlint ecosystem ci

oxlint ecosystem ci #1109

Workflow file for this run

name: oxlint ecosystem ci
on:
schedule:
- cron: "0 */3 * * *" # Every 3 hours.
pull_request:
types: [opened, synchronize]
paths-ignore:
- '**/*.md'
push:
branches:
- main
paths-ignore:
- '**/*.md'
workflow_dispatch:
inputs: # for create comment action https://github.com/peter-evans/create-or-update-comment?tab=readme-ov-file#action-inputs
issue-number:
required: false
type: string
comment-id:
required: false
type: string
ref:
required: false
type: string
default: 'main'
jobs:
reply:
name: Reply
if: ${{ inputs.issue-number && inputs.comment-id }}
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: write
steps:
- uses: peter-evans/create-or-update-comment@v4
with:
token: ${{ secrets.OXC_BOT_PAT }}
repository: oxc-project/oxc
issue-number: ${{ inputs.issue-number }}
comment-id: ${{ inputs.comment-id }}
reactions: eyes
build:
name: Build
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
repository: oxc-project/oxc
ref: ${{ inputs.ref }}
- uses: Boshen/setup-rust@main
with:
save-cache: ${{ github.ref_name == 'main' }}
- run: cargo oxlint
env:
RUSTFLAGS: "-C debug-assertions=true"
- uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: oxlint
path: ./target/release/oxlint
checkout:
name: Read matrix.json
needs: build
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.setmatrix.outputs.content }}
steps:
- uses: taiki-e/checkout-action@v1
- id: setmatrix
uses: jaywcjlove/github-action-read-file@main
with:
localfile: ./matrix.json
test:
needs: checkout
timeout-minutes: 30
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.checkout.outputs.matrix) }}
name: Test ${{ matrix.repository }}
steps:
- name: Clone ${{ matrix.repository }}
uses: actions/checkout@v4
with:
repository: ${{ matrix.repository }}
ref: ${{ matrix.ref }}
path: ${{ matrix.path }}
- uses: actions/download-artifact@v4
with:
name: oxlint
path: ${{ matrix.path }}
- run: chmod +x ./oxlint
working-directory: ${{ matrix.path }}
- name: Run
working-directory: ${{ matrix.path }}
run: ${{ matrix.command }}
- name: Check Panic
working-directory: ${{ matrix.path }}
run: |
set +e # disable exit on run
./oxlint --fix --jest-plugin --jsdoc-plugin --jsx-a11y-plugin --nextjs-plugin --react-perf-plugin -D all --silent
EXIT_CODE=$?
# Panic returns exit code > 1, e.g. 101 when a Rust program panics
if [ $EXIT_CODE -gt 1 ]; then
echo "exitcode=$EXIT_CODE" >> $GITHUB_OUTPUT
exit $EXIT_CODE
fi
echo "exitcode=0" >> $GITHUB_OUTPUT
exit 0
comment:
needs: test
if: ${{ always() }}
runs-on: ubuntu-latest
name: Reply Comment
permissions:
pull-requests: write
contents: write
steps:
- uses: actions/github-script@v7
id: script
if: ${{ inputs.issue-number }}
with:
github-token: ${{ secrets.OXC_BOT_PAT }}
result-encoding: string
script: |
const {
data: { jobs },
} = await github.rest.actions.listJobsForWorkflowRun({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.runId,
per_page: 100,
});
let result = jobs
.filter((job) => job.name.startsWith("Test "))
.map((job) => {
const suite = job.name.slice(5);
return { suite, conclusion: job.conclusion, link: job.html_url };
});
const url = `${context.serverUrl}//${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
const urlLink = `[Open](${url})`;
const conclusionEmoji = {
success: ":white_check_mark:",
failure: ":x:",
cancelled: ":stop_button:",
};
const body = `
## [Oxlint Ecosystem CI](${urlLink})
| suite | result |
|-------|--------|
${result.map((r) => `| [${r.suite}](${r.link}) | ${conclusionEmoji[r.conclusion]} |`).join("\n")}
`;
return body;
- uses: peter-evans/create-or-update-comment@v4
if: ${{ inputs.issue-number && inputs.comment-id }}
with:
token: ${{ secrets.OXC_BOT_PAT }}
repository: oxc-project/oxc
issue-number: ${{ inputs.issue-number }}
comment-id: ${{ inputs.comment-id }}
body: ${{ steps.script.outputs.result }}
edit-mode: replace