@@ -5,23 +5,28 @@ import {
5
5
CI_TYPES ,
6
6
CI_TYPES_KEYS
7
7
} from './ci_type_parser.js' ;
8
+ import PRData from "../pr_data.js" ;
8
9
9
10
export const CI_CRUMB_URL = `https://${ CI_DOMAIN } /crumbIssuer/api/json` ;
10
11
const CI_PR_NAME = CI_TYPES . get ( CI_TYPES_KEYS . PR ) . jobName ;
11
12
export const CI_PR_URL = `https://${ CI_DOMAIN } /job/${ CI_PR_NAME } /build` ;
12
13
14
+ const CI_V8_NAME = CI_TYPES . get ( CI_TYPES_KEYS . V8 ) . jobName ;
15
+ export const CI_V8_URL = `https://${ CI_DOMAIN } /job/${ CI_V8_NAME } /build` ;
16
+
13
17
export class RunPRJob {
14
18
constructor ( cli , request , owner , repo , prid ) {
15
19
this . cli = cli ;
16
20
this . request = request ;
17
21
this . owner = owner ;
18
22
this . repo = repo ;
19
23
this . prid = prid ;
24
+ this . prData = new PRData ( { prid, owner, repo} , cli )
20
25
}
21
26
22
27
async getCrumb ( ) {
23
28
try {
24
- const { crumb } = await this . request . json ( CI_CRUMB_URL ) ;
29
+ const { crumb} = await this . request . json ( CI_CRUMB_URL ) ;
25
30
return crumb ;
26
31
} catch ( e ) {
27
32
return false ;
@@ -32,19 +37,19 @@ export class RunPRJob {
32
37
const payload = new FormData ( ) ;
33
38
payload . append ( 'json' , JSON . stringify ( {
34
39
parameter : [
35
- { name : 'CERTIFY_SAFE' , value : 'on' } ,
36
- { name : 'TARGET_GITHUB_ORG' , value : this . owner } ,
37
- { name : 'TARGET_REPO_NAME' , value : this . repo } ,
38
- { name : 'PR_ID' , value : this . prid } ,
39
- { name : 'REBASE_ONTO' , value : '<pr base branch>' } ,
40
- { name : 'DESCRIPTION_SETTER_DESCRIPTION' , value : '' }
40
+ { name : 'CERTIFY_SAFE' , value : 'on' } ,
41
+ { name : 'TARGET_GITHUB_ORG' , value : this . owner } ,
42
+ { name : 'TARGET_REPO_NAME' , value : this . repo } ,
43
+ { name : 'PR_ID' , value : this . prid } ,
44
+ { name : 'REBASE_ONTO' , value : '<pr base branch>' } ,
45
+ { name : 'DESCRIPTION_SETTER_DESCRIPTION' , value : '' }
41
46
]
42
47
} ) ) ;
43
48
return payload ;
44
49
}
45
50
46
51
async start ( ) {
47
- const { cli } = this ;
52
+ const { cli} = this ;
48
53
cli . startSpinner ( 'Validating Jenkins credentials' ) ;
49
54
const crumb = await this . getCrumb ( ) ;
50
55
@@ -71,6 +76,28 @@ export class RunPRJob {
71
76
return false ;
72
77
}
73
78
cli . stopSpinner ( 'PR CI job successfully started' ) ;
79
+
80
+ // check if the job need a v8 build and trigger it
81
+ await this . prData . getPR ( ) ;
82
+ const labels = this . prData . pr . labels
83
+ if ( labels . includes ( 'v8 engine' ) ) {
84
+ cli . startSpinner ( 'Starting V8 CI job' ) ;
85
+ const response = await this . request . fetch ( CI_V8_URL , {
86
+ method : 'POST' ,
87
+ headers : {
88
+ 'Jenkins-Crumb' : crumb
89
+ } ,
90
+ body : this . payload
91
+ } ) ;
92
+ if ( response . status !== 201 ) {
93
+ cli . stopSpinner (
94
+ `Failed to start V8 CI: ${ response . status } ${ response . statusText } ` ,
95
+ this . cli . SPINNER_STATUS . FAILED ) ;
96
+ return false ;
97
+ }
98
+ cli . stopSpinner ( 'V8 CI job successfully started' ) ;
99
+ }
100
+
74
101
} catch ( err ) {
75
102
cli . stopSpinner ( 'Failed to start CI' , this . cli . SPINNER_STATUS . FAILED ) ;
76
103
return false ;
0 commit comments