From 255209327889a42069efd2e03aa81bcb0e9730c8 Mon Sep 17 00:00:00 2001
From: Alan Agius <alanagius@google.com>
Date: Thu, 30 Jan 2025 12:13:32 +0000
Subject: [PATCH] build: re-enable latest version checks during release

This commit restores the latest version checks, which are now fixed by using the stamped versions.
---
 .../dependency-ranges/index.mts               |  5 ++--
 .../latest-versions-check.mts                 | 29 ++++++++++---------
 .../dependency-ranges/peer-deps-check.mts     | 10 +++----
 3 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/scripts/release-checks/dependency-ranges/index.mts b/scripts/release-checks/dependency-ranges/index.mts
index 85cba2de5de3..9f507a8b4425 100644
--- a/scripts/release-checks/dependency-ranges/index.mts
+++ b/scripts/release-checks/dependency-ranges/index.mts
@@ -32,9 +32,8 @@ export async function assertValidDependencyRanges(
   }
 
   const failures: string[] = [
-    ...(await checkPeerDependencies(newVersion, allPackages)),
-    // TODO: Re-enable the following once the checks are performed against the stamped `.js` file instead of the source `.json` file.
-    // ...(await checkSchematicsAngularLatestVersion(newVersion)),
+    ...checkPeerDependencies(newVersion, allPackages),
+    ...checkSchematicsAngularLatestVersion(newVersion),
   ];
 
   if (failures.length !== 0) {
diff --git a/scripts/release-checks/dependency-ranges/latest-versions-check.mts b/scripts/release-checks/dependency-ranges/latest-versions-check.mts
index afeff6712cea..9b8e054f71fb 100644
--- a/scripts/release-checks/dependency-ranges/latest-versions-check.mts
+++ b/scripts/release-checks/dependency-ranges/latest-versions-check.mts
@@ -6,30 +6,33 @@
  * found in the LICENSE file at https://angular.dev/license
  */
 
-import { readFile } from 'node:fs/promises';
+import { createRequire } from 'node:module';
+import { fileURLToPath } from 'node:url';
 import semver from 'semver';
 
-export async function checkSchematicsAngularLatestVersion(
-  newVersion: semver.SemVer,
-): Promise<string[]> {
-  const { dependencies } = JSON.parse(
-    await readFile('./packages/schematics/angular/utility/latest-versions/package.json', 'utf-8'),
+export function checkSchematicsAngularLatestVersion(newVersion: semver.SemVer): string[] {
+  // Root of the Angular CLI project.
+  const root = fileURLToPath(new URL('../../../', import.meta.url));
+  const rootRequire = createRequire(root);
+  const { latestVersions } = rootRequire(
+    './dist/releases/schematics/angular/utility/latest-versions.js',
   );
 
-  const keysToCheck = ['ng-packagr', '@angular/core'];
-  const { major, minor } = newVersion;
-  const isPrerelease = !!newVersion.prerelease[0];
+  const keysToCheck = ['Angular', 'NgPackagr'];
+  const { major, minor, prerelease } = newVersion;
+  const isPrerelease = !!prerelease[0];
   const failures: string[] = [];
 
-  let expectedFwDep = `^${major}.${minor}.0`;
+  let expectedVersionDep = `^${major}.${minor}.0`;
   if (isPrerelease) {
-    expectedFwDep = `^${major}.${minor}.0-next.0`;
+    expectedVersionDep += '-next.0';
   }
 
   for (const key of keysToCheck) {
-    if (dependencies[key] !== expectedFwDep) {
+    const latestVersion = latestVersions[key];
+    if (latestVersion !== expectedVersionDep) {
       failures.push(
-        `latest-versions: Invalid dependency range for "${key}". Expected: ${expectedFwDep}`,
+        `latest-versions: Invalid dependency range for "${key}". Expected: ${expectedVersionDep} but got: ${latestVersion}`,
       );
     }
   }
diff --git a/scripts/release-checks/dependency-ranges/peer-deps-check.mts b/scripts/release-checks/dependency-ranges/peer-deps-check.mts
index e212d800aac0..0c8bf6fc8c3a 100644
--- a/scripts/release-checks/dependency-ranges/peer-deps-check.mts
+++ b/scripts/release-checks/dependency-ranges/peer-deps-check.mts
@@ -16,12 +16,12 @@ export interface PackageJson {
   peerDependencies?: Record<string, string>;
 }
 
-export async function checkPeerDependencies(
+export function checkPeerDependencies(
   newVersion: semver.SemVer,
   allPackages: PackageJson[],
-): Promise<string[]> {
-  const { major, minor } = newVersion;
-  const isPrerelease = !!newVersion.prerelease[0];
+): string[] {
+  const { major, minor, prerelease } = newVersion;
+  const isPrerelease = !!prerelease[0];
   const isMajor = minor === 0;
 
   let expectedFwPeerDep = `^${major}.0.0`;
@@ -58,7 +58,7 @@ function checkPackage(pkgJson: PackageJson, expectedFwPeerDep: string): string[]
 
     if (range !== expectedFwPeerDep) {
       failures.push(
-        `${pkgJson.name}: Unexpected peer dependency range for "${depName}". Expected: ${expectedFwPeerDep}`,
+        `${pkgJson.name}: Unexpected peer dependency range for "${depName}". Expected: ${expectedFwPeerDep} but got: ${range}`,
       );
     }
   }