diff --git a/reports/workflow-reuse.md b/reports/workflow-reuse.md index fd6b03be..6759cd42 100644 --- a/reports/workflow-reuse.md +++ b/reports/workflow-reuse.md @@ -1,12 +1,12 @@ # 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 @@ -14,16 +14,15 @@ Downstream copies of each hub canonical. A variant is a cluster of copies each a | 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 | @@ -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 @@ -55,19 +54,19 @@ 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 @@ -75,15 +74,12 @@ Each variant names the repos whose copies cluster together, so a hub task's inpu - 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 @@ -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` @@ -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)