sam-ui-elements pipeline modernization + Angular 19→21 upgrade (SAM Angular upgrade — 4th tracer bullet) — IAEMOD-61187
メンテナーはふだん 1 日以内に返信
@fpigeonjr がすでに取り組んでいます。
2026年8月14日 から。
評価
この issue はまだ評価されていません。
説明
Pipeline modernization and Angular version migration for @gsa-sam/sam-ui-elements — the fourth tracer bullet of the SAM design-library Angular upgrade epic (IAEMOD-57412), following sam-styles (#732 on GSA/sam-styles), ngx-uswds-icons (#26 on GSA/ngx-uswds-icons), and ngx-uswds (#184 on GSA/ngx-uswds). Coordination/tracking lives on the internal research repo (mcaas-iae/iae-angular-upgrade).
sam-ui-elements sits at Angular 19 (published @gsa-sam/[email protected]) and consumes only sam-styles (effectively done), so it is unblocked. It is the only design library that is not a compiled Angular library: it publishes raw TypeScript source (no main/module/exports; ~560 .ts), and the consumer compiles it in-place. Its formly is bundled and load-bearing in prod. See binding decision ADR-0009 on the coordination repo.
What makes this repo different
- Raw-source publish, not ng-packagr. No library
ng build; the consumer's own Angular compiler builds our source. Deep import paths (/src/formly/**,/src/ui-kit/**) are a frozen contract — no file moves this epic. - Branch of record is
ng-19, notmaster.masterlags at Angular 18.0.2;ng-19is a strict content superset (the lone "master-only" commit is an empty merge bubble, 0 unique files). Reconcile by mergingng-19→master(no force). - No GitHub Actions — only a commented-out CircleCI stub on Node 10.
- Test harness is rotten. Tests live in a separate
test-app/that hard-links../srcin, but the harness is Angular 9 / TS 2.3 / ngx-formly 5 against a library at Angular 19 — the 107 specs have not been compiling against a matching Angular. Green-at-19 is the gate before any migration. - formly kept + migrated, not deprecated.
AbstractSamFormlyis imported in 15 files across 3 consumers, incl. prod — unlikeuswds-formly(separate package, 0 consumers, cleanly removed). So ngx-formly 6→7 is in scope, gating Angular 20. - rxjs already on 7 (peer
>=7.5.0) — no rxjs migration; ~6 rxjs-6-only imports survive in specs only, fixed during the green baseline.
Goal
Two bundled tracks, sequenced pipeline-first so the Angular migration lands on green CI:
- Pipeline/tooling — inherit the pattern proven on sam-styles, icons, and ngx-uswds: registry-pinned
.npmrc, normalized Node, ESLint (off tslint) with the a11y gate, Prettier, test + coverage, Dependabot, a PR template, dead-code pruning, Playwright smoke (replacing Protractor), and a tag-gated livenpm publish. - Angular migration — stepped per-major chain 19 → 20 → 21 (LTS), one major at a time, with the ngx-formly 6→7 migration as its own sub-issue gating the 20 step.
Parallelism model
Serialize anything that mutates package.json / angular.json / tsconfig; parallelize disjoint file sets. Prettier and dead-code prune are "stop the world" (run solo). The Angular chain is a serial train — one major at a time, nothing else editing manifests/source in flight.
Deferred (own follow-up issues, NOT this epic)
- Convert to a compiled ng-packagr library. Prereq: break the
src/ui-kit/filters → src/formly(FormlySAMUIModule) dependency cycle. - Replace the
test-appcopy-src-in harness with a standard in-repo Karma/Jest setup; retiretest-app.
Notes / scope boundaries
- Migration is unblocked — sam-ui-elements consumes only sam-styles. Only the live publish sub-issue carries the DevOps dependency (OIDC Trusted Publisher registration, ADR-0007).
- Pin, don't break, the Angular-17 legacy consumer (
iae-sam-front-end3, IBM/legacy SAM). Major-locked peers make the version pin the natural outcome. - Consumer validation is mandatory before publish:
npm pack --dry-run+ audit every frozen deep path against the three consumers. - Jira epic (this repo): IAEMOD-61187
- Program epic (SAM design-library Angular upgrade): IAEMOD-57412
- 主要言語
- TypeScript
- スター
- 8
- フォーク
- 33
- 平均マージ
- 2日 15時間
- マージ済み PR(30日)
- 11
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
GSA/sam-ui-elements のほかの issue
-
github_actions security
難易度 2/5 半日 初心者へのやさしさ 88/100
GSA/sam-ui-elements#761 ·
メンテナーはふだん 1 日以内に返信
-
tech-debt
難易度 4/5 3〜5日 初心者へのやさしさ 56/100
GSA/sam-ui-elements#708 ·
メンテナーはふだん 1 日以内に返信
-
disablePageTabIndex() sets aria-hidden on the focused calendar button, and enablePageTabIndex() never removes it再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープンbugfix
難易度 4/5 3〜5日 初心者へのやさしさ 68/100
GSA/sam-ui-elements#682 ·
メンテナーはふだん 1 日以内に返信
-
bugfix
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
GSA/sam-ui-elements#681 ·
メンテナーはふだん 1 日以内に返信
-
Burn down ESLint and Angular lint debt再び着手できるかも @fpigeonjr が 48 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンangular-upgrade maintenance
GSA/sam-ui-elements#580 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
GSA/sam-ui-elements の issue をすべて見る
似ている issue
-
Create/import wallet form shows raw "password must be at least 1 characters" instead of the translated message対応中かも @CapThunder19 が今日担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
joinmarket-webui/jam#1538 ·
メンテナーはふだん 1 日以内に返信
-
t0ggles
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
nolimits4web/swiper#8240 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
modelcontextprotocol/inspector#2723 ·
メンテナーはふだん 1 日以内に返信
-
status:approved type:bug
難易度 1/5 1時間未満 初心者へのやさしさ 70/100
メンテナーはふだん 1 日以内に返信