25
25
done, rather that developing a general purpose language to do this
26
26
"""
27
27
28
- import re
29
28
import argparse
30
29
import glob
30
+ import re
31
+ import sys
32
+
31
33
from os import path , walk
34
+
32
35
import ruamel .yaml
33
36
34
37
# Prow files that will be ignored
@@ -61,51 +64,69 @@ def setup_yaml():
61
64
yaml .width = MAX_WIDTH
62
65
return yaml
63
66
64
- def edit_job_config (yaml , prow_job_file_name ):
67
+ def edit_job_config (yaml , prow_job_file_name , force_rewrite = False ):
65
68
with open (prow_job_file_name , "r" ) as job_fp :
66
69
prow_config = yaml .load (job_fp )
67
70
68
71
def should_edit (job ):
69
- return job ["name" ] == "a-specific-job-to-edit"
72
+ image = job ["spec" ]["containers" ][0 ]["image" ]
73
+ cluster = job ["cluster" ]
74
+ uses_image_builder = image .startswith ("gcr.io/k8s-testimages/image-builder" )
75
+ return uses_image_builder and cluster == "k8s-infra-prow-build-trusted"
76
+
70
77
71
78
def edit (job ):
72
- return job
79
+ edited = False
80
+ name = job ["name" ]
81
+ print (f' handling job: { name } ' )
82
+ annotations = job ["annotations" ]
83
+ dashboard_list = re .split ('[, ]+' , annotations ["testgrid-dashboards" ])
84
+ if 'wg-k8s-infra-gcb' not in dashboard_list :
85
+ dashboard_list .append ('wg-k8s-infra-gcb' )
86
+ annotations ["testgrid-dashboards" ] = ", " .join (dashboard_list )
87
+ edited = True
88
+ return edited
89
+
90
+ should_rewrite = force_rewrite
73
91
74
92
# For each presubmit, postsubmit, and periodic
75
93
# presubmits -> <any repository> -> [{name: prowjob}]
76
94
if "presubmits" in prow_config :
77
95
for _ , jobs in prow_config ["presubmits" ].items ():
78
96
for job in jobs :
79
- if should_edit (job ):
80
- edit ( job )
97
+ if edit (job ):
98
+ should_rewrite = True
81
99
82
100
# postsubmits -> <any repository> -> [{name: prowjob}]
83
101
if "postsubmits" in prow_config :
84
102
for _ , jobs in prow_config ["postsubmits" ].items ():
85
103
for job in jobs :
86
- if should_edit (job ):
87
- edit ( job )
104
+ if edit (job ):
105
+ should_rewrite = True
88
106
89
107
# periodics -> [{name: prowjob}]
90
108
if "periodics" in prow_config :
91
109
for job in prow_config ["periodics" ]:
92
- if should_edit (job ):
93
- edit ( job )
110
+ if edit (job ):
111
+ should_rewrite = True
94
112
95
113
# Dump ProwConfig to prowJobFile
96
- with open (prow_job_file_name , "w" ) as job_fp :
97
- yaml .dump (prow_config , job_fp )
98
- job_fp .truncate ()
114
+ if should_rewrite :
115
+ print (f' writing { prow_job_file_name } ' )
116
+ with open (prow_job_file_name , "w" ) as job_fp :
117
+ yaml .dump (prow_config , job_fp )
118
+ job_fp .truncate ()
99
119
100
- def main (prow_job_dir ):
120
+ def main (prow_job_dir , force_rewrite ):
101
121
yaml = setup_yaml ()
102
122
for f in glob .glob (f'{ prow_job_dir } /**/*.yaml' , recursive = True ):
103
123
if path .basename (f ) not in PROW_BLACKLIST :
104
124
try :
105
- print (f'editing { f } ' )
106
- edit_job_config (yaml , f )
107
- except :
108
- print (f'ERROR: could not edit { f } ' )
125
+ print (f'processing config: { f } ' )
126
+ edit_job_config (yaml , f , force_rewrite )
127
+ except Exception as e :
128
+ # e = sys.exc_info()[0]
129
+ print (f'ERROR: could not edit { f } : { e } ' )
109
130
110
131
if __name__ == '__main__' :
111
132
PARSER = argparse .ArgumentParser (
@@ -114,6 +135,10 @@ def main(prow_job_dir):
114
135
'--prow-job-dir' ,
115
136
default = '../config/jobs' ,
116
137
help = 'Path to Prow Job Directory' )
138
+ PARSER .add_argument (
139
+ '--force' ,
140
+ default = True ,
141
+ help = 'Force rewrite of all job configs' )
117
142
ARGS = PARSER .parse_args ()
118
143
119
- main (ARGS .prow_job_dir )
144
+ main (ARGS .prow_job_dir , ARGS . force )
0 commit comments