name: Miri

on:
  workflow_dispatch:
  pull_request:
    types: [opened, synchronize]
    paths:
      - 'crates/oxc_parser/**'
      - 'crates/oxc_allocator/**'
      - '.github/workflows/miri.yml'
  push:
    branches:
      - main
    paths:
      - 'crates/oxc_parser/**'
      - 'crates/oxc_allocator/**'
      - '.github/workflows/miri.yml'

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
  cancel-in-progress: true

jobs:
  miri:
    name: Miri
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: taiki-e/checkout-action@v1

      - uses: Boshen/setup-rust@main
        with:
          cache-key: miri
          save-cache: ${{ github.ref_name == 'main' }}

      - name: Install Miri
        run: |
          rustup toolchain install nightly --component miri
          rustup override set nightly
          cargo miri setup

      - name: Test with Miri
        run: cargo miri test -p oxc_parser
