CI Integration

Run Pulsar in your CI/CD pipeline

GitHub Actions

Add a step to your workflow to install and run Pulsar:

.github/workflows/ci.yml
- name: Install Pulsar
  run: |
    curl -L https://github.com/CarlosEduJs/pulsar/releases/latest/download/pulsar-cli-x86_64-unknown-linux-gnu.tar.xz | tar xJ
    sudo mv pulsar /usr/local/bin/

- name: Check with Pulsar
  run: pulsar check src/

Caching the binary

To avoid re-downloading on every run, cache the binary:

- name: Cache Pulsar
  id: cache
  uses: actions/cache@v4
  with:
    path: /usr/local/bin/pulsar
    key: pulsar-${{ runner.os }}

- name: Install Pulsar (if not cached)
  if: steps.cache.outputs.cache-hit != 'true'
  run: |
    curl -L https://github.com/CarlosEduJs/pulsar/releases/latest/download/pulsar-cli-x86_64-unknown-linux-gnu.tar.xz | tar xJ
    sudo mv pulsar /usr/local/bin/

Matrix builds

Run on multiple operating systems:

strategy:
  matrix:
    os: [ubuntu-latest, macos-latest]
steps:
  - name: Install Pulsar
    run: |
      case "${{ runner.os }}" in
        Linux)
          url="https://github.com/CarlosEduJs/pulsar/releases/latest/download/pulsar-cli-x86_64-unknown-linux-gnu.tar.xz"
          ;;
        macOS)
          url="https://github.com/CarlosEduJs/pulsar/releases/latest/download/pulsar-cli-aarch64-apple-darwin.tar.xz"
          ;;
      esac
      curl -L "$url" | tar xJ
      sudo mv pulsar /usr/local/bin/

GitLab CI

pulsar-check:
  script:
    - curl -L https://github.com/CarlosEduJs/pulsar/releases/latest/download/pulsar-cli-x86_64-unknown-linux-gnu.tar.xz | tar xJ
    - sudo mv pulsar /usr/local/bin/
    - pulsar check src/
  only:
    - merge_requests

CircleCI

- run:
    name: Install Pulsar
    command: |
      curl -L https://github.com/CarlosEduJs/pulsar/releases/latest/download/pulsar-cli-x86_64-unknown-linux-gnu.tar.xz | tar xJ
      sudo mv pulsar /usr/local/bin/

- run:
    name: Check with Pulsar
    command: pulsar check src/

Exit codes

CodeMeaning
0Pass — no errors or parse failures
1Fail — errors or parse failures found

JSON output

For machine parsing, use the --format json flag:

pulsar check src/ --format json

The JSON format is an array of diagnostic objects:

[
  {
    "severity": "Error",
    "rule_id": "no-select-star",
    "message": "Avoid implicit SELECT *. Specify columns explicitly.",
    "location": {
      "file": "src/db/users.ts",
      "line": 12,
      "column": 20
    }
  }
]

Last updated on

On this page