Skip to content

feat: org-wide status dashboard served from platform repo #17

@kristopherjturner

Description

@kristopherjturner

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:

  1. Authenticate with GitHub API using a scoped org-level token or GitHub App
  2. 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
  3. Render index.html from a template
  4. Commit output to gh-pages branch
  5. 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

  • Dashboard accessible at platform.azurelocal.cloud (or agreed URL)
  • All AzureLocal org repos appear on the dashboard
  • CI status reflects the actual last workflow run for each repo
  • Last 5 workflow runs shown per repo with pass/fail icons
  • Dashboard refreshes on schedule (every 30 min) and on repository_dispatch
  • At least one existing repo CI workflow triggers a dashboard refresh on completion
  • Reusable notify workflow added to .github repo for other repos to opt in
  • Dashboard is mobile-readable (responsive layout)
  • No manual steps required after initial setup — fully automated

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions