Overview
Build a single-pane-of-glass status dashboard that aggregates the health and CI state of every repo in the AzureLocal GitHub org. The dashboard is generated and served entirely from azurelocal-platform — no other repo is modified to host it.
Goals
- One URL that shows the live status of every AzureLocal repo
- CI pass/fail visible at a glance without clicking into individual repos
- Near-real-time updates — not just scheduled polling
- No external tooling, no third-party dashboards, no new infrastructure
Architecture
1. GitHub Pages from platform repo
Enable GitHub Pages on the azurelocal-platform repo (from gh-pages branch). Configure a CNAME so the dashboard is accessible at platform.azurelocal.cloud or similar. No other repo is involved in hosting.
2. Dashboard generator workflow
New workflow in azurelocal-platform: .github/workflows/generate-dashboard.yml
Triggers:
- Schedule: every 30 minutes
workflow_dispatch for manual refresh
repository_dispatch with event type dashboard-refresh (called by other repos on CI completion — see below)
Steps:
- Authenticate with GitHub API using a scoped org-level token or GitHub App
- Query every repo in the AzureLocal org for:
- Latest release tag and version
- Last commit timestamp and author
- Last 5 workflow runs (name, status, conclusion, run URL)
- Open issue count
- Open PR count
- Render
index.html from a template
- Commit output to
gh-pages branch
- GitHub Pages serves it automatically
3. Event-driven refresh via .github repo
Add a reusable workflow to the org .github repo:
.github/workflows/reusable-notify-dashboard.yml
Any repo's CI workflow calls this on completion:
jobs:
notify-dashboard:
uses: AzureLocal/.github/.github/workflows/reusable-notify-dashboard.yml@main
secrets: inherit
The reusable workflow fires a repository_dispatch POST to azurelocal-platform, triggering an immediate dashboard regeneration. This means a new release or a failed CI run updates the dashboard within seconds.
Dashboard content
Header bar
- Org name + logo
- Total repo count
- Passing / failing / in-progress counts (colored)
- Last updated timestamp
Per-repo row or card
| Field |
Source |
| Repo name |
GitHub API |
| Latest release |
Latest tag via API |
| Overall CI status |
Last workflow run conclusion |
| Last 5 run history |
Workflow runs API (icons: ✓ ✗ ⟳) |
| Open issues |
Issues API |
| Open PRs |
Pulls API |
| Last commit |
Commits API |
Clicking a repo name goes directly to that GitHub repo. Clicking a workflow run icon goes to that run.
Color coding
- Green — all workflows passing, no failures
- Red — one or more workflows failed
- Yellow — workflow in progress or no recent runs
- Gray — repo has no workflows configured
Files to create
.github/workflows/generate-dashboard.yml — scheduled + dispatch generator workflow
dashboard/template.html — HTML/CSS/JS template the workflow populates
dashboard/generate.ps1 or dashboard/generate.js — script that queries the API and renders the template
gh-pages branch — auto-managed by the workflow, not manually edited
Files to update (existing)
azurelocal-platform reusable workflows — add repository_dispatch call at completion so CI events from repos that already use platform reusable workflows automatically trigger a dashboard refresh
- Org
.github repo — add reusable-notify-dashboard.yml
Secrets / permissions required
- A GitHub PAT or GitHub App token with
repo and actions:read scope across the org, stored as an org-level secret (e.g. ORG_DASHBOARD_TOKEN)
- GitHub Pages enabled on
azurelocal-platform
- CNAME DNS record pointing to GitHub Pages (if using custom domain)
Acceptance criteria
Overview
Build a single-pane-of-glass status dashboard that aggregates the health and CI state of every repo in the AzureLocal GitHub org. The dashboard is generated and served entirely from
azurelocal-platform— no other repo is modified to host it.Goals
Architecture
1. GitHub Pages from platform repo
Enable GitHub Pages on the
azurelocal-platformrepo (fromgh-pagesbranch). Configure a CNAME so the dashboard is accessible atplatform.azurelocal.cloudor similar. No other repo is involved in hosting.2. Dashboard generator workflow
New workflow in
azurelocal-platform:.github/workflows/generate-dashboard.ymlTriggers:
workflow_dispatchfor manual refreshrepository_dispatchwith event typedashboard-refresh(called by other repos on CI completion — see below)Steps:
index.htmlfrom a templategh-pagesbranch3. Event-driven refresh via
.githubrepoAdd a reusable workflow to the org
.githubrepo:.github/workflows/reusable-notify-dashboard.ymlAny repo's CI workflow calls this on completion:
The reusable workflow fires a
repository_dispatchPOST toazurelocal-platform, triggering an immediate dashboard regeneration. This means a new release or a failed CI run updates the dashboard within seconds.Dashboard content
Header bar
Per-repo row or card
Clicking a repo name goes directly to that GitHub repo. Clicking a workflow run icon goes to that run.
Color coding
Files to create
.github/workflows/generate-dashboard.yml— scheduled + dispatch generator workflowdashboard/template.html— HTML/CSS/JS template the workflow populatesdashboard/generate.ps1ordashboard/generate.js— script that queries the API and renders the templategh-pagesbranch — auto-managed by the workflow, not manually editedFiles to update (existing)
azurelocal-platformreusable workflows — addrepository_dispatchcall at completion so CI events from repos that already use platform reusable workflows automatically trigger a dashboard refresh.githubrepo — addreusable-notify-dashboard.ymlSecrets / permissions required
repoandactions:readscope across the org, stored as an org-level secret (e.g.ORG_DASHBOARD_TOKEN)azurelocal-platformAcceptance criteria
platform.azurelocal.cloud(or agreed URL)repository_dispatch.githubrepo for other repos to opt in