Skip to content

feat: add Wall of Honour - #1

Merged
sakanni merged 16 commits into
mainfrom
feat/wall-of-honour
Jun 8, 2026
Merged

sakanni merged 16 commits into
mainfrom
feat/wall-of-honour

Conversation

@sakanni

@sakanni sakanni commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Monthly-refreshed contributors grid on the BHoM org profile page (github.com/BHoM)
  • Lists every human contributor across all BHoM org repos, alphabetically, with avatar + display name
  • ~150 LOC Python using default GITHUB_TOKEN. No PAT, no GitHub App.
  • 25/25 offline pytest assertions cover pagination, retry, bot filtering, aggregation, display-name fallback, unicode-aware alphabetical sort, marker splice + bootstrap + idempotency, end-to-end pipeline

Files added

  • `requirements.txt`: pinned requests, pytest, responses
  • `scripts/github_api.py`: Session wrapper with retry + paginated GET
  • `scripts/generate_wall_of_honour.py`: all 7 pipeline functions + main()
  • `scripts/tests/test_github_api.py` + `scripts/tests/test_generate.py`: 25 mocked-API tests
  • `.github/workflows/test-scripts.yml`: pytest CI on push/PR for scripts/
  • `.github/workflows/wall-of-honour.yml`: monthly cron (1st of month 06:00 UTC) + workflow_dispatch
  • `profile/README.md`: wall markers appended (existing intro preserved)

Test plan

  • `Test scripts / test` check passes on this PR
  • Dispatch `Generate Wall of Honour` from this branch via Actions UI: verify `profile/README.md` regenerates with real BHoM contributors
  • Inspect auto-commit diff for sanity (alphabetical order, no bots, name fallback working)
  • After merge, verify the rendered profile page at github.com/BHoM

Spec / Plan references

  • Spec: workspace-root `docs/superpowers/specs/2026-06-08-bhom-wall-of-honour-design.md`
  • Plan: workspace-root `docs/superpowers/plans/2026-06-08-bhom-wall-of-honour.md`

sakanni added 16 commits June 8, 2026 11:06
Adds DENYLISTED_LOGINS frozenset and filter_denylist function applied
after filter_bots in main(). Catches non-human accounts that don't have
type=Bot or a [bot] login suffix:

- BHoMBot: BHoM org automation bot
- BuroHappold1: shared "Administrator" account

Wall regenerated against real BHoM org: 153 -> 151 unique contributors.
Layout:
- Drop avatar size 100 -> 70; bump grid 7 -> 10 cols
- Fixed cell width (80px) + padded incomplete rows for uniform alignment
- valign="top" anchors avatars to top so wrapped names don't push them around
- cellpadding="4" cellspacing="0" for compact spacing
- Wrap heading/table/stats in <div align="center">
- Add hr separator above wall to space it from preceding README content

Content:
- Replace "## Wall of Honour" heading with prose intro:
  "Contributors who have supported and advanced the BHoM."
- Replace "X people have contributed to BHoM" with footer stats:
  "N contributors across M repositories. Last updated YYYY-MM-DD."
- Pluralization helper so 1/N both read correctly

Names:
- Truncate display names >15 chars with ellipsis
- Full name still available via title attr swapped to @login (GitHub alias)
- HTML-escape display in <sub> for special characters

Resilience:
- enrich_display_names catches HTTPError so deleted accounts (404 on
  users/{login}) fall back to login instead of crashing the workflow

Tests:
- Anonymize fixtures: replace Thomas Edward Kingstone with mocklongname
- 35/35 passing
@sakanni
sakanni merged commit 43d3863 into main Jun 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant