Skip to main content
Control Plane integrates with GitHub Actions through the official langship/eval-action. Add it to your workflow to automatically run eval suites on every PR and post results as a check.

Setup

1. Add your Control Plane API key as a secret

In your GitHub repository: Settings → Secrets and variables → Actions → New repository secret
  • Name: LANGSHIP_API_KEY
  • Value: your Control Plane API key (from the Control Plane dashboard)
Also add LANGSHIP_URL if you’re self-hosting:
  • Name: LANGSHIP_URL
  • Value: https://langship.yourcompany.com

2. Add the workflow

Create .github/workflows/eval.yml:

3. Configure evals in langship.yaml

What the action does

On every PR:
  1. Runs each eval defined in langship.yaml against the configured dataset
  2. Posts results as a GitHub Check on the PR; you will see pass/fail in the PR status bar
  3. Posts a PR comment with a results table (one row per evaluator)
  4. If fail-on-regression: true and any blocking eval drops below its threshold, the action exits with code 1, blocking merge
Example PR comment:

Blocking vs non-blocking evals

Auto-deploy on merge

When a PR merges to main and all blocking evals pass, Control Plane can automatically deploy the new agent version:
With require_approval: true, the deploy step waits for a reviewer to approve in the GitHub Actions UI before proceeding.

Matrix evals across environments

Test your agent against multiple models or configurations in parallel:
Results for each matrix leg appear as separate checks on the PR.

Caching

Speed up eval runs by caching your Python dependencies:

Action inputs