Skip to content

Commit 2dceb5f

Browse files
author
Hector Vido
committed
Respecting always_run from config file
1 parent 8bf5e30 commit 2dceb5f

File tree

4 files changed

+60
-14
lines changed

4 files changed

+60
-14
lines changed

cmd/ci-operator-prowgen/README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
prowgen
2+
=======
3+
4+
Prowgen is a tool that converts [ci-operator configuration](https://docs.ci.openshift.org/docs/architecture/ci-operator/)
5+
into [Prowjobs](https://docs.prow.k8s.io/docs/jobs/).
6+
7+
The objetive is to made `ci-operator configuration` the only source of truth for jobs created
8+
by **prowgen**, based on configurations inside `openshift/ci-operator/config/`, replacing any
9+
user manual modification directly on `openshift/ci-operator/jobs/`.
10+
11+
Prowgen is normally executed by `make update/make jobs` inside `openshift/release` folder.
12+
13+
Testing
14+
-------
15+
16+
`Prowgen` is hardcoded to use `GOPATH` + `src/github.com/openshift/release`, if you want to test it on your machine
17+
you can use a symbolic link ponting to your `openshift/release` clone:
18+
19+
```bash
20+
# generally GOPATH=~/go
21+
ln -s ~/cloned-repos/openshift/release ~/go/src/github.com/openshift/release
22+
```
23+
24+
Then you can execute `ci-operator-prowgen`:
25+
26+
```bash
27+
ci-operator-prowgen \
28+
--from-release-repo \
29+
--to-release-repo \
30+
--known-infra-file infra-build-farm-periodics.yaml \
31+
--known-infra-file infra-periodics.yaml \
32+
--known-infra-file infra-image-mirroring.yaml \
33+
--known-infra-file infra-periodics-origin-release-images.yaml
34+
```

cmd/ci-operator-prowgen/main.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ func generateJobs(resolver registry.Resolver, cache map[string]*config.Prowgen,
159159
configSpec = &resolved
160160
}
161161
generated, err := prowgen.GenerateJobs(configSpec, pInfo)
162+
if orgRepo == "stolostron/policy-collection" {
163+
print(orgRepo)
164+
}
162165
if err != nil {
163166
return err
164167
}
@@ -195,8 +198,8 @@ func writeToDir(dir string, c map[string]*prowconfig.JobConfig) error {
195198
errCh := make(chan error)
196199
map_ := func() error {
197200
for x := range ch {
198-
i := strings.Index(x.k, "/")
199-
org, repo := x.k[:i], x.k[i+1:]
201+
i := strings.Split(x.k, "/")
202+
org, repo := i[0], i[1]
200203
if err := jc.WriteToDir(dir, org, repo, x.v, prowgen.Generator, nil); err != nil {
201204
errCh <- err
202205
}

pkg/jobconfig/files.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ func WriteToDir(jobDir, org, repo string, jobConfig *prowconfig.JobConfig, gener
365365
return nil
366366
}
367367

368-
// Given two JobConfig, merge jobs from the `source` one to to `destination`
368+
// Given two JobConfig, merge jobs from the `source` one to `destination`
369369
// one. Jobs are matched by name. All jobs from `source` will be present in
370370
// `destination` - if there were jobs with the same name in `destination`, they
371371
// will be updated. All jobs in `destination` that are not overwritten this
@@ -471,9 +471,6 @@ func mergeJobConfig(destination, source *prowconfig.JobConfig, allJobs sets.Set[
471471
func mergePresubmits(old, new *prowconfig.Presubmit) prowconfig.Presubmit {
472472
merged := *new
473473

474-
merged.AlwaysRun = old.AlwaysRun
475-
merged.RunIfChanged = old.RunIfChanged
476-
merged.SkipIfOnlyChanged = old.SkipIfOnlyChanged
477474
merged.MaxConcurrency = old.MaxConcurrency
478475
merged.SkipReport = old.SkipReport
479476
merged.Cluster = func() string {
@@ -485,12 +482,6 @@ func mergePresubmits(old, new *prowconfig.Presubmit) prowconfig.Presubmit {
485482
return ""
486483
}()
487484

488-
if new.RunIfChanged != "" || new.SkipIfOnlyChanged != "" || new.Annotations["pipeline_run_if_changed"] != "" {
489-
merged.RunIfChanged = new.RunIfChanged
490-
merged.SkipIfOnlyChanged = new.SkipIfOnlyChanged
491-
merged.AlwaysRun = new.AlwaysRun
492-
}
493-
494485
// TODO(muller): Special case images jobs for now. Some repos are marking
495486
// images jobs as optional for which we do not have syntax in ci-operator (should we?).
496487
// Tolerate manual changes for these jobs for now
@@ -499,6 +490,9 @@ func mergePresubmits(old, new *prowconfig.Presubmit) prowconfig.Presubmit {
499490
if new.Optional {
500491
merged.Optional = new.Optional
501492
}
493+
if merged.Optional {
494+
merged.AlwaysRun = false
495+
}
502496
}
503497

504498
return merged

pkg/prowgen/prowgen.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,18 @@ func GenerateJobs(configSpec *cioperatorapi.ReleaseBuildConfiguration, info *Pro
132132
injectArchitectureLabels(jobBaseGen, configSpec.Images)
133133

134134
jobBaseGen.PodSpec.Add(Targets(presubmitTargets...))
135-
presubmits[orgrepo] = append(presubmits[orgrepo], *generatePresubmitForTest(jobBaseGen, imagesTestName, info))
135+
presubmits[orgrepo] = append(presubmits[orgrepo], *generatePresubmitForTest(jobBaseGen, imagesTestName, info, func(options *generatePresubmitOptions) {
136+
if len(configSpec.Images) > 0 {
137+
optional := false
138+
for _, config := range configSpec.Images {
139+
if config.Optional {
140+
optional = true
141+
break
142+
}
143+
}
144+
options.optional = optional
145+
}
146+
}))
136147

137148
if configSpec.PromotionConfiguration != nil {
138149
jobBaseGen = newJobBaseBuilder().TestName(imagesTestName)
@@ -245,6 +256,10 @@ type generatePresubmitOptions struct {
245256
disableRehearsal bool
246257
}
247258

259+
func (opts *generatePresubmitOptions) shouldAlwaysRun() bool {
260+
return opts.runIfChanged == "" && opts.skipIfOnlyChanged == "" && !opts.defaultDisable && opts.pipelineRunIfChanged == ""
261+
}
262+
248263
type generatePresubmitOption func(options *generatePresubmitOptions)
249264

250265
func generatePresubmitForTest(jobBaseBuilder *prowJobBaseBuilder, name string, info *ProwgenInfo, options ...generatePresubmitOption) *prowconfig.Presubmit {
@@ -269,7 +284,7 @@ func generatePresubmitForTest(jobBaseBuilder *prowJobBaseBuilder, name string, i
269284
}
270285
pj := &prowconfig.Presubmit{
271286
JobBase: base,
272-
AlwaysRun: opts.runIfChanged == "" && opts.skipIfOnlyChanged == "" && !opts.defaultDisable && opts.pipelineRunIfChanged == "",
287+
AlwaysRun: opts.shouldAlwaysRun(),
273288
Brancher: prowconfig.Brancher{Branches: sets.List(sets.New[string](jc.ExactlyBranch(info.Branch), jc.FeatureBranch(info.Branch)))},
274289
Reporter: prowconfig.Reporter{
275290
Context: fmt.Sprintf("ci/prow/%s", shortName),

0 commit comments

Comments
 (0)