[bug] [post-suspension] All upptime workflows fail with api.github.com 401 — replace upptime with Gitea-native uptime stack #2
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Every Gitea Actions run in
molecule-ai-statusfails becauseupptime/uptime-monitorcallsapi.github.comand gets401 Bad credentials. Diagnosis: upptime is structurally GitHub-coupled (assumes GitHub Pages + GitHub Actions + GitHub API for releases, issues, result-commits, status badges). Post the 2026-05-06 GitHub org suspension, no token in our org authenticates there anymore.secrets.GITHUB_TOKENis auto-populated by Gitea Actions but it's a Gitea token —api.github.comrejects it.Failing run
https://git.moleculesai.app/molecule-ai/molecule-ai-status/actions/runs/70/jobs/0
Last log lines:
The action's HTTP call:
Affected surface
All 5 workflows in this repo are upptime-dependent:
graphs.yml— daily long-term graphsresponse-time.yml— hourly response-time histogramsstatic-site.yml— daily static-site rebuild + publishsummary.yml— README summary updateuptime.yml— actual uptime probesEach calls
upptime/uptime-monitor@v1.41.0withcommand: "<phase>". All fail at the sameapi.github.com401.Why this won't self-recover
GH_PATfrom suspended-org members can't be re-issued (the org is gone).molecule-ai/molecule-ai-status), which lives on Gitea, not GitHub. Read-only PAT works for the version-lookup call but the result-commit/issue-create steps still fail because they try to write toapi.github.com/repos/molecule-ai/molecule-ai-status/...(which is 404 for our suspended org).api.github.comfor writes is the wrong direction even if it could be temporarily fixed.Proper fix — replace upptime with a Gitea-native uptime stack
Per
feedback_no_single_source_of_truth+ the post-2026-05-06 north-star: vendor-neutral, runs on our own infra. Three viable replacements ranked by effort:Option A —
Uptime Kuma(self-hosted on operator host)status.moleculesai.app. Built-in slack/email/webhook alerting..upptimerc.yml.Option B — Custom Go probe binary + Gitea Actions cron + Vercel-served static page
.upptimerc.yml(or our own format) and probes the listed endpoints.history/directory, and triggers a Vercel/Gitea Pages rebuild of the status page.git.moleculesai.app.Option C — External SaaS (Better Stack, Cronitor, Checkly, Datadog Synthetics)
Recommendation
Option B if we want the long-term proper answer (matches the migration philosophy). Option A if we want a working status page within an afternoon. Option C if uptime-monitoring is not strategic and we just want it off our radar.
Whatever we pick, the existing 5 workflows in this repo should be disabled or removed in the same PR — leaving them red is noise, and they'll keep firing on schedule.
Acceptance criteria
molecule-ai-statusover a full 7-day window..upptimerc.ymlcontent.api.github.comis reachable from zero of our scheduled jobs (verified via outbound traffic audit).Out of scope
history/JSON files) — track separately if archive value warrants it.Reporter
Hongming asked "why this CICD red" pointing at run #70. Diagnosed via the Gitea web log endpoint (
/{owner}/{repo}/actions/runs/{id}/jobs/{idx}/logsworks with admin-scope token, contradicting earlier 404s under the persona-token v2 contract). 2026-05-08.Phase 1 + 2 done — page live, awaiting one DNS record
Built
9e8511f).upptimerc.yml(7/7 endpoints green, 148-357ms latency).github/workflows/uptime-probe.ymlruns every 5 minsite/(PR #4) + Vercel projectmolecule-ai-statussite/vercel.json/data/*→git.moleculesai.app/.../raw/branch/main/*(works around Gitea raw-URL CORS)molecule-ai-statusstatus.moleculesai.appregistered (verified=true)Architecture (loose-coupled)
One DNS update needed
status.moleculesai.apptoday CNAMEs tomolecule-ai.github.io— the dead GitHub Pages from the old upptime site. Need to flip it to point at Vercel.In Cloudflare → moleculesai.app → DNS → edit the existing
statusCNAME:statuscname.vercel-dns.comSame Zone:DNS:Edit token-scope gap as the
go.moleculesai.appresponder deploy (responder#1) — I can't do this via API. ~20 seconds in the dashboard.Verification once DNS lands
After PR #4 merges and the cron runs at least once, the page will render real probe data. Until then the page loads but shows "no probe data yet" for each site.
What's left (smaller follow-ups)
history/*.jsonfiles (upptime-format) — separate decision.Generated with Claude Code.