This file documents the human-ops steps required to bring status.instanode.dev from a placeholder (Jekyll-rendered README.md) to a fully rendered Upptime status page with live badges, graphs, and response-time history.
- DNS:
status.instanode.devCNAMEs toinstanode-dev.github.io(verified — HTTP/2 200). - GitHub Pages: enabled on this repo, source =
masterbranch root. Uptime CI: green every 5 min — probes are running and thehistory/*.ymlrecords exist.Summary CI,Graphs CI,Response Time CI: failing — workflows produce the correct artifacts butgit pushtomasteris rejected by branch protection (enforce_admins: true).Static Site CI: deleted in this PR — the upstream actionupptime/status-page@masterno longer exists. The Jekyll-renderedREADME.mdis the status page, which is the modern Upptime default. No separate static-site step is needed.
Without Summary CI / Graphs CI ever succeeding, the README.md was never auto-rewritten to include the badge table, uptime percentages, and response-time graphs. So Jekyll renders the manually-authored README. Once the workflows can push, the README is regenerated daily and the page transforms.
A scheduled GitHub Action using the default GITHUB_TOKEN is not allowed to bypass branch protection — that's the entire point of the protection. The Upptime docs recommend a personal access token with repo scope.
GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token (classic)
Note: "instant-status push token"
Expiration: 1 year (or longer)
Scopes: repo (full control of private repos)
Generate → copy the token (starts with ghp_)
github.com/InstaNode-dev/instant-status → Settings → Secrets and variables → Actions → New repository secret
Name: GH_PAT
Value: <paste the ghp_ token>
All four Upptime workflows already reference secrets.GH_PAT || secrets.GITHUB_TOKEN so no workflow edits are needed.
The PAT must be owned by a user listed in branch-protection bypass, OR enforce_admins must be false. Pick one:
Option A (recommended): turn off enforce_admins
gh api -X DELETE repos/InstaNode-dev/instant-status/branches/master/protection/enforce_adminsThis keeps PR review requirements in place for humans but lets admin-PAT pushes through. Re-enable with:
gh api -X POST repos/InstaNode-dev/instant-status/branches/master/protection/enforce_adminsOption B: allow specific bypass actors — Repo Settings → Branches → branch protection rule → "Allow specified actors to bypass required pull requests" → add the PAT owner.
Once the secret + protection bypass are in place:
Actions tab → Setup CI → Run workflow → on master
This bootstraps api/, history/, and graphs/. After it succeeds, the next scheduled Summary CI run (00:00 UTC) will rewrite README.md with the live status table — or you can run Summary CI manually from the Actions tab to see it immediately.
# 1. README on master now contains a badge table:
gh api repos/InstaNode-dev/instant-status/contents/README.md \
| jq -r .content | base64 -d | head -40
# 2. Status site reflects it (Pages can take ~60 s to rebuild after a master push):
curl -s https://status.instanode.dev | grep -c '<img.*shields.io'
# Expect: >0 (one badge per monitored service)
# 3. Uptime workflows continue green every 5 min:
gh run list --repo InstaNode-dev/instant-status --workflow=uptime.yml --limit 3If anything goes wrong, just revert this PR — the previous workflows + 3-service config will resume. The history/ and api/ directories generated by future Uptime CI runs are append-only and harmless.