@@ -12,6 +12,9 @@ const taskVersionBumpingDocUrl = "https://aka.ms/azp-tasks-version-bumping";
12
12
13
13
const packageEndpoint = process . env [ 'PACKAGE_VERSIONS_ENDPOINT' ] ;
14
14
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
+
15
18
if ( ! packageEndpoint ) {
16
19
logToPipeline ( 'error' , 'Failed to get info from package endpoint because no endpoint was specified. Try setting the PACKAGE_VERSIONS_ENDPOINT environment variable.' )
17
20
process . exit ( 1 ) ;
@@ -66,7 +69,7 @@ function checkMasterVersions(masterTasks, sprint, isReleaseTagExist, isCourtesyW
66
69
return messages ;
67
70
}
68
71
69
- function compareLocalWithMaster ( localTasks , masterTasks , sprint , isReleaseTagExist , isCourtesyWeek ) {
72
+ function compareLocalToMaster ( localTasks , masterTasks , sprint ) {
70
73
const messages = [ ] ;
71
74
72
75
for ( const localTask of localTasks ) {
@@ -94,6 +97,22 @@ function compareLocalWithMaster(localTasks, masterTasks, sprint, isReleaseTagExi
94
97
} ) ;
95
98
continue ;
96
99
}
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
+ }
97
116
98
117
if ( localTask . version . minor === sprint && isCourtesyWeek ) {
99
118
messages . push ( {
@@ -115,7 +134,7 @@ function compareLocalWithMaster(localTasks, masterTasks, sprint, isReleaseTagExi
115
134
return messages ;
116
135
}
117
136
118
- function getTasksVersions ( tasks , basepath ) {
137
+ function readVersionsFromTaskJsons ( tasks , basepath ) {
119
138
return tasks . map ( x => {
120
139
const taskJSONPath = join ( basepath , 'Tasks' , x , 'task.json' ) ;
121
140
@@ -147,7 +166,7 @@ async function clientWrapper(url) {
147
166
}
148
167
}
149
168
150
- async function getFeedTasksVersions ( ) {
169
+ async function getTaskVersionsFromFeed ( ) {
151
170
const { result, statusCode } = await clientWrapper ( packageEndpoint ) ;
152
171
153
172
if ( statusCode !== 200 ) {
@@ -165,7 +184,7 @@ async function getFeedTasksVersions() {
165
184
} ) ) ;
166
185
}
167
186
168
- function compareLocalWithFeed ( localTasks , feedTasks , sprint ) {
187
+ function compareLocalToFeed ( localTasks , feedTasks , sprint ) {
169
188
const messages = [ ] ;
170
189
171
190
for ( const localTask of localTasks ) {
@@ -221,26 +240,40 @@ function compareLocalTaskLoc(localTasks) {
221
240
return messages ;
222
241
}
223
242
224
- function getChangedTaskJsonFromMaster ( names ) {
243
+ function loadTaskJsonsFromMaster ( names ) {
225
244
names . forEach ( x => {
226
245
mkdir ( '-p' , join ( tempMasterTasksPath , 'Tasks' , x ) ) ;
227
246
run ( `git show origin/master:Tasks/${ x } /task.json > ${ tempMasterTasksPath . split ( sep ) . join ( posix . sep ) } /Tasks/${ x } /task.json` ) ;
228
247
} ) ;
229
248
}
230
249
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
+
231
261
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 ( ) ;
237
269
const isReleaseTagExist = run ( `git tag -l v${ sprint } ` ) . length !== 0 ;
238
270
const isCourtesyWeek = week === 3 ;
239
271
240
272
const messages = [
241
273
...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 ) ,
244
277
...compareLocalTaskLoc ( localTasks )
245
278
] ;
246
279
0 commit comments