name: Conformance

on:
  workflow_dispatch:
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '**/*.md'
      - '**/*.yml'
      - '**/package.json'
      - 'npm/**'
      - 'website/**'
      - 'crates/oxc/**'
      - 'crates/oxc_cli/**'
      - 'crates/oxc_linter/**'
      - 'crates/oxc_type_synthesis/**'
      - 'crates/oxc_wasm/**'
      - 'crates/oxc_prettier/**'
      - 'tasks/prettier_conformance/**'
  push:
    branches:
      - main
    paths-ignore:
      - '**/*.md'
      - '**/*.yml'
      - '**/package.json'
      - 'npm/**'
      - 'website/**'
      - 'crates/oxc/**'
      - 'crates/oxc_cli/**'
      - 'crates/oxc_linter/**'
      - 'crates/oxc_type_synthesis/**'
      - 'crates/oxc_wasm/**'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
  cancel-in-progress: ${{ github.ref_name != 'main' }}

jobs:
  conformance:
    name: Conformance
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: true # Pull submodules for `cargo coverage`

      - name: Install Rust Toolchain
        uses: ./.github/actions/rustup

      - name: Set up Bun
        uses: oven-sh/setup-bun@v1

      - name: Install Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 18
          registry-url: 'https://registry.npmjs.org'

      - run: cargo coverage
      - run: cargo run --release -p oxc_transform_conformance -- --exec
      - run: cargo run --release -p oxc_prettier_conformance
      # - run: cargo minsize

      - name: Check for snapshot diff
        run: git diff --exit-code
