Skip to content

GitHub Actions workflow monitoring

Prove the GitHub Actions job delivered the outcome.

GitHub can show a workflow as green while the downstream promise is still unproven. Luota is useful when the Actions job is only a wrapper around something customers or operators depend on: a deploy, report, backup, import, or release process.

Operating spine

The workflow operating spine.

GitHub owns the CI run. Luota owns the operational promise that should be true after the CI wrapper finishes.

01 / Promise

Name the outcome

The scheduled workflow produces the deploy, artifact, report, backup restore proof, or release outcome someone relies on.

02 / Signal

Send the signal

Send the Luota signal after the final meaningful step, with run id, commit SHA, artifact id, environment, and smoke result.

03 / Drill

Break it on purpose

Skip the final signal or fail the smoke/artifact step so Luota opens a workflow-outcome incident instead of trusting green CI.

04 / Incident

Inspect the bad day

The incident should show GitHub run id, job, SHA, missing outcome, retry safety, owner, and runbook.

05 / Handoff

Leave an operator path

Route the owner back to the CI run, artifact, deploy, or restore path with durable operational evidence.

Example signal

Send the signal after the promise is true.

Put Luota at the end of the workflow, not the beginning. A signal after the last meaningful step turns a green CI run into operational evidence.

name: nightly-report
on:
  schedule:
    - cron: "10 4 * * *"
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./scripts/build-report.sh
      - name: Tell Luota the customer report was produced
        run: |
          curl -fsS "$LUOTA_API_BASE/v1/ingest/workspaces/$LUOTA_WORKSPACE_ID/heartbeat" \
            -H "Authorization: Bearer $LUOTA_WORKSPACE_TOKEN" \
            -H "Content-Type: application/json" \
            -d '{
              "monitorId": "'"$LUOTA_MONITOR_ID"'",
              "payload": {
                "workflow": "nightly-report",
                "run_id": "'"$GITHUB_RUN_ID"'",
                "sha": "'"$GITHUB_SHA"'"
              }
            }'

The failure story

The scheduled workflow starts, a shell step exits successfully, and GitHub marks the job green. The report never reaches storage, the deploy smoke is skipped, or the backup restore check never ran.

What Luota captures

Attach GitHub run id, workflow name, job name, commit SHA, environment, artifact id, smoke result, and the operator-safe retry note. The incident should explain the missed outcome, not just link to a CI run.

Setup checklist

Create one heartbeat monitor for simple scheduled workflows, or a run lifecycle monitor when start, finish, duration, and failure summary matter.

Add Luota workspace token, workspace id, and monitor id as GitHub Actions secrets.

Send the Luota signal after the real success condition: artifact uploaded, deploy smoke passed, report delivered, or restore drill completed.

What this does not replace

Keep GitHub job logs, branch protection, artifact retention, and deploy checks. Luota adds the missing operational promise: did the workflow create the outcome someone relies on?

Need a concrete migration or monitoring pattern? Start with the docs, then adapt the payload to the evidence your operator needs.

Open integration docs