Reading the post-push validation banner

After deploy succeeds, CodeTeach watches the real GitHub Actions run and shows one of three banner states — pending, passed, or failed. This article explains what each state means and what to do, especially when real GHA fails after CodeTeach's replica passed.

Written By Alan Gandy

Last updated About 1 month ago

After your assignment deploys, CodeTeach pushes the autograder workflow to GitHub. GitHub Actions starts running it automatically — and CodeTeach watches the run, polling every few seconds, and shows you the result in a banner above the Classroom setup section.

This article explains the three banner states and what to do for each.

The three post-push banner states stacked — yellow pending, green passed, red failed — showing what each looks like

Why CodeTeach watches the real GHA run

The Tier 2 validation that ran before you deployed used a sandbox replica of GitHub Actions. It's accurate, but not literally GitHub Actions. The post-push banner watches the real run on your real repo with the real classroom-resources/autograding-command-grader Action.

If the sandbox passed but the real run fails, that's a drift between CodeTeach's replica and real GHA — usually our bug, occasionally GitHub-side flakiness. Either way, students would hit it. The banner catches the drift before any student ever sees the assignment, and gates the Classroom setup wizard so you don't accidentally hand out a broken assignment.

State 1: Deployed — validation pending (yellow / spinner)

Deployed — validation pendingGitHub Actions is running the autograder on your solution branch. This usually takes 1–3 minutes.

This is the default state right after deploy. CodeTeach polls every few seconds for the run to finish.

What to do: wait. The page updates automatically when the run finishes. Don't share the Classroom invite URL with students yet — if the real run ends up failing, you don't want students hitting a broken assignment.

If pending lasts more than 5 minutes, click the View Repository button → Actions tab to check directly. If the run is still running (slow runner), keep waiting. If it's not present at all, GitHub may have queued it but not started — click Re-run all jobs on the most recent run.

State 2: Validated — autograder passed (green checkmark)

Validated — GitHub Actions autograder passed

The real autograder run scored 100% against your solution branch. The Classroom setup guide unlocks below the banner.

What to do: proceed to Setting up your GitHub Classroom assignment. You can confidently share the Classroom invite URL with students — the grading pipeline is verified end-to-end.

State 3: Validation failed — autograder did not pass (red ✗)

Validation failed — GitHub Actions autograder did not passThe real GitHub Actions run scored less than 100% against the solution branch. Click "View on GitHub" to see the failure details.

This means CodeTeach's replica passed but real GHA did not. That's a drift between the two — usually our bug, occasionally GitHub-side flakiness.

What to do:

  1. Click "View on GitHub" in the banner — opens the failed Actions run. Look at the autograder step's logs to see which test failed and why.
  2. Compare to what passed locally. The same test passed in CodeTeach's sandbox. The culprit is usually one of:
    • A POSIX-shell incompatibility (test command used bash-isms; real grader runs /bin/sh)
    • A timing-sensitive test (e.g., clock-based output) that produced different output on the GitHub runner
    • An environment difference (Python version, locale, line-endings)
  3. Two recovery paths:
    • Option A (preferred): Fix the issue in CodeTeach's Review & Edit tabs, re-validate, then re-deploy. The new push triggers a new GHA run, which should pass.
    • Option B (manual): Edit the workflow file directly on GitHub if the fix is small (e.g., swap one bash-ism for POSIX). Re-trigger the workflow.

The Classroom setup guide is hidden while the banner is red. We don't want you handing students an assignment whose autograder doesn't actually grade.

If the real-GHA failure looks like a CodeTeach-replica drift, file a bug report via the chat widget so we can fix the replica. Each report makes the next deploy more reliable.

Why this banner exists

Without it, you'd deploy, share the invite URL, students would push code, and the grader would silently fail — no grade or a wrong grade with no explanation. The post-push banner catches the drift before any student ever sees the assignment.

It's also why CodeTeach gates the Classroom setup wizard on the banner being green. We never invite the instructor to hand a failing assignment to students.

Polling cadence and when it stops

CodeTeach polls every 10 seconds for the first 5 minutes, then every 30 seconds for the next 10 minutes, then stops. If the GHA run takes longer than ~15 minutes, the banner shows "validation pending" indefinitely until you refresh the page (which restarts polling).

If the banner is wrong (e.g., shows pending forever but the actual GHA run finished green), refreshing the page picks up the latest state.

What if I'm in a hurry?

If you've deployed and the Classroom assignment date is now, you might be tempted to share the invite URL while validation is still pending. Don't. Students who push before the autograder is verified working might see misleading grades. Wait the 1–3 minutes — it's a short wait that prevents a much longer fix.

Re-running the post-push check after a manual GitHub fix

If the banner shows red and you fix the workflow on GitHub directly (option B above), the banner won't auto-update — it watches the first GHA run after deploy. To force a re-check:

  1. Click View Repository → make a trivial commit on the solution branch (anything that triggers the workflow)
  2. Refresh the CodeTeach Deploy step
  3. CodeTeach picks up the new most-recent run and updates the banner

This is a workaround for an edge case; in the normal flow, fixing in CodeTeach + re-deploying handles everything.

Re-deploy decision: I've already shared the invite URL

If post-push validation fails after you've already shared the Classroom invite URL with students, you have a hard choice:

  • Delete the broken Classroom assignment, deploy a new one with a different repo name, share a new invite URL. Students who already accepted lose their work (their forks are based on the broken template).
  • Push the fix directly to the existing repo's main branch. New students who accept get the fix; existing students keep working from the old fork (their grader runs against their own fork's workflow, which is unchanged).

In practice, option two is almost always better for students who've already started. They keep their progress; you live with the grader being slightly broken on submissions made before the fix.

Where to go next

  • Banner is green?Setting up your GitHub Classroom assignment.
  • Banner is red? → Click View on GitHub to see the failure, then fix in CodeTeach and re-deploy.
  • Banner is pending forever? → Check the GHA run directly via View Repository → Actions tab. If you see no run at all, click Re-run all jobs on the most recent.