1- import * as azdev from "azure-devops-node-api" ;
2- import * as ba from "azure-devops-node-api/BuildApi" ;
3- import { Build , BuildStatus , BuildResult } from "azure-devops-node-api/interfaces/BuildInterfaces" ;
4- import { stringify } from "querystring" ;
5- import { IBuildApi } from "azure-devops-node-api/BuildApi" ;
6- import AzureDevOpsClientWrapper from "./azureDevOpsClientWrapper" ;
7- import { injectable , inject } from "tsyringe" ;
8-
9- @injectable ( )
10- export default class AzureDevOpsClient {
11-
12- private orgUrl : string ;
13- private token : string ;
14-
15- constructor ( @inject ( AzureDevOpsClientWrapper ) private azureDevOpsClient : AzureDevOpsClientWrapper ) {
16-
17- }
18-
19- public async getBuildInfo ( organizationUrl : string , token : string , project : string , buildId : number ) : Promise < Build > {
20- return await this . azureDevOpsClient . getBuild ( organizationUrl , token , project , buildId ) ;
21- }
22-
23- public async listRelatedBuilds ( organizationUrl : string , token : string , project : string , sourceVersion : string , waitForAllBuilds : Boolean = true , definitionFilters ?: string [ ] ) : Promise < Map < string , Build > > {
24- let allBuilds = await this . azureDevOpsClient . getBuilds ( organizationUrl , token , project , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null ) ;
25-
26- var relatedBuilds = this . getBuildsFromSameSourceVersion ( allBuilds , sourceVersion ) ;
27- relatedBuilds = this . sortBuildsByQueueTimeDescending ( relatedBuilds ) ;
28-
29- if ( ! waitForAllBuilds ) {
30- relatedBuilds = this . filterBuildsByDefinition ( relatedBuilds , definitionFilters ) ;
31- }
32-
33- // Only the last Build Run for each definition is considered
34- let lastBuildsFromRelatedDefinitions = new Map < string , Build > ( ) ;
35- for ( var relatedBuild of relatedBuilds ) {
36- if ( lastBuildsFromRelatedDefinitions . has ( relatedBuild . definition . id . toString ( ) ) ) {
37- continue ;
38- }
39- lastBuildsFromRelatedDefinitions . set ( relatedBuild . definition . id . toString ( ) , relatedBuild ) ;
40- }
41-
42- return lastBuildsFromRelatedDefinitions ;
43- }
44-
45- private filterBuildsByDefinition ( builds : Build [ ] , definitions ?: string [ ] ) {
46- return builds . filter ( x => definitions . some ( definition => definition == x . definition . id . toString ( ) ) ) ;
47- }
48-
49- private getBuildsFromSameSourceVersion ( builds : Build [ ] , sourceVersion : string ) : Build [ ] {
50- return builds . filter ( build => build . sourceVersion == sourceVersion ) ;
51- }
52-
53- private sortBuildsByQueueTimeDescending ( builds : Build [ ] ) : Build [ ] {
54- return builds . sort ( ( a , b ) => b . queueTime . getDate ( ) - a . queueTime . getDate ( ) ) ;
55- }
56-
57- public async addBuildTag ( organizationUrl : string , token : string , project : string , buildId : number , tag : string ) {
58- return await await this . azureDevOpsClient . addBuildTag ( organizationUrl , token , project , buildId , tag ) ;
59- }
1+ import * as azdev from "azure-devops-node-api" ;
2+ import * as ba from "azure-devops-node-api/BuildApi" ;
3+ import { Build , BuildStatus , BuildResult } from "azure-devops-node-api/interfaces/BuildInterfaces" ;
4+ import { stringify } from "querystring" ;
5+ import { IBuildApi } from "azure-devops-node-api/BuildApi" ;
6+ import AzureDevOpsClientWrapper from "../helpers/azureDevOpsClientWrapper" ;
7+ import { injectable , inject } from "tsyringe" ;
8+
9+ @injectable ( )
10+ export default class AzureDevOpsClient {
11+
12+ constructor ( @inject ( AzureDevOpsClientWrapper ) private azureDevOpsClient : AzureDevOpsClientWrapper ) {
13+
14+ }
15+
16+ public async getBuildInfo ( organizationUrl : string , token : string , project : string , buildId : number ) : Promise < Build > {
17+ return await this . azureDevOpsClient . getBuild ( organizationUrl , token , project , buildId ) ;
18+ }
19+
20+ public async listRelatedBuilds ( organizationUrl : string , token : string , project : string , sourceVersion : string , waitForAllBuilds : Boolean = true , definitionFilters ?: string [ ] ) : Promise < Map < string , Build > > {
21+ let allBuilds = await this . azureDevOpsClient . getBuilds ( organizationUrl , token , project , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null , null ) ;
22+
23+ var relatedBuilds = this . filterBuildsFromSameSourceVersion ( allBuilds , sourceVersion ) ;
24+ relatedBuilds = this . sortBuildsByQueueTimeDescending ( relatedBuilds ) ;
25+
26+ if ( ! waitForAllBuilds ) {
27+ relatedBuilds = this . filterBuildsByDefinition ( relatedBuilds , definitionFilters ) ;
28+ }
29+
30+ // Only the last Build Run for each definition is considered
31+ let lastBuildsFromRelatedDefinitions = new Map < string , Build > ( ) ;
32+ for ( var relatedBuild of relatedBuilds ) {
33+ if ( lastBuildsFromRelatedDefinitions . has ( relatedBuild . definition . id . toString ( ) ) ) {
34+ continue ;
35+ }
36+ lastBuildsFromRelatedDefinitions . set ( relatedBuild . definition . id . toString ( ) , relatedBuild ) ;
37+ }
38+
39+ return lastBuildsFromRelatedDefinitions ;
40+ }
41+
42+ private filterBuildsByDefinition ( builds : Build [ ] , definitions ?: string [ ] ) {
43+ return builds . filter ( x => definitions . some ( definition => definition == x . definition . id . toString ( ) ) ) ;
44+ }
45+
46+ private filterBuildsFromSameSourceVersion ( builds : Build [ ] , sourceVersion : string ) : Build [ ] {
47+ return builds . filter ( build => build . sourceVersion == sourceVersion ) ;
48+ }
49+
50+ private sortBuildsByQueueTimeDescending ( builds : Build [ ] ) : Build [ ] {
51+ return builds . sort ( ( a , b ) => b . queueTime . getDate ( ) - a . queueTime . getDate ( ) ) ;
52+ }
53+
54+ public async addBuildTag ( organizationUrl : string , token : string , project : string , buildId : number , tag : string ) {
55+ return await await this . azureDevOpsClient . addBuildTag ( organizationUrl , token , project , buildId , tag ) ;
56+ }
6057}
0 commit comments