Repository: osbuild/image-builder-frontend
Pull request #3238: Add el10 releases
Author: login: croissanne
Created: 2025-05-14T10:52:07Z | Merged: 2025-05-14T17:36:43Z

Hides the compliance step until we get the security guides in order.


Diff:
diff --git a/api/schema/imageBuilder.yaml b/api/schema/imageBuilder.yaml
index 957696fc3d..851011509c 100644
--- a/api/schema/imageBuilder.yaml
+++ b/api/schema/imageBuilder.yaml
@@ -1199,10 +1199,13 @@ components:
         - rhel-93
         - rhel-94
         - rhel-95
+        - rhel-9.6
+        - rhel-10
         - rhel-10-nightly
         - rhel-10.0-nightly
         - rhel-10.1-nightly
         - rhel-10-beta
+        - rhel-10.0
         - centos-9
         - centos-10
         - fedora-37
@@ -1210,6 +1213,7 @@ components:
         - fedora-39
         - fedora-40
         - fedora-41
+        - fedora-42
     ImageRequest:
       type: object
       additionalProperties: false
@@ -1246,10 +1250,10 @@ components:
             closest to, but after the specified date will be used. If no snapshots can be found at
             all, the request will fail. The format must be YYYY-MM-DD (ISO 8601 extended).
         content_template:
-           type: string
-           description: |
-             ID of the content template. A content template and snapshot date cannot both be specified.
-             If a content template is specified, the snapshot date used will be the one from the content template.
+          type: string
+          description: |
+            ID of the content template. A content template and snapshot date cannot both be specified.
+            If a content template is specified, the snapshot date used will be the one from the content template.
     ImageTypes:
       type: string
       enum:
@@ -1808,12 +1812,14 @@ components:
           oneOf:
             - type: string
             - type: integer
+              x-go-type: int64
           description: Owner of the directory as a user name or a uid
           example: 'root'
         group:
           oneOf:
             - type: string
             - type: integer
+              x-go-type: int64
           description: Group of the directory as a group name or a gid
           example: 'root'
         ensure_parents:
@@ -1839,12 +1845,14 @@ components:
           oneOf:
             - type: string
             - type: integer
+              x-go-type: int64
           description: Owner of the file as a uid or a user name
           example: 'root'
         group:
           oneOf:
             - type: string
             - type: integer
+              x-go-type: int64
           description: Group of the file as a gid or a group name
           example: 'root'
         data:
@@ -2048,7 +2056,7 @@ components:
         hasPassword:
           type: boolean
           description: |
-            Indicates whether the user has a password set.
+            Indicates whether the user has a password set. This flag is read-only.
     Filesystem:
       type: object
       required:
@@ -2093,6 +2101,11 @@ components:
           example: true
           description: |
             Optional flag to use rhc to register the system, which also always enables Insights.
+        insights_client_proxy:
+          type: string
+          format: uri
+          description: |
+            Optional value to set proxy option when registering the system to Insights.
     OpenSCAP:
       oneOf:
         - $ref: '#/components/schemas/OpenSCAPProfile'
diff --git a/src/Components/CreateImageWizard/CreateImageWizard.tsx b/src/Components/CreateImageWizard/CreateImageWizard.tsx
index 0a6c1b5cdc..0c4ce863f6 100644
--- a/src/Components/CreateImageWizard/CreateImageWizard.tsx
+++ b/src/Components/CreateImageWizard/CreateImageWizard.tsx
@@ -62,6 +62,7 @@ import {
 import {
   RHEL_8,
   RHEL_10_BETA,
+  RHEL_10,
   AARCH64,
   CENTOS_9,
   AMPLITUDE_MODULE_NAME,
@@ -210,6 +211,9 @@ const CreateImageWizard = ({ isEdit }: CreateImageWizardProps) => {
     if (searchParams.get('release') === 'rhel10beta') {
       dispatch(changeDistribution(RHEL_10_BETA));
     }
+    if (searchParams.get('release') === 'rhel10') {
+      dispatch(changeDistribution(RHEL_10));
+    }
     if (searchParams.get('arch') === AARCH64) {
       dispatch(changeArchitecture(AARCH64));
     }
diff --git a/src/Components/CreateImageWizard/steps/ImageOutput/ReleaseSelect.tsx b/src/Components/CreateImageWizard/steps/ImageOutput/ReleaseSelect.tsx
index b097db295f..e220ccd374 100644
--- a/src/Components/CreateImageWizard/steps/ImageOutput/ReleaseSelect.tsx
+++ b/src/Components/CreateImageWizard/steps/ImageOutput/ReleaseSelect.tsx
@@ -19,6 +19,9 @@ import {
   RHEL_9_FULL_SUPPORT,
   RHEL_9_MAINTENANCE_SUPPORT,
   RHEL_10_BETA,
+  RHEL_10,
+  RHEL_10_FULL_SUPPORT,
+  RHEL_10_MAINTENANCE_SUPPORT,
   ON_PREM_RELEASES,
   FEDORA_RELEASES,
 } from '../../../../constants';
@@ -94,6 +97,11 @@ const ReleaseSelect = () => {
       maintenanceSupportEnd = toMonthAndYear(RHEL_9_MAINTENANCE_SUPPORT[1]);
     }
 
+    if (key === RHEL_10) {
+      fullSupportEnd = toMonthAndYear(RHEL_10_FULL_SUPPORT[1]);
+      maintenanceSupportEnd = toMonthAndYear(RHEL_10_MAINTENANCE_SUPPORT[1]);
+    }
+
     if (isRhel(key)) {
       return `Full support ends: ${fullSupportEnd} | Maintenance support ends: ${maintenanceSupportEnd}`;
     }
diff --git a/src/Components/CreateImageWizard/steps/Oscap/Oscap.tsx b/src/Components/CreateImageWizard/steps/Oscap/Oscap.tsx
index 95b2314bbd..35ab3be11d 100644
--- a/src/Components/CreateImageWizard/steps/Oscap/Oscap.tsx
+++ b/src/Components/CreateImageWizard/steps/Oscap/Oscap.tsx
@@ -13,11 +13,24 @@ import {
   selectImageTypes,
 } from '../../../../store/wizardSlice';
 
-const Oscap = () => {
+type OscapPropTypes = {
+  majorVersion: string;
+};
+
+const Oscap = ({ majorVersion }: OscapPropTypes) => {
   const oscapProfile = useAppSelector(selectComplianceProfileID);
   const environments = useAppSelector(selectImageTypes);
   const complianceType = useAppSelector(selectComplianceType);
 
+  if (majorVersion === '10' && complianceType === 'openscap') {
+    return (
+      <Alert title="OpenSCAP Security Profiles for RHEL 10 Not Yet Available">
+        OpenSCAP security profiles aren’t available for RHEL 10 in Image Builder
+        yet. Support is on the way—check back soon for updates.
+      </Alert>
+    );
+  }
+
   return (
     <>
       {environments.includes('wsl') && (
diff --git a/src/Components/CreateImageWizard/steps/Oscap/index.tsx b/src/Components/CreateImageWizard/steps/Oscap/index.tsx
index 10b21042c6..1b6f5abc70 100644
--- a/src/Components/CreateImageWizard/steps/Oscap/index.tsx
+++ b/src/Components/CreateImageWizard/steps/Oscap/index.tsx
@@ -153,7 +153,7 @@ const OscapContent = () => {
             </AlertActionLink>
           </Alert>
         )}
-      <Oscap />
+      <Oscap majorVersion={majorVersion} />
     </Form>
   );
 };
diff --git a/src/Components/ImagesTable/Release.tsx b/src/Components/ImagesTable/Release.tsx
index 6cbde5e60a..e5d9e861c3 100644
--- a/src/Components/ImagesTable/Release.tsx
+++ b/src/Components/ImagesTable/Release.tsx
@@ -28,6 +28,9 @@ const Release = ({ release }: ReleaseProps) => {
     'rhel-93': 'RHEL 9.3',
     'rhel-94': 'RHEL 9.4',
     'rhel-95': 'RHEL 9.5',
+    'rhel-9.6': 'RHEL 9.6',
+    'rhel-10': 'RHEL 10',
+    'rhel-10.0': 'RHEL 10.0',
     'rhel-10-nightly': 'RHEL 10',
     'rhel-10.0-nightly': 'RHEL 10',
     'rhel-10.1-nightly': 'RHEL 10',
@@ -42,6 +45,7 @@ const Release = ({ release }: ReleaseProps) => {
     'fedora-39': 'Fedora 39',
     'fedora-40': 'Fedora 40',
     'fedora-41': 'Fedora 41',
+    'fedora-42': 'Fedora 42',
   };
 
   return <p>{releaseDisplayValue[release]}</p>;
diff --git a/src/constants.ts b/src/constants.ts
index c6b80f5be7..c948920592 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -83,9 +83,11 @@ export const UNIT_GIB = 1024 ** 3;
 export const RELEASES = new Map([
   [RHEL_9, 'Red Hat Enterprise Linux (RHEL) 9'],
   [RHEL_8, 'Red Hat Enterprise Linux (RHEL) 8'],
+  [RHEL_10, 'Red Hat Enterprise Linux (RHEL) 10'],
   [RHEL_9_BETA, 'Red Hat Enterprise Linux (RHEL) 9 Beta'],
   [RHEL_10_BETA, 'Red Hat Enterprise Linux (RHEL) 10 Beta'],
   [CENTOS_9, 'CentOS Stream 9'],
+  [CENTOS_10, 'CentOS Stream 10'],
 ]);
 
 export const ON_PREM_RELEASES = new Map([
@@ -100,10 +102,13 @@ export const FEDORA_RELEASES = new Map([
   [FEDORA_40, 'Fedora Linux 40'],
   [FEDORA_41, 'Fedora Linux 41'],
   [CENTOS_9, 'CentOS Stream 9'],
+  [CENTOS_10, 'CentOS Stream 10'],
 ]);
 
+export const RHEL_10_FULL_SUPPORT = ['2025-05-13', '2030-05-31'];
 export const RHEL_9_FULL_SUPPORT = ['2022-05-18', '2027-05-31'];
 export const RHEL_8_FULL_SUPPORT = ['2019-05-07', '2024-05-31'];
+export const RHEL_10_MAINTENANCE_SUPPORT = ['2030-05-31', '2035-05-31'];
 export const RHEL_9_MAINTENANCE_SUPPORT = ['2027-05-31', '2032-05-31'];
 export const RHEL_8_MAINTENANCE_SUPPORT = ['2024-05-31', '2029-05-31'];
 
diff --git a/src/store/service/imageBuilderApi.ts b/src/store/service/imageBuilderApi.ts
index b4acd7fbba..c1997d0918 100644
--- a/src/store/service/imageBuilderApi.ts
+++ b/src/store/service/imageBuilderApi.ts
@@ -416,17 +416,21 @@ export type Distributions =
   | "rhel-93"
   | "rhel-94"
   | "rhel-95"
+  | "rhel-9.6"
+  | "rhel-10"
   | "rhel-10-nightly"
   | "rhel-10.0-nightly"
   | "rhel-10.1-nightly"
   | "rhel-10-beta"
+  | "rhel-10.0"
   | "centos-9"
   | "centos-10"
   | "fedora-37"
   | "fedora-38"
   | "fedora-39"
   | "fedora-40"
-  | "fedora-41";
+  | "fedora-41"
+  | "fedora-42";
 export type ListResponseMeta = {
   count: number;
 };
@@ -614,6 +618,9 @@ export type Subscription = {
   /** Optional flag to use rhc to register the system, which also always enables Insights.
    */
   rhc?: boolean | undefined;
+  /** Optional value to set proxy option when registering the system to Insights.
+   */
+  insights_client_proxy?: string | undefined;
 };
 export type Module = {
   /** Name of the module to enable.
@@ -673,7 +680,7 @@ export type User = {
     Empty string can be used to remove the password during update but only with ssh_key set.
      */
   password?: string | undefined;
-  /** Indicates whether the user has a password set.
+  /** Indicates whether the user has a password set. This flag is read-only.
    */
   hasPassword?: boolean | undefined;
 };


Reviews:
user: login: regexowl
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-14T11:37:03Z
user: login: croissanne
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-14T11:46:03Z
user: login: ondrejbudai
body: 🚢 it!
state: DISMISSED
author_association: MEMBER
submitted_at: 2025-05-14T11:51:02Z
user: login: regexowl
body: Thank you! :heart: 
state: DISMISSED
author_association: COLLABORATOR
submitted_at: 2025-05-14T11:52:46Z
user: login: lucasgarfield
body: Rather than hide the step, let's just disable the dropdown and surface a notification that tells the user that RHEL 10 profiles are coming soon.
state: DISMISSED
author_association: COLLABORATOR
submitted_at: 2025-05-14T15:03:09Z
user: login: lucasgarfield
body: lgtm, it seems like we might get the RHEL 10 OpenSCAP guides in on the crc side very soon and if that's the case we can just revert the last commit in this PR. Better to just get this in though to eliminate long merge queues.
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-14T16:58:30Z

Review comments:
diff_hunk: @@ -100,10 +102,13 @@ export const FEDORA_RELEASES = new Map([
   [FEDORA_40, 'Fedora Linux 40'],
   [FEDORA_41, 'Fedora Linux 41'],
   [CENTOS_9, 'CentOS Stream 9'],
+  [CENTOS_10, 'CentOS Stream 10'],
 ]);
 
+export const RHEL_10_FULL_SUPPORT = ['2025-05-13', '2027-05-31'];
path: src/constants.ts
user: login: regexowl
body: Code looks good, does the full support end the same day the it will end for RHEL9?
created_at: 2025-05-14T11:37:03Z
author_association: COLLABORATOR
diff_hunk: @@ -100,10 +102,13 @@ export const FEDORA_RELEASES = new Map([
   [FEDORA_40, 'Fedora Linux 40'],
   [FEDORA_41, 'Fedora Linux 41'],
   [CENTOS_9, 'CentOS Stream 9'],
+  [CENTOS_10, 'CentOS Stream 10'],
 ]);
 
+export const RHEL_10_FULL_SUPPORT = ['2025-05-13', '2027-05-31'];
path: src/constants.ts
user: login: croissanne
body: oh no
sorry that's meant to be 2030
created_at: 2025-05-14T11:46:03Z
author_association: MEMBER

PR comments:
user: login: croissanne
created_at: 2025-05-14T11:53:11Z
body: oh we rebased at the same time :D
author_association: MEMBER
user: login: regexowl
created_at: 2025-05-14T11:54:30Z
body: Synced rebasing FTW!
author_association: COLLABORATOR
user: login: croissanne
created_at: 2025-05-14T11:55:03Z
body: /retest
author_association: MEMBER
user: login: regexowl
created_at: 2025-05-14T11:58:45Z
body: /retest
author_association: COLLABORATOR
user: login: regexowl
created_at: 2025-05-14T13:17:23Z
body: EC check seems to be stuck, trying to rerun konflux actions

/retest
author_association: COLLABORATOR
user: login: lucasgarfield
created_at: 2025-05-14T15:03:30Z
body: I'll take this over from here as @croissanne is working on getting stage workers back online.
author_association: COLLABORATOR
user: login: codecov[bot]
created_at: 2025-05-14T16:50:06Z
body: ## [Codecov](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild) Report
Attention: Patch coverage is `73.91304%` with `6 lines` in your changes missing coverage. Please review.
> Project coverage is 84.60%. Comparing base [(`46e50a9`)](https://app.codecov.io/gh/osbuild/image-builder-frontend/commit/46e50a9dca3e671a8641046fdf1bfd14ae955d82?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild) to head [(`3b4431d`)](https://app.codecov.io/gh/osbuild/image-builder-frontend/commit/3b4431d8bbf03c30e2639edf1ff434fe8acedf72?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild).
> Report is 6 commits behind head on main.

| [Files with missing lines](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild) | Patch % | Lines |
|---|---|---|
| [...Components/CreateImageWizard/steps/Oscap/Oscap.tsx](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&filepath=src%2FComponents%2FCreateImageWizard%2Fsteps%2FOscap%2FOscap.tsx&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild#diff-c3JjL0NvbXBvbmVudHMvQ3JlYXRlSW1hZ2VXaXphcmQvc3RlcHMvT3NjYXAvT3NjYXAudHN4) | 33.33% | [4 Missing :warning: ](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild) |
| [...Components/CreateImageWizard/CreateImageWizard.tsx](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&filepath=src%2FComponents%2FCreateImageWizard%2FCreateImageWizard.tsx&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild#diff-c3JjL0NvbXBvbmVudHMvQ3JlYXRlSW1hZ2VXaXphcmQvQ3JlYXRlSW1hZ2VXaXphcmQudHN4) | 33.33% | [2 Missing :warning: ](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild) |

[![Impacted file tree graph](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238/graphs/tree.svg?width=650&height=150&src=pr&token=64TO0SQEP0&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild)](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild)

```diff
@@            Coverage Diff             @@
##             main    #3238      +/-   ##
==========================================
- Coverage   84.61%   84.60%   -0.02%     
==========================================
  Files         187      187              
  Lines       23437    23458      +21     
  Branches     2446     2450       +4     
==========================================
+ Hits        19832    19847      +15     
- Misses       3588     3594       +6     
  Partials       17       17              
```

| [Files with missing lines](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild) | Coverage Δ | |
|---|---|---|
| [...ateImageWizard/steps/ImageOutput/ReleaseSelect.tsx](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&filepath=src%2FComponents%2FCreateImageWizard%2Fsteps%2FImageOutput%2FReleaseSelect.tsx&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild#diff-c3JjL0NvbXBvbmVudHMvQ3JlYXRlSW1hZ2VXaXphcmQvc3RlcHMvSW1hZ2VPdXRwdXQvUmVsZWFzZVNlbGVjdC50c3g=) | `94.61% <100.00%> (+0.17%)` | :arrow_up: |
| [...Components/CreateImageWizard/steps/Oscap/index.tsx](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&filepath=src%2FComponents%2FCreateImageWizard%2Fsteps%2FOscap%2Findex.tsx&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild#diff-c3JjL0NvbXBvbmVudHMvQ3JlYXRlSW1hZ2VXaXphcmQvc3RlcHMvT3NjYXAvaW5kZXgudHN4) | `84.21% <100.00%> (ø)` | |
| [src/Components/ImagesTable/Release.tsx](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&filepath=src%2FComponents%2FImagesTable%2FRelease.tsx&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild#diff-c3JjL0NvbXBvbmVudHMvSW1hZ2VzVGFibGUvUmVsZWFzZS50c3g=) | `100.00% <100.00%> (ø)` | |
| [src/constants.ts](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&filepath=src%2Fconstants.ts&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild#diff-c3JjL2NvbnN0YW50cy50cw==) | `100.00% <100.00%> (ø)` | |
| [...Components/CreateImageWizard/CreateImageWizard.tsx](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&filepath=src%2FComponents%2FCreateImageWizard%2FCreateImageWizard.tsx&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild#diff-c3JjL0NvbXBvbmVudHMvQ3JlYXRlSW1hZ2VXaXphcmQvQ3JlYXRlSW1hZ2VXaXphcmQudHN4) | `96.85% <33.33%> (-0.36%)` | :arrow_down: |
| [...Components/CreateImageWizard/steps/Oscap/Oscap.tsx](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?src=pr&el=tree&filepath=src%2FComponents%2FCreateImageWizard%2Fsteps%2FOscap%2FOscap.tsx&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild#diff-c3JjL0NvbXBvbmVudHMvQ3JlYXRlSW1hZ2VXaXphcmQvc3RlcHMvT3NjYXAvT3NjYXAudHN4) | `88.88% <33.33%> (-11.12%)` | :arrow_down: |

------

[Continue to review full report in Codecov by Sentry](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?dropdown=coverage&src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild). Last update [46e50a9...3b4431d](https://app.codecov.io/gh/osbuild/image-builder-frontend/pull/3238?dropdown=coverage&src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=osbuild).

<details><summary> :rocket: New features to boost your workflow: </summary>

- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
author_association: NONE