Skip to content

Commit f490b8a

Browse files
committed
[EngSys] eng/tools/versioning/set-dev.js fixes
This PR addresses two issues: - we should set dev versions for utility packages too but currently don't because of a missing category in the version policy check. - we should use dev version of a package for its dependents if its current version satisfies their dependency version range requirements. Currently we use its dev version if its current version equals the minimum version of dependency version range requirements. While at this, logging is also improved by introduce indentations for nested log lines.
1 parent 1313c7c commit f490b8a

File tree

1 file changed

+64
-43
lines changed

1 file changed

+64
-43
lines changed

eng/tools/versioning/set-dev.js

Lines changed: 64 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,29 @@ async function commitChanges(repoPackages, pkg) {
4747
}
4848
}
4949

50-
function updatePackageVersion(repoPackages, pkg, buildId, catalogs) {
50+
function updatePackageVersion(repoPackages, pkg, buildId, catalogs, logPrefix = "\t") {
5151
const currentVersion = repoPackages[pkg].json.version;
5252
const parsedVersion = semver.parse(currentVersion);
5353
repoPackages[pkg].newVer =
5454
`${parsedVersion.major}.${parsedVersion.minor}.${parsedVersion.patch}-alpha.${buildId}`;
55-
console.log(`version updated for ${pkg}`);
55+
console.log(`${logPrefix}version updated: from ${currentVersion} to ${repoPackages[pkg].newVer}`);
5656
for (const p of Object.keys(repoPackages)) {
57-
repoPackages = updateOtherProjectDependencySections(repoPackages, p, pkg, catalogs);
57+
console.log(`${logPrefix}update "${pkg}" version in dependencies of "${p}"`);
58+
repoPackages = updateOtherProjectDependencySections(
59+
repoPackages,
60+
p,
61+
pkg,
62+
catalogs,
63+
`${logPrefix}\t`,
64+
);
5865
}
5966
return repoPackages;
6067
}
6168

62-
function updateDependencySection(repoPackages, dependencySection, buildId, catalogs) {
63-
//console.log(dependencySection);
69+
function updateDependencySection(repoPackages, dependencySection, buildId, catalogs, logPrefix) {
6470
if (dependencySection) {
6571
for (const [depName, depVersionRange] of Object.entries(dependencySection)) {
66-
console.log(`checking ${depName}:${depVersionRange}...`);
72+
console.log(`${logPrefix}checking ${depName}:${depVersionRange}...`);
6773

6874
// If the dependency isn't part of the workspace, skip it
6975
if (!repoPackages[depName]) {
@@ -73,59 +79,71 @@ function updateDependencySection(repoPackages, dependencySection, buildId, catal
7379
// Compare the dependency version range with the package's current version
7480
const packageVersion = repoPackages[depName].json.version;
7581

76-
console.log(`version in package's dep = ${depVersionRange}`); //^1.0.0
77-
console.log(`dep's version = ${packageVersion}`); //1.0.0
82+
console.log(`${logPrefix}version in package's dep = ${depVersionRange}`); //^1.0.0
83+
console.log(`${logPrefix}dep's version = ${packageVersion}`); //1.0.0
7884
if (depVersionRange === "workspace:^") {
85+
console.log(`${logPrefix}skipping workspace: dependency`);
7986
continue;
8087
} else if (depVersionRange.startsWith("catalog:")) {
81-
const parsedPackageVersion = semver.parse(packageVersion);
8288
const resolvedVersion = resolveFromCatalog(catalogs, {
8389
alias: depName,
8490
bareSpecifier: depVersionRange,
8591
});
8692
if (resolvedVersion.type === "found") {
87-
const parsedDepMinVersion = semver.minVersion(resolvedVersion.resolution.specifier);
88-
if (semver.eq(parsedDepMinVersion, parsedPackageVersion)) {
89-
repoPackages = updatePackageVersion(repoPackages, depName, buildId, catalogs);
93+
console.log(`${logPrefix}resolved version = ${resolvedVersion.resolution.specifier}`);
94+
if (semver.satisfies(packageVersion, depVersionRange)) {
95+
repoPackages = updatePackageVersion(
96+
repoPackages,
97+
depName,
98+
buildId,
99+
catalogs,
100+
`${logPrefix}\t`,
101+
);
90102
}
91103
}
92104
} else {
93-
const parsedPackageVersion = semver.parse(packageVersion);
94-
const parsedDepMinVersion = semver.minVersion(depVersionRange);
95-
if (semver.eq(parsedDepMinVersion, parsedPackageVersion)) {
96-
repoPackages = updatePackageVersion(repoPackages, depName, buildId, catalogs);
105+
if (semver.satisfies(packageVersion, depVersionRange)) {
106+
repoPackages = updatePackageVersion(
107+
repoPackages,
108+
depName,
109+
buildId,
110+
catalogs,
111+
`${logPrefix}\t`,
112+
);
97113
}
98114
}
99115
}
100116
}
101117
return repoPackages;
102118
}
103119

104-
function updateInternalDependencyVersions(repoPackages, pkg, buildId, catalogs) {
105-
console.log("updateInternalDep");
106-
console.log(pkg);
107-
console.log("checking dependencies ..");
120+
function updateInternalDependencyVersions(repoPackages, pkg, buildId, catalogs, logPrefix = "\t") {
121+
console.log(`${logPrefix}update internal dependencies for package "${pkg}"`);
122+
console.log(`${logPrefix}checking dependencies ..`);
108123
repoPackages = updateDependencySection(
109124
repoPackages,
110125
repoPackages[pkg].json.dependencies,
111126
buildId,
112127
catalogs,
128+
`${logPrefix}\t`,
113129
);
114130

115-
console.log("checking devDependencies ..");
131+
console.log(`${logPrefix}checking devDependencies ..`);
116132
repoPackages = updateDependencySection(
117133
repoPackages,
118134
repoPackages[pkg].json.devDependencies,
119135
buildId,
120136
catalogs,
137+
`${logPrefix}\t`,
121138
);
122139

123-
console.log("checking peerDependencies ..");
140+
console.log(`${logPrefix}checking peerDependencies ..`);
124141
repoPackages = updateDependencySection(
125142
repoPackages,
126143
repoPackages[pkg].json.peerDependencies,
127144
buildId,
128145
catalogs,
146+
`${logPrefix}\t`,
129147
);
130148

131149
return repoPackages;
@@ -136,11 +154,12 @@ function makeDependencySectionConsistentForPackage(
136154
dependencySection,
137155
depName,
138156
catalogs,
157+
logPrefix,
139158
) {
140159
if (dependencySection && dependencySection[depName]) {
141160
const depVersionRange = dependencySection[depName];
142161

143-
console.log(`checking ${depName}:${depVersionRange}...`);
162+
console.log(`${logPrefix}consistency: checking ${depName}:${depVersionRange}...`);
144163

145164
// If the dependency isn't part of the workspace, skip it
146165
if (!repoPackages[depName]) {
@@ -150,31 +169,35 @@ function makeDependencySectionConsistentForPackage(
150169
// Compare the dependency version range with the package's current version
151170
const packageVersion = repoPackages[depName].json.version;
152171

153-
console.log(`version in package's dep = ${depVersionRange}`);
154-
console.log(`dep's version = ${packageVersion}`);
172+
console.log(`${logPrefix}consistency: version in package's dep = ${depVersionRange}`);
173+
console.log(`${logPrefix}consistency: dep's version = ${packageVersion}`);
155174
const parsedPackageVersion = semver.parse(packageVersion);
156175
if (!parsedPackageVersion) {
157176
throw new Error(`Invalid version format: ${packageVersion}`);
158177
}
159178
let shouldReplace = false;
160179
if (depVersionRange.startsWith("workspace:")) {
180+
console.log(`${logPrefix}consistency: skipping workspace: dependency`);
161181
shouldReplace = false;
162182
} else if (depVersionRange.startsWith("catalog:")) {
163183
const resolvedVersion = resolveFromCatalog(catalogs, {
164184
alias: depName,
165185
bareSpecifier: depVersionRange,
166186
});
167187
if (resolvedVersion.type === "found") {
168-
const parsedDepMinVersion = semver.minVersion(resolvedVersion.resolution.specifier);
169-
shouldReplace = semver.eq(parsedDepMinVersion, parsedPackageVersion);
188+
shouldReplace = semver.satisfies(packageVersion, depVersionRange);
170189
}
171190
} else {
172-
const parsedDepMinVersion = semver.minVersion(depVersionRange);
173-
shouldReplace = semver.eq(parsedDepMinVersion, parsedPackageVersion);
191+
shouldReplace = semver.satisfies(packageVersion, depVersionRange);
174192
}
175193
// If the dependency range is satisfied by the package's current version,
176194
// replace it with an exact match to the package's new version
177195
if (shouldReplace && repoPackages[depName].newVer !== undefined) {
196+
console.log(
197+
`${logPrefix}consistency: updating ${depName} version in dependency section to ${repoPackages[depName].newVer}`,
198+
);
199+
// Set the dependency to the new version with an alpha prerelease tag
200+
// e.g. 1.0.0-alpha.20240101.1
178201
// Setting version to >=[major.minor.patch]-alpha <[major.minor.patch]-alphb so that this automatically matches
179202
// with the latest dev version published on npm
180203
const versionPrefix = `${parsedPackageVersion.major}.${parsedPackageVersion.minor}.${parsedPackageVersion.patch}`;
@@ -184,33 +207,32 @@ function makeDependencySectionConsistentForPackage(
184207
return repoPackages;
185208
}
186209

187-
function updateOtherProjectDependencySections(repoPackages, pkg, depName, catalogs) {
188-
console.log("updateOtherProjectDependencySections");
189-
console.log("package = " + pkg);
190-
console.log("depName=" + depName);
191-
console.log("checking dependencies ..");
192-
210+
function updateOtherProjectDependencySections(repoPackages, pkg, depName, catalogs, logPrefix) {
211+
console.log(`${logPrefix}checking dependencies...`);
193212
repoPackages = makeDependencySectionConsistentForPackage(
194213
repoPackages,
195214
repoPackages[pkg].json.dependencies,
196215
depName,
197216
catalogs,
217+
`${logPrefix}\t`,
198218
);
199219

200-
console.log("checking devDependencies ..");
220+
console.log(`${logPrefix}checking devDependencies...`);
201221
repoPackages = makeDependencySectionConsistentForPackage(
202222
repoPackages,
203223
repoPackages[pkg].json.devDependencies,
204224
depName,
205225
catalogs,
226+
`${logPrefix}\t`,
206227
);
207228

208-
console.log("checking peerDependencies ..");
229+
console.log(`${logPrefix}checking peerDependencies...`);
209230
repoPackages = makeDependencySectionConsistentForPackage(
210231
repoPackages,
211232
repoPackages[pkg].json.peerDependencies,
212233
depName,
213234
catalogs,
235+
`${logPrefix}\t`,
214236
);
215237
return repoPackages;
216238
}
@@ -234,7 +256,7 @@ async function main(argv) {
234256
let targetPackages = [];
235257
for (const pkg of Object.keys(repoPackages)) {
236258
if (
237-
["client", "core", "management"].includes(repoPackages[pkg].versionPolicy) &&
259+
["client", "core", "management", "utility"].includes(repoPackages[pkg].versionPolicy) &&
238260
repoPackages[pkg].projectFolder.startsWith(`sdk/${service}`) &&
239261
!repoPackages[pkg].json["private"]
240262
) {
@@ -249,14 +271,13 @@ async function main(argv) {
249271
process.exit(1);
250272
}
251273
// Set all the new versions & update any references to internal projects with the new versions
252-
console.log(`Updating packages with build ID ${buildId}`);
253-
274+
console.log(`Updating the following packages with build ID ${buildId}`);
275+
console.dir(targetPackages);
254276
for (const pkg of targetPackages) {
255-
console.log("package updated = ");
256-
console.log(pkg);
277+
console.log(`package updated = ${pkg}`);
257278
repoPackages = updatePackageVersion(repoPackages, pkg, buildId, config.catalogs);
258279
repoPackages = updateInternalDependencyVersions(repoPackages, pkg, buildId, config.catalogs);
259-
console.log(repoPackages[pkg].newVer);
280+
console.log(`newer version: ${repoPackages[pkg].newVer}`);
260281
}
261282

262283
for (const pkg of Object.keys(repoPackages)) {

0 commit comments

Comments
 (0)