Generated by python3 spec/workflow_reuse.py --report at hub ddaeefb4 - do not hand-edit. Each row reads a repo's ground-truth branch at generation time and compares it against the hub canonical of the same name after line-ending, action-pin, and job-needs normalization, per spec/fidelity-model.md "Normalization". Git dates this file. The target model and the migration phases are in docs/reusable-workflows.md.
- 69 workflow files, 5,382 lines across 20 downstream repos, 64 of them named for a hub canonical. No workflow at all in EspDinIoT.
- 2,133 lines (40%) are byte-identical to a hub canonical after normalization, which is the confirmed duplication. The rest is mostly a per-repo edit of the same canonical rather than independent code.
- Files reaching a hub reusable workflow or composite action through a pinned
uses:: 51. That is the state every carried copy converges to, so this number rises and the two above fall as the migration lands.
Downstream copies of each hub canonical. A variant is a cluster of copies each at or above 0.85 similarity to the cluster's first member, so the cluster count is how many distinct shapes of one workflow the fleet runs today. Callers are the copies that already reach the hub rather than carrying the job bodies.
| File | Copies | Lines | Identical to hub | Variants | Callers |
|---|---|---|---|---|---|
test-pull-request.yml |
20 | 1,720 | 594 | 15 | 16 |
publish-release.yml |
17 | 1,566 | 687 | 14 | 16 |
merge-bot-pull-request.yml |
17 | 565 | 348 | 3 | 16 |
validate-task.yml |
3 | 352 | 102 | 3 | 0 |
build-release-task.yml |
1 | 140 | 89 | 1 | 0 |
check-upstream-version-task.yml |
1 | 132 | 94 | 1 | 0 |
build-docker-task.yml |
1 | 124 | 61 | 1 | 0 |
publish-plan-task.yml |
1 | 84 | 66 | 1 | 0 |
get-version-task.yml |
1 | 56 | 49 | 1 | 0 |
run-periodic-codegen-pull-request.yml |
2 | 52 | 43 | 2 | 2 |
Each variant names the repos whose copies cluster together, so a hub task's inputs and hooks can be designed against the shapes that exist rather than against the canonical alone.
test-pull-request.yml- 1: AudioCleaner
- 1: Blog
- 2: DevKitCIoT, HolidayLights
- 1: ESPHome-Config
- 1: ESPHome-NonRoot
- 3: Financial-Modeling, HomeAssistant-Config, Vantage-Config
- 1: HomeAutomation-Config
- 1: KiCadLibrary
- 3: LanguageTags, MediaTools, Utilities
- 1: NxWitness
- 1: PhotoCleaner
- 1: PlexCleaner
- 1: VSCode-Server-DotNetCore
- 1: aiopurpleair
- 1: homeassistant-purpleair
publish-release.yml- 1: Blog
- 1: ESPHome-Config
- 1: ESPHome-NonRoot
- 1: Financial-Modeling
- 2: HomeAssistant-Config, Vantage-Config
- 1: HomeAutomation-Config
- 1: KiCadLibrary
- 3: LanguageTags, MediaTools, Utilities
- 1: NxWitness
- 1: PhotoCleaner
- 1: PlexCleaner
- 1: VSCode-Server-DotNetCore
- 1: aiopurpleair
- 1: homeassistant-purpleair
merge-bot-pull-request.yml- 15: Blog, ESPHome-Config, Financial-Modeling, HomeAssistant-Config, HomeAutomation-Config, KiCadLibrary, LanguageTags, MediaTools, NxWitness, PlexCleaner, Utilities, VSCode-Server-DotNetCore, Vantage-Config, aiopurpleair, homeassistant-purpleair
- 1: ESPHome-NonRoot
- 1: PhotoCleaner
validate-task.yml- 1: AudioCleaner
- 1: ESPHome-NonRoot
- 1: PlexCleaner
build-release-task.yml- 1: ESPHome-NonRoot
check-upstream-version-task.yml- 1: ESPHome-NonRoot
build-docker-task.yml- 1: ESPHome-NonRoot
publish-plan-task.yml- 1: ESPHome-NonRoot
get-version-task.yml- 1: ESPHome-NonRoot
run-periodic-codegen-pull-request.yml- 1: LanguageTags
- 1: NxWitness
| Repo | Files | Lines | Identical to hub | Callers | Repo-local files |
|---|---|---|---|---|---|
| AudioCleaner | 2 | 134 | 57 | 0 | - |
| Blog | 4 | 227 | 99 | 4 | deploy-site.yml |
| DevKitCIoT | 1 | 58 | 33 | 0 | - |
| ESPHome-Config | 3 | 277 | 122 | 3 | - |
| ESPHome-NonRoot | 11 | 1,153 | 461 | 0 | check-upstream-dependency.yml, check-upstream-version.yml |
| Financial-Modeling | 3 | 143 | 107 | 3 | - |
| HolidayLights | 1 | 53 | 33 | 0 | - |
| HomeAssistant-Config | 3 | 123 | 94 | 3 | - |
| HomeAutomation-Config | 4 | 196 | 100 | 3 | test-homelab-runner.yml |
| KiCadLibrary | 3 | 205 | 89 | 3 | - |
| LanguageTags | 4 | 302 | 106 | 4 | - |
| MediaTools | 3 | 268 | 87 | 3 | - |
| NxWitness | 4 | 330 | 104 | 4 | - |
| PhotoCleaner | 3 | 230 | 90 | 3 | - |
| PlexCleaner | 4 | 335 | 120 | 3 | - |
| Utilities | 3 | 263 | 85 | 3 | - |
| VSCode-Server-DotNetCore | 3 | 169 | 86 | 3 | - |
| Vantage-Config | 3 | 122 | 92 | 3 | - |
| aiopurpleair | 3 | 250 | 87 | 3 | - |
| homeassistant-purpleair | 4 | 544 | 81 | 3 | check-ha-version.yml |
A workflow no hub canonical names. Each is either genuinely repo-specific, and stays, or a candidate for a hub task with a hook, and the design doc lists which.
- Blog
deploy-site.yml(73 lines) - ESPHome-NonRoot
check-upstream-dependency.yml(111 lines) - ESPHome-NonRoot
check-upstream-version.yml(41 lines) - HomeAutomation-Config
test-homelab-runner.yml(51 lines) - homeassistant-purpleair
check-ha-version.yml(315 lines)