From 0e123d11174be1f38733965dcec00a0b2a8794d8 Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Tue, 11 Nov 2025 22:25:39 +0000 Subject: [PATCH 1/2] build: use mjs files for ng-dev configuration In preperation for ng-dev requiring mjs files for configuration, switch over our usage --- .ng-dev/{caretaker.mts => caretaker.mjs} | 10 ++++++---- ...{commit-message.mts => commit-message.mjs} | 6 +++--- .ng-dev/{config.mts => config.mjs} | 0 .ng-dev/format.mjs | 11 ++++++++++ .ng-dev/format.mts | 12 ----------- .ng-dev/github.mjs | 12 +++++++++++ .ng-dev/github.mts | 12 ----------- .../{pull-request.mts => pull-request.mjs} | 10 +++++----- .ng-dev/{release.mts => release.mjs} | 20 ++++++++++++------- .ng-dev/tsconfig.json | 11 ---------- package.json | 2 +- tools/release-checks/tsconfig.json | 6 ++++++ tools/tsconfig.json | 2 +- 13 files changed, 58 insertions(+), 56 deletions(-) rename .ng-dev/{caretaker.mts => caretaker.mjs} (72%) rename .ng-dev/{commit-message.mts => commit-message.mjs} (95%) rename .ng-dev/{config.mts => config.mjs} (100%) create mode 100644 .ng-dev/format.mjs delete mode 100644 .ng-dev/format.mts create mode 100644 .ng-dev/github.mjs delete mode 100644 .ng-dev/github.mts rename .ng-dev/{pull-request.mts => pull-request.mjs} (67%) rename .ng-dev/{release.mts => release.mjs} (82%) delete mode 100644 .ng-dev/tsconfig.json create mode 100644 tools/release-checks/tsconfig.json diff --git a/.ng-dev/caretaker.mts b/.ng-dev/caretaker.mjs similarity index 72% rename from .ng-dev/caretaker.mts rename to .ng-dev/caretaker.mjs index 9e92c09245c6..6c0688e5a342 100644 --- a/.ng-dev/caretaker.mts +++ b/.ng-dev/caretaker.mjs @@ -1,7 +1,9 @@ -import {CaretakerConfig} from '@angular/ng-dev'; - -/** The configuration for `ng-dev caretaker` commands. */ -export const caretaker: CaretakerConfig = { +/** + * The configuration for `ng-dev caretaker` commands. + * + * @type { import("@angular/ng-dev").CaretakerConfig } + */ +export const caretaker = { githubQueries: [ { name: 'Merge Queue', diff --git a/.ng-dev/commit-message.mts b/.ng-dev/commit-message.mjs similarity index 95% rename from .ng-dev/commit-message.mts rename to .ng-dev/commit-message.mjs index c868f0e0b1d4..2a22f1dda8d8 100644 --- a/.ng-dev/commit-message.mts +++ b/.ng-dev/commit-message.mjs @@ -1,9 +1,9 @@ -import {CommitMessageConfig} from '@angular/ng-dev'; - /** * The configuration for `ng-dev commit-message` commands. + * + * @type { import("@angular/ng-dev").CommitMessageConfig } */ -export const commitMessage: CommitMessageConfig = { +export const commitMessage = { maxLineLength: Infinity, minBodyLength: 0, minBodyLengthTypeExcludes: ['docs'], diff --git a/.ng-dev/config.mts b/.ng-dev/config.mjs similarity index 100% rename from .ng-dev/config.mts rename to .ng-dev/config.mjs diff --git a/.ng-dev/format.mjs b/.ng-dev/format.mjs new file mode 100644 index 000000000000..8df6ce8f99e6 --- /dev/null +++ b/.ng-dev/format.mjs @@ -0,0 +1,11 @@ +/** + * Configuration for the `ng-dev format` command. + * + * @type { import("@angular/ng-dev").FormatConfig } + */ +export const format = { + buildifier: true, + prettier: { + matchers: ['**/*.{js,ts,mts,mjs,json}'], + }, +}; diff --git a/.ng-dev/format.mts b/.ng-dev/format.mts deleted file mode 100644 index 0e182edbe38f..000000000000 --- a/.ng-dev/format.mts +++ /dev/null @@ -1,12 +0,0 @@ -import {FormatConfig} from '@angular/ng-dev'; - -/** - * Configuration for the ng-dev format command. We currently only use the buildifier - * formatter that is responsible for formatting Bazel build and `.bzl` files. - */ -export const format: FormatConfig = { - buildifier: true, - prettier: { - matchers: ['**/*.{js,ts,mts,mjs,json}'], - }, -}; diff --git a/.ng-dev/github.mjs b/.ng-dev/github.mjs new file mode 100644 index 000000000000..b956dfdb8dfa --- /dev/null +++ b/.ng-dev/github.mjs @@ -0,0 +1,12 @@ +/** + * Github configuration for the `ng-dev` command. This repository is used as + * remote for the merge script and other utilities like `ng-dev pr rebase`. + * + * @type { import("@angular/ng-dev").GithubConfig } + */ +export const github = { + owner: 'angular', + name: 'components', + mainBranchName: 'main', + useNgDevAuthService: true, +}; diff --git a/.ng-dev/github.mts b/.ng-dev/github.mts deleted file mode 100644 index 382a66b0de32..000000000000 --- a/.ng-dev/github.mts +++ /dev/null @@ -1,12 +0,0 @@ -import {GithubConfig} from '@angular/ng-dev'; - -/** - * Github configuration for the ng-dev command. This repository is - * uses as remote for the merge script. - */ -export const github: GithubConfig = { - owner: 'angular', - name: 'components', - mainBranchName: 'main', - useNgDevAuthService: true, -}; diff --git a/.ng-dev/pull-request.mts b/.ng-dev/pull-request.mjs similarity index 67% rename from .ng-dev/pull-request.mts rename to .ng-dev/pull-request.mjs index 8beb04bb8326..434a3c1143b9 100644 --- a/.ng-dev/pull-request.mts +++ b/.ng-dev/pull-request.mjs @@ -1,10 +1,10 @@ -import {PullRequestConfig} from '@angular/ng-dev'; - /** - * Configuration for the pull request commands in `ng-dev`. This includes the - * setup for the merge command. + * Configuration for the merge tool in `ng-dev`. This sets up the labels which + * are respected by the merge script (e.g. the target labels). + * + * @type { import("@angular/ng-dev").PullRequestConfig } */ -export const pullRequest: PullRequestConfig = { +export const pullRequest = { // By default, the merge script merges locally with `git cherry-pick` and autosquash. // This has the downside of pull requests showing up as `Closed` instead of `Merged`. // In the components repository, since we don't use fixup or squash commits, we can diff --git a/.ng-dev/release.mts b/.ng-dev/release.mjs similarity index 82% rename from .ng-dev/release.mts rename to .ng-dev/release.mjs index 86318b3c3a85..a19a992b77c8 100644 --- a/.ng-dev/release.mts +++ b/.ng-dev/release.mjs @@ -6,11 +6,6 @@ * found in the LICENSE file at https://angular.dev/license */ -import semver from 'semver'; -import {ReleaseConfig} from '@angular/ng-dev'; -import {assertValidUpdateMigrationCollections} from '../tools/release-checks/check-migration-collections.mjs'; -import {assertValidNpmPackageOutput} from '../tools/release-checks/npm-package-output/index.mjs'; - /** * Packages that will be published as part of the project. * @@ -30,8 +25,12 @@ export const releasePackages = [ 'material-date-fns-adapter', ]; -/** Configuration for the `ng-dev release` command. */ -export const release: ReleaseConfig = { +/** + * Configuration for the `ng-dev release` command. + * + * @type { import("@angular/ng-dev").ReleaseConfig } + */ +export const release = { releaseNotes: { useReleaseTitle: true, groupOrder: releasePackages, @@ -58,6 +57,13 @@ export const release: ReleaseConfig = { return performNpmReleaseBuild(); }, prereleaseCheck: async (newVersionStr, builtPackagesWithInfo) => { + const semver = await import('semver'); + const assertValidUpdateMigrationCollections = await import( + '../tools/release-checks/check-migration-collections.mjs' + ); + const assertValidNpmPackageOutput = await import( + '../tools/release-checks/npm-package-output/index.mjs' + ); const newVersion = new semver.SemVer(newVersionStr); await assertValidUpdateMigrationCollections(newVersion); diff --git a/.ng-dev/tsconfig.json b/.ng-dev/tsconfig.json deleted file mode 100644 index 0ae4bf3f1fb1..000000000000 --- a/.ng-dev/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "strict": true, - "target": "es2020", - "module": "Node16", - "esModuleInterop": true, - "noEmit": true, - "skipLibCheck": true, - "types": [] - } -} diff --git a/package.json b/package.json index b73445427b48..657227c50889 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "integration-tests": "bazel test --test_tag_filters=-linker-integration-test --build_tests_only -- //integration/...", "test-linker-aot": "bazel test --partial_compilation --test_tag_filters=partial-compilation-integration,-firefox --build_tests_only -- //integration/... //src/...", "test-linker-jit": "bazel test --partial_compilation --test_tag_filters=partial-compilation-integration,-firefox --build_tests_only --//tools:force_partial_jit_compilation=True -- //integration/... //src/...", - "check-tooling-setup": "pnpm tsc --project tools/tsconfig.json --noEmit && pnpm tsc --project tools/adev-api-extraction/tsconfig.json --noEmit && pnpm tsc --project scripts/tsconfig.json --noEmit && pnpm tsc --project .ng-dev/tsconfig.json --noEmit", + "check-tooling-setup": "pnpm tsc --project tools/tsconfig.json --noEmit && pnpm tsc --project tools/adev-api-extraction/tsconfig.json --noEmit && pnpm tsc --project scripts/tsconfig.json --noEmit && pnpm tsc --project tools/release-checks/tsconfig.json --noEmit", "tsc": "node ./node_modules/typescript/bin/tsc", "ci-push-deploy-docs-app": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/docs-deploy/deploy-ci-push.mts", "ci-docs-monitor-test": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/docs-deploy/monitoring/ci-test.mts", diff --git a/tools/release-checks/tsconfig.json b/tools/release-checks/tsconfig.json new file mode 100644 index 000000000000..2f10c52d6d80 --- /dev/null +++ b/tools/release-checks/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "allowJs": true + } +} diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 810d8d3a6e3f..a53e28ba631f 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -12,5 +12,5 @@ "downlevelIteration": true, "types": ["node"] }, - "exclude": ["**/*.spec.ts", "**/*.spec.mts", "adev-api-extraction/**"] + "exclude": ["**/*.spec.ts", "**/*.spec.mts", "adev-api-extraction/**", "release-checks/**"] } From bcf88014a17d8b38726f739da85af45f021b049a Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Wed, 12 Nov 2025 16:38:25 +0000 Subject: [PATCH 2/2] ci: set up validation of the ng-dev configuration on CI --- .github/workflows/ci.yml | 2 ++ .github/workflows/pr.yml | 2 ++ package.json | 1 - 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0bfb3eca1583..2aaf0bb60513 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,6 +24,8 @@ jobs: uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@95e3a0ede6dfa1aedd34b03918ad72b18f87e5ae - name: Install node modules run: pnpm install --frozen-lockfile + - name: Validate ng-dev config + run: pnpm ng-dev config validate - name: Checking package externals run: | bazel build //:package_externals diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 5d093eab9329..239d3143a533 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -22,6 +22,8 @@ jobs: uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@95e3a0ede6dfa1aedd34b03918ad72b18f87e5ae - name: Install node modules run: pnpm install --frozen-lockfile + - name: Validate ng-dev config + run: pnpm ng-dev config validate - name: Checking package externals run: | bazel build //:package_externals diff --git a/package.json b/package.json index 657227c50889..355ef803889d 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "pnpm": "10.23.0" }, "scripts": { - "ng-dev": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only node_modules/@angular/ng-dev/bundles/cli.mjs", "ng-dev:stamp": "pnpm -s ng-dev release build-env-stamp --additional-stamping-script=tools/bazel-additional-stamp.mjs", "build": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only ./scripts/build-packages-dist-main.mts", "build-docs-content": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only ./scripts/build-docs-content-main.mts",