Run governed Agentic scenarios on every pull request. The action dispatches your chosen scenarios, polls until they finish, and fails the build on regressions.
In your GitHub repository settings → Secrets and variables → Actions, add:
ASSERTIVE_PROJECT_ID — your Assertive project UUIDASSERTIVE_CI_HMAC_SECRET — a shared random string (also saved in your Assertive backend)ASSERTIVE_SCENARIO_IDS — comma-separated scenario UUIDs (a repo variable is fine)Generate the HMAC secret with openssl rand -hex 32 and paste the same value in both places.
Save this as .github/workflows/assertive.yml:
name: Assertive QA
on:
pull_request:
workflow_dispatch:
jobs:
qa:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Assertive scenarios
uses: vancoregroup/assertive-action@v1
with:
endpoint: https://assertive.tech
project_id: ${{ secrets.ASSERTIVE_PROJECT_ID }}
scenario_ids: ${{ vars.ASSERTIVE_SCENARIO_IDS }}
hmac_secret: ${{ secrets.ASSERTIVE_CI_HMAC_SECRET }}
poll_timeout_seconds: "900"
The endpoint is HMAC-signed. Reject responses that come back with 401 — the signature or secret is off.
BODY='{"project_id":"<uuid>","scenario_ids":["<uuid>"],"triggered_by":"manual"}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$ASSERTIVE_CI_HMAC_SECRET" | awk '{print $2}')
curl -X POST https://assertive.tech/api/public/hooks/ci-dispatch \
-H "Content-Type: application/json" \
-H "x-assertive-signature: $SIG" \
--data "$BODY"
The dispatch response returns { run_refs: [...] }. Poll each ref:
curl https://assertive.tech/api/public/runs/RUN-000042/status
# → { "run_ref": "RUN-000042", "status": "running", ... }Terminal statuses: passed, failed, cancelled.
Need a public share link for the run?
Toggle any run public and share /r/RUN-XXXXXX. See Pricing for parallel execution and SSO.