Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 37 additions & 42 deletions reports/workflow-reuse.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,28 @@
# Fleet workflow reuse report

Generated by `python3 spec/workflow_reuse.py --report` at hub `76f15b3` - 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`][fidelity-model] "Normalization". Git dates this file. The target model and the migration phases are in [`docs/reusable-workflows.md`][reusable-workflows].
Generated by `python3 spec/workflow_reuse.py --report` at hub `5ce0374` - 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`][fidelity-model] "Normalization". Git dates this file. The target model and the migration phases are in [`docs/reusable-workflows.md`][reusable-workflows].

## Fleet Total

- **104 workflow files, 10,358 lines** across 20 downstream repos, 96 of them named for a hub canonical. No workflow at all in EspDinIoT.
- **3,654 lines (35%) 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:`: 3.** That is the state every carried copy converges to, so this number rises and the two above fall as the migration lands.
- **101 workflow files, 9,592 lines** across 20 downstream repos, 92 of them named for a hub canonical. No workflow at all in EspDinIoT.
- **3,513 lines (37%) 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:`: 19.** That is the state every carried copy converges to, so this number rises and the two above fall as the migration lands.

## Per Workflow

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 |
| --- | --- | --- | --- | --- | --- |
| `build-release-task.yml` | 9 | 1,709 | 891 | 6 | 0 |
| `test-pull-request.yml` | 20 | 1,661 | 497 | 14 | 1 |
| `merge-bot-pull-request.yml` | 16 | 1,626 | 203 | 8 | 1 |
| `publish-release.yml` | 17 | 1,374 | 416 | 13 | 1 |
| `validate-task.yml` | 13 | 1,214 | 442 | 11 | 0 |
| `build-release-task.yml` | 9 | 1,709 | 827 | 6 | 0 |
| `test-pull-request.yml` | 20 | 1,615 | 501 | 14 | 6 |
| `merge-bot-pull-request.yml` | 17 | 1,401 | 276 | 7 | 6 |
| `publish-release.yml` | 17 | 1,335 | 506 | 15 | 6 |
| `validate-task.yml` | 9 | 891 | 323 | 7 | 0 |
| `build-docker-task.yml` | 4 | 512 | 266 | 4 | 0 |
| `get-version-task.yml` | 7 | 439 | 342 | 4 | 0 |
| `publish-plan-task.yml` | 3 | 252 | 207 | 1 | 0 |
| `deploy-site-task.yml` | 1 | 191 | 113 | 1 | 0 |
| `run-codegen-pull-request-task.yml` | 2 | 161 | 130 | 1 | 0 |
| `publish-plan-task.yml` | 3 | 252 | 198 | 1 | 0 |
| `run-codegen-pull-request-task.yml` | 2 | 161 | 127 | 1 | 0 |
| `check-upstream-version-task.yml` | 1 | 133 | 93 | 1 | 0 |
| `run-periodic-codegen-pull-request.yml` | 2 | 48 | 29 | 2 | 0 |
| `publish-docker-readme-task.yml` | 1 | 34 | 25 | 1 | 0 |
Expand All @@ -40,12 +39,12 @@ Each variant names the repos whose copies cluster together, so a hub task's inpu
- 1: aiopurpleair
- 1: homeassistant-purpleair
- `test-pull-request.yml`
- 2: AudioCleaner, Financial-Modeling
- 1: AudioCleaner
- 1: Blog
- 2: DevKitCIoT, HolidayLights
- 1: ESPHome-Config
- 1: ESPHome-NonRoot
- 1: HomeAssistant-Config
- 2: Financial-Modeling, HomeAssistant-Config
- 1: HomeAutomation-Config
- 1: KiCadLibrary
- 4: LanguageTags, MediaTools, Utilities, aiopurpleair
Expand All @@ -55,35 +54,32 @@ Each variant names the repos whose copies cluster together, so a hub task's inpu
- 1: Vantage-Config
- 1: homeassistant-purpleair
- `merge-bot-pull-request.yml`
- 1: Blog
- 6: ESPHome-Config, HomeAssistant-Config, HomeAutomation-Config, PlexCleaner, Utilities, Vantage-Config
- 6: Blog, ESPHome-Config, Financial-Modeling, HomeAssistant-Config, HomeAutomation-Config, PhotoCleaner
- 3: ESPHome-NonRoot, NxWitness, homeassistant-purpleair
- 1: KiCadLibrary
- 1: LanguageTags
- 2: MediaTools, aiopurpleair
- 1: PhotoCleaner
- 3: PlexCleaner, Utilities, Vantage-Config
- 1: VSCode-Server-DotNetCore
- `publish-release.yml`
- 1: Blog
- 2: ESPHome-Config, Vantage-Config
- 1: ESPHome-Config
- 1: ESPHome-NonRoot
- 3: Financial-Modeling, HomeAssistant-Config, HomeAutomation-Config
- 1: Financial-Modeling
- 2: HomeAssistant-Config, HomeAutomation-Config
- 1: KiCadLibrary
- 2: LanguageTags, MediaTools
- 1: NxWitness
- 1: PhotoCleaner
- 1: PlexCleaner
- 1: Utilities
- 1: VSCode-Server-DotNetCore
- 1: Vantage-Config
- 1: aiopurpleair
- 1: homeassistant-purpleair
- `validate-task.yml`
- 3: AudioCleaner, MediaTools, Utilities
- 1: Blog
- 1: ESPHome-NonRoot
- 1: Financial-Modeling
- 1: HomeAssistant-Config
- 1: HomeAutomation-Config
- 1: LanguageTags
- 1: NxWitness
- 1: PlexCleaner
Expand All @@ -101,8 +97,6 @@ Each variant names the repos whose copies cluster together, so a hub task's inpu
- 1: homeassistant-purpleair
- `publish-plan-task.yml`
- 3: ESPHome-NonRoot, NxWitness, Utilities
- `deploy-site-task.yml`
- 1: Blog
- `run-codegen-pull-request-task.yml`
- 2: LanguageTags, NxWitness
- `check-upstream-version-task.yml`
Expand All @@ -117,34 +111,35 @@ Each variant names the repos whose copies cluster together, so a hub task's inpu

| Repo | Files | Lines | Identical to hub | Callers | Repo-local files |
| --- | --- | --- | --- | --- | --- |
| AudioCleaner | 2 | 134 | 58 | 0 | - |
| Blog | 6 | 560 | 229 | 0 | `deploy-site.yml` |
| AudioCleaner | 2 | 134 | 57 | 0 | - |
| Blog | 4 | 220 | 97 | 4 | `deploy-site.yml` |
| DevKitCIoT | 1 | 58 | 25 | 0 | - |
| ESPHome-Config | 3 | 450 | 61 | 0 | - |
| ESPHome-NonRoot | 11 | 1,154 | 451 | 0 | `check-upstream-dependency.yml`, `check-upstream-version.yml` |
| Financial-Modeling | 3 | 233 | 85 | 0 | - |
| ESPHome-Config | 3 | 327 | 113 | 3 | - |
| ESPHome-NonRoot | 11 | 1,154 | 457 | 0 | `check-upstream-dependency.yml`, `check-upstream-version.yml` |
| Financial-Modeling | 3 | 137 | 77 | 3 | - |
| HolidayLights | 1 | 53 | 25 | 0 | - |
| HomeAssistant-Config | 4 | 247 | 89 | 0 | - |
| HomeAutomation-Config | 4 | 248 | 87 | 0 | - |
| KiCadLibrary | 6 | 772 | 198 | 0 | `build-datebadge-task.yml` |
| LanguageTags | 7 | 724 | 305 | 0 | - |
| MediaTools | 5 | 530 | 212 | 0 | - |
| NxWitness | 10 | 1,102 | 378 | 0 | `build-base-images-task.yml` |
| PhotoCleaner | 3 | 203 | 86 | 3 | - |
| PlexCleaner | 8 | 805 | 356 | 0 | `build-executable-task.yml` |
| Utilities | 6 | 621 | 294 | 0 | - |
| HomeAssistant-Config | 3 | 124 | 98 | 3 | - |
| HomeAutomation-Config | 4 | 164 | 99 | 3 | `test-homelab-runner.yml` |
| KiCadLibrary | 6 | 772 | 201 | 0 | `build-datebadge-task.yml` |
| LanguageTags | 7 | 724 | 280 | 0 | - |
| MediaTools | 5 | 530 | 188 | 0 | - |
| NxWitness | 10 | 1,102 | 375 | 0 | `build-base-images-task.yml` |
| PhotoCleaner | 3 | 203 | 85 | 3 | - |
| PlexCleaner | 8 | 805 | 362 | 0 | `build-executable-task.yml` |
| Utilities | 6 | 621 | 266 | 0 | - |
| VSCode-Server-DotNetCore | 8 | 563 | 294 | 0 | - |
| Vantage-Config | 3 | 229 | 59 | 0 | - |
| aiopurpleair | 6 | 611 | 222 | 0 | - |
| homeassistant-purpleair | 7 | 1,061 | 140 | 0 | `check-ha-version.yml`, `test-release-task.yml` |
| aiopurpleair | 6 | 611 | 220 | 0 | - |
| homeassistant-purpleair | 7 | 1,061 | 135 | 0 | `check-ha-version.yml`, `test-release-task.yml` |

## Repo-Local Workflows

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` (55 lines)
- **Blog** `deploy-site.yml` (70 lines)
- **ESPHome-NonRoot** `check-upstream-dependency.yml` (111 lines)
- **ESPHome-NonRoot** `check-upstream-version.yml` (41 lines)
- **HomeAutomation-Config** `test-homelab-runner.yml` (43 lines)
- **KiCadLibrary** `build-datebadge-task.yml` (37 lines)
- **NxWitness** `build-base-images-task.yml` (89 lines)
- **PlexCleaner** `build-executable-task.yml` (107 lines)
Expand Down