Skip to content

Commit d52dfc0

Browse files
Exclude new tasks from check downgrading CI step (#19435)
1 parent e86ae22 commit d52dfc0

File tree

1 file changed

+45
-12
lines changed

1 file changed

+45
-12
lines changed

ci/check-downgrading.js

+45-12
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ const taskVersionBumpingDocUrl = "https://aka.ms/azp-tasks-version-bumping";
1212

1313
const packageEndpoint = process.env['PACKAGE_VERSIONS_ENDPOINT'];
1414

15+
// An example:
16+
// PACKAGE_TOKEN={token} PACKAGE_VERSIONS_ENDPOINT={package_versions_endpoint} SYSTEM_PULLREQUEST_SOURCEBRANCH=refs/head/{local_branch_name} SYSTEM_PULLREQUEST_TARGETBRANCH={target_branch_eg_master} node ./ci/check-downgrading.js --task "@({tasks_names})" --sprint {current_sprint_number}
17+
1518
if (!packageEndpoint) {
1619
logToPipeline('error', 'Failed to get info from package endpoint because no endpoint was specified. Try setting the PACKAGE_VERSIONS_ENDPOINT environment variable.')
1720
process.exit(1);
@@ -66,7 +69,7 @@ function checkMasterVersions(masterTasks, sprint, isReleaseTagExist, isCourtesyW
6669
return messages;
6770
}
6871

69-
function compareLocalWithMaster(localTasks, masterTasks, sprint, isReleaseTagExist, isCourtesyWeek) {
72+
function compareLocalToMaster(localTasks, masterTasks, sprint) {
7073
const messages = [];
7174

7275
for (const localTask of localTasks) {
@@ -94,6 +97,22 @@ function compareLocalWithMaster(localTasks, masterTasks, sprint, isReleaseTagExi
9497
});
9598
continue;
9699
}
100+
}
101+
102+
return messages;
103+
}
104+
105+
function checkLocalVersions(localTasks, sprint, isReleaseTagExist, isCourtesyWeek) {
106+
const messages = [];
107+
108+
for (const localTask of localTasks) {
109+
if (localTask.version.minor < sprint) {
110+
messages.push({
111+
type: 'error',
112+
payload: `${localTask.name} have to be upgraded (task.json, task.loc.json) from v${localTask.version.minor} to v${sprint} at least since local minor version is less than the sprint version(${taskVersionBumpingDocUrl})`
113+
});
114+
continue;
115+
}
97116

98117
if (localTask.version.minor === sprint && isCourtesyWeek) {
99118
messages.push({
@@ -115,7 +134,7 @@ function compareLocalWithMaster(localTasks, masterTasks, sprint, isReleaseTagExi
115134
return messages;
116135
}
117136

118-
function getTasksVersions(tasks, basepath) {
137+
function readVersionsFromTaskJsons(tasks, basepath) {
119138
return tasks.map(x => {
120139
const taskJSONPath = join(basepath, 'Tasks' , x, 'task.json');
121140

@@ -147,7 +166,7 @@ async function clientWrapper(url) {
147166
}
148167
}
149168

150-
async function getFeedTasksVersions() {
169+
async function getTaskVersionsFromFeed() {
151170
const { result, statusCode } = await clientWrapper(packageEndpoint);
152171

153172
if (statusCode !== 200) {
@@ -165,7 +184,7 @@ async function getFeedTasksVersions() {
165184
}));
166185
}
167186

168-
function compareLocalWithFeed(localTasks, feedTasks, sprint) {
187+
function compareLocalToFeed(localTasks, feedTasks, sprint) {
169188
const messages = [];
170189

171190
for (const localTask of localTasks) {
@@ -221,26 +240,40 @@ function compareLocalTaskLoc(localTasks) {
221240
return messages;
222241
}
223242

224-
function getChangedTaskJsonFromMaster(names) {
243+
function loadTaskJsonsFromMaster(names) {
225244
names.forEach(x => {
226245
mkdir('-p', join(tempMasterTasksPath, 'Tasks', x));
227246
run(`git show origin/master:Tasks/${x}/task.json > ${tempMasterTasksPath.split(sep).join(posix.sep)}/Tasks/${x}/task.json`);
228247
});
229248
}
230249

250+
function doesTaskExistInMasterBranch(name) {
251+
try {
252+
// If task.json doesn't exist in the main branch it means that it's a new task
253+
run(`git cat-file -e origin/master:Tasks/${name}/task.json`, true);
254+
} catch (error) {
255+
return false;
256+
}
257+
258+
return true;
259+
}
260+
231261
async function main({ task, sprint, week }) {
232-
const changedTasksNames = resolveTaskList(task);
233-
const localTasks = getTasksVersions(changedTasksNames, join(__dirname, '..'));
234-
getChangedTaskJsonFromMaster(changedTasksNames);
235-
const masterTasks = getTasksVersions(changedTasksNames, tempMasterTasksPath);
236-
const feedTasks = await getFeedTasksVersions();
262+
const taskList = resolveTaskList(task);
263+
264+
const localTasks = readVersionsFromTaskJsons(taskList, join(__dirname, '..'));
265+
const masterTaskList = taskList.filter(x => doesTaskExistInMasterBranch(x));
266+
loadTaskJsonsFromMaster(masterTaskList);
267+
const masterTasks = readVersionsFromTaskJsons(masterTaskList, tempMasterTasksPath);
268+
const feedTaskVersions = await getTaskVersionsFromFeed();
237269
const isReleaseTagExist = run(`git tag -l v${sprint}`).length !== 0;
238270
const isCourtesyWeek = week === 3;
239271

240272
const messages = [
241273
...checkMasterVersions(masterTasks, sprint, isReleaseTagExist, isCourtesyWeek),
242-
...compareLocalWithMaster(localTasks, masterTasks, sprint, isReleaseTagExist, isCourtesyWeek),
243-
...compareLocalWithFeed(localTasks, feedTasks, sprint),
274+
...compareLocalToMaster(localTasks, masterTasks, sprint),
275+
...checkLocalVersions(localTasks, sprint, isReleaseTagExist, isCourtesyWeek),
276+
...compareLocalToFeed(localTasks, feedTaskVersions, sprint),
244277
...compareLocalTaskLoc(localTasks)
245278
];
246279

0 commit comments

Comments
 (0)