Hackorda Docs
Guides

Ci Integration

Hackorda connects to your CI pipeline so every test failure becomes a tracked, triageable bug automatically.

Status: requires an API key with cycles:read + issues:write + runs:write. The MCP server is optional — the REST API works directly from CI scripts.


GitHub Actions example

# .github/workflows/test.yml
- name: Run tests
  id: tests
  run: npm test
  continue-on-error: true

- name: File bug in Hackorda (on failure)
  if: steps.tests.outcome == 'failure'
  env:
    HACKORDA_API_KEY: ${{ secrets.HACKORDA_API_KEY }}
    HACKORDA_CYCLE_ID: ${{ vars.HACKORDA_CYCLE_ID }}
  run: |
    # Start a run
    RUN_ID=$(curl -s -X POST "https://hackorda.kz/api/test-cycles/$HACKORDA_CYCLE_ID/runs" \
      -H "Authorization: Bearer $HACKORDA_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"notes": "CI automated run"}' | jq -r .id)

    # File the issue
    curl -s -X POST "https://hackorda.kz/api/test-cycles/$HACKORDA_CYCLE_ID/issues" \
      -H "Authorization: Bearer $HACKORDA_API_KEY" \
      -H "Content-Type: application/json" \
      -d "{
        \"title\": \"CI failure: ${{ github.workflow }} on ${{ github.ref }}\",
        \"description\": \"Automated test failure in CI. Run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\",
        \"severity\": \"high\",
        \"type\": \"bug\",
        \"url\": \"${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\"
      }"

    # Complete the run
    curl -s -X PATCH "https://hackorda.kz/api/test-cycles/$HACKORDA_CYCLE_ID/runs/$RUN_ID" \
      -H "Authorization: Bearer $HACKORDA_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"status": "completed"}'

Required secrets

Secret/variableValue
HACKORDA_API_KEYYour hk_live_... key with cycles:read + issues:write + runs:write
HACKORDA_CYCLE_IDUUID of the active test cycle (find in the cycle URL)

Scope for the API key

cycles:read, issues:write, runs:write — and optionally restrict to just cycleIds: [HACKORDA_CYCLE_ID] for least-privilege.

On this page