From 195ecbe1939d8815772e8cd9d97f0a9c8d53bf15 Mon Sep 17 00:00:00 2001 From: Or Shoval Date: Wed, 13 Dec 2023 14:33:59 +0200 Subject: [PATCH] WIP Signed-off-by: Or Shoval --- releng/release-tool/BUILD.bazel | 2 + releng/release-tool/release-tool.go | 61 +++++++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/releng/release-tool/BUILD.bazel b/releng/release-tool/BUILD.bazel index 496a9528f0..82ce7b10c2 100644 --- a/releng/release-tool/BUILD.bazel +++ b/releng/release-tool/BUILD.bazel @@ -8,6 +8,8 @@ go_library( deps = [ "@com_github_google_go_github_v32//github:go_default_library", "@com_github_masterminds_semver//:go_default_library", + "@in_gopkg_yaml_v3//:go_default_library", + "@io_k8s_test_infra//prow/config:go_default_library", "@org_golang_x_oauth2//:go_default_library", ], ) diff --git a/releng/release-tool/release-tool.go b/releng/release-tool/release-tool.go index 4fa5eb9852..fd7a82fb3e 100644 --- a/releng/release-tool/release-tool.go +++ b/releng/release-tool/release-tool.go @@ -14,10 +14,12 @@ import ( "strings" "time" - "golang.org/x/oauth2" - "github.com/Masterminds/semver" "github.com/google/go-github/v32/github" + "golang.org/x/oauth2" + "gopkg.in/yaml.v3" + + "k8s.io/test-infra/prow/config" ) type blockerListCacheEntry struct { @@ -414,8 +416,11 @@ func (r *releaseData) forkProwJobs() error { // create new prow configs if they don't already exist if _, err := os.Stat(fullOutputConfig); err != nil && os.IsNotExist(err) { + updateJobConfig, err := updatePhase2Jobs(r.org, r.repo, fullJobConfig) + defer os.Remove(updateJobConfig) + log.Printf("Creating new prow yaml at path %s", fullOutputConfig) - cmd := exec.Command("/usr/bin/config-forker", "--job-config", fullJobConfig, "--version", version, "--output", fullOutputConfig) + cmd := exec.Command("/usr/bin/config-forker", "--job-config", updateJobConfig, "--version", version, "--output", fullOutputConfig) bytes, err := cmd.CombinedOutput() if err != nil { log.Printf("ERROR: config-forker command output: %s : %s ", string(bytes), err) @@ -1271,3 +1276,53 @@ func main() { } } } + +func updatePhase2Jobs(org, repo, fullJobConfig string) (string, error) { + prowConfigTmp, err := createEmptyTmpFile() + if err != nil { + return "", err + } + defer os.Remove(prowConfigTmp) + + pc, err := config.Load(prowConfigTmp, fullJobConfig, nil, "") + if err != nil { + return "", err + } + + orgRepo := org + "/" + repo + for key, jobs := range pc.PresubmitsStatic { + if key != orgRepo { + continue + } + for i, job := range jobs { + if job.AlwaysRun == false && + job.Optional == false && + job.RegexpChangeMatcher.RunIfChanged == "" && + job.RegexpChangeMatcher.SkipIfOnlyChanged == "" { + pc.PresubmitsStatic[key][i].AlwaysRun = true + } + } + } + + yamlData, err := yaml.Marshal(pc) + if err != nil { + return "", err + } + + updateJobConfig := os.TempDir() + "/job-config.yaml" + err = ioutil.WriteFile(updateJobConfig, yamlData, 0644) + if err != nil { + return "", err + } + return updateJobConfig, err +} + +func createEmptyTmpFile() (string, error) { + tmpFile, err := os.CreateTemp("", "dummy-config") + if err != nil { + return "", err + } + defer tmpFile.Close() + + return tmpFile.Name(), nil +}