Skip to content

feat: Backstage 1.55.0 remove ignored github:repo:create inputs - #170

Merged
schultzp2020 merged 17 commits into
mainfrom
feat/v1.55.0/remove-ignored-github-repo-create-inputs
Oct 13, 2026
Merged

schultzp2020 merged 17 commits into
mainfrom
feat/v1.55.0/remove-ignored-github-repo-create-inputs

Conversation

@schultzp2020

@schultzp2020 schultzp2020 commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Closes #153. For Backstage 1.55.0 Template YAML, remove the 20 now-ignored direct input keys only on spec.steps[] with exact action: github:repo:create. Preserve unrelated steps/keys, comments, YAML spelling, and multi-document boundaries. Quoted target actions under tags/anchors, including aliases to quoted anchors, receive an idempotent review TODO rather than silently skipping affected input. Folded github:repo:create-extra stays untouched. An unreferenced anchored input mapping is edited directly; shared anchored input, merges, ambiguous aliases/expressions, and folded target actions retain original input and receive a review TODO. No AI fixup.

Fixture before → after (the non-target github:repo:push step retains its protectDefaultBranch):

     - id: create

       action: github:repo:create

       input:

         repoUrl: github.com?repo=demo&owner=team

-        protectDefaultBranch: true

-        sourcePath: ./skeleton

-        requiredLinearHistory: true

         description: keep me

Package name: @backstage/remove-ignored-repo-create-inputs (44 chars), rather than the 51-character ID proposed in #153; approved to satisfy the registry limit. Minor changeset: .changeset/little-emus-invite.md. Root README.md is byte-identical to current PR base (594ea8f5735e99fa549d3efe9228c145f2cf3d67): manual README index sync remains separate per CONTRIBUTING.md.

Evidence

  • Follow-up gate commit 6fe89df5b1b664860df7090767e6afee83306dd2, fast-forwarded from 36cbcf2dcf71ad35d8ee2790ccd6444c3271e827 (prior edit fix); merge commit 522798c04b49b3287975a539c35f5e2b71d64b7e integrates main 594ea8f5735e99fa549d3efe9228c145f2cf3d67. No force push; independent exact-head reconciliation review found no blockers.

  • Dense gate now runs from package yarn test → root yarn test and changed-package CI. Same 1,200-step workflow runs three no-op and three real transforms, taking the median of each; the no-op changes one action character per step but keeps byte length/parser shape. Real median must stay below 5× no-op median; no absolute timeout. Every result is byte-compared, plus a repeat run verifies idempotence. Swapping only scripts/codemod.ts to old 5781917 caused the new gate to fail (no-op=1,526ms, real=33,676ms; exit 1); current source passed (1,524ms/1,528ms; exit 0). Repeated samples reduce scheduling noise; timings remain synthetic and machine-dependent, not a production latency guarantee.

  • Full shipped-workflow diagnostic, 3,005 files (2,700 eligible inert + 300 node_modules excluded + five positives): no-op 1.046s → real 1.047s → repeat 3.060s. Five positive files exactly match fixture SHA-256; no-op and repeat full-corpus hashes unchanged relative to preceding runs; excluded files unchanged. Dense shipped-workflow 600 steps: no-op 1.042s → real 1.039s → repeat 1.039s; 1,200 steps: 1.044s → 1.051s → 1.037s. Both dense outputs byte-match generated expected text, retain every description and repoUrl, remove 1,200/2,400 deprecated keys, and remain byte-identical on repeat. Baseline independent evidence: 600 real 9.927s, 1,200 real 35.979s (3.62× doubling); new observed real times are near no-op. Hash snapshots, argv, return codes, and CLI logs: C:/Users/pschu/AppData/Local/Temp/jssg-pr170-optimized-q3tbn6q4. First no-op benchmark run completed but log writing failed on Windows cp1252; rerun succeeded and is the reported no-op timing. Callback counts were not instrumented.

  • 55/55 JSSG fixtures and workflow validation passed, covering CRLF without EOF newline, Unicode, comments, aliases/TODO and idempotence. yarn format, yarn format:check, yarn lint, package yarn test, root yarn test, yarn check:changed, and git diff --check passed locally; root test median=1,525ms no-op/1,517ms real. Husky pre-commit/pre-push hooks active; neither bypassed. No --allow-fs, YAML reserialization, hand-edited versions, or root README churn. Existing minor changeset .changeset/little-emus-invite.md remains.

  • Full root yarn test creates the known feat(v1.55.0): add remove-relations-compatibility-config codemod #162 untracked 145-byte codemods/v1.55.0/remove-relations-compatibility-config/tests/flow-inline-comment-preserved-when-catalog-emptied/metrics.json (Git blob 42847c1041d21d4278619381aa2d51455bc1b654). The exact path/size/blob were verified, the file backed up outside the worktree at /tmp/pr170-metrics-a44Lh0.json, then only that artifact was removed; root tests do not leave the worktree clean without this cleanup.

  • Exact-head GitHub CI Test and Changeset Check succeeded at 522798c04b49b3287975a539c35f5e2b71d64b7e: https://github.com/backstage/codemods/actions/runs/38457958066 . Test passed 55 fixtures and the integrated dense gate (no-op=1,270ms, real=1,271ms; synthetic medians of three).

Merge Danger

Door: two-way; additive codemod package + fixtures + changeset, reversible by revert. Blast radius: only this YAML migration package; existing templates change only when users run it. Root README unchanged versus PR base. Dense-file timing is synthetic, repeated same-size relative evidence, not a production throughput guarantee; fresh independent exact-head review found no blockers. Only #170 is in scope for merge; Version Packages #177 and draft recipes #158–#160 remain unmerged; publishing stays separate.

@schultzp2020
schultzp2020 marked this pull request as draft October 12, 2026 21:15
@schultzp2020

Copy link
Copy Markdown
Contributor Author

Release blocker (awaiting issue owner decision): the issue-required package ID @backstage/remove-ignored-github-repo-create-inputs is 51 characters; CI Package name length check enforces max 50 for Codemod Registry. This PR and dependent draft recipe #158 must not merge/publish until an approved coordinated #153/#156 package-ID change is made. No CI bypass or speculative rename.

@schultzp2020

Copy link
Copy Markdown
Contributor Author

Independent code review gate remains blocked despite name-length CI fix: flow input mapping reconstruction may discard unrelated comments; spec/steps helper descendant search may select nested path. Sole writer adding commented-flow and nested-path negative fixtures with surgical or conservative AST fix. Keep draft until fresh corrected review and exact-head CI.

@schultzp2020

Copy link
Copy Markdown
Contributor Author

Fresh actual-diff final review at ed2b941 found P2 false TODO: anchored direct input: &shared { repoUrl, description } with NO removed keys still gets manual-review TODO because shouldAddTodo initializes from inputHasAnchor unconditionally (scripts/codemod.ts:387). Add red anchored-no-removed-noop fixture and gate TODO on affected/ambiguous removed keys; keep draft. Reviewer’s earlier hung disposable CLI probe was terminated with supervisor approval/unverified; separate 15/15 fixtures, check:changed, idempotence and synthetic perf checks passed.

@schultzp2020
schultzp2020 marked this pull request as ready for review October 13, 2026 15:44
@schultzp2020
schultzp2020 marked this pull request as draft October 13, 2026 16:27
@schultzp2020
schultzp2020 marked this pull request as ready for review October 13, 2026 16:52
@schultzp2020
schultzp2020 merged commit ab4eaf6 into main Oct 13, 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.

feat: Backstage 1.55.0 migration - Remove ignored github:repo:create inputs

1 participant