name: CI on: push: paths: - grammar.js - src/** - test/** - bindings/** - tree-sitter.json pull_request: paths: - grammar.js - src/** - test/** - bindings/** - tree-sitter.json concurrency: group: ${{github.workflow}}-${{github.ref}} cancel-in-progress: true jobs: test: name: Test parser runs-on: ${{matrix.os}} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] steps: - name: Checkout repository uses: actions/checkout@v6 - name: Set up tree-sitter uses: tree-sitter/setup-action/cli@v2 - name: Run parser and binding tests uses: tree-sitter/parser-test-action@v2 with: test-rust: true - name: Parse sample files uses: tree-sitter/parse-action@v4 id: parse-files with: files: examples/** - name: Upload failures artifact uses: actions/upload-artifact@v6 if: "!cancelled() && steps.parse-files.outcome == 'failure'" with: name: failures-${{runner.os}} path: ${{steps.parse-files.outputs.failures}} fuzz: name: Fuzz scanner runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v6 with: fetch-depth: 2 - name: Check for scanner changes id: scanner-check run: |- if git diff --quiet HEAD^ -- src/scanner.c; then printf 'changed=false\n' >> "$GITHUB_OUTPUT" else printf 'changed=true\n' >> "$GITHUB_OUTPUT" fi - name: Run the fuzzer uses: tree-sitter/fuzz-action@v4 if: steps.scanner-check.outputs.changed == 'true' query: name: Validate queries runs-on: ubuntu-latest steps: - name: Set up repository uses: actions/checkout@v6 - name: Set up tree-sitter uses: tree-sitter/setup-action/cli@v2 - name: Build parser run: tree-sitter build - name: Set up ts_query_ls run: curl -fL https://github.com/ribru17/ts_query_ls/releases/latest/download/ts_query_ls-x86_64-unknown-linux-gnu.tar.gz | tar -xz - name: Check queries run: ./ts_query_ls check -f queries/