package main import ( "context" "log" ) func main() { cfg, _ := LoadConfig("/app") if len(cfg.Jobs) == 0 { log.Printf("[main] No jobs configured") return } if cfg.Jenkins.URL == "" { log.Printf("[main] No Jenkins URL configured") return } ctx := context.Background() stats := &RemoveStats{} for _, cache := range cfg.Gradle.Caches { err := Remove(ctx, cache, RemoveOptions{ Workers: 4, Retries: 3, Stats: stats, Logger: log.Printf, Progress: func(current int64) { log.Printf("[main] Removed %d files", current) }, }) if err != nil { log.Printf("[main] Error removing cache %s: %s", cache, err) } log.Printf("Summary: Total=%d Success=%d Failed=%d", stats.Total, stats.Success, stats.Failed) } var jenkinsSvc JenkinsService = NewJenkinsClient(&cfg.Jenkins) triggerJobs(jenkinsSvc, cfg) } func triggerJobs(js JenkinsService, cfg *Config) { for _, job := range cfg.Jobs { log.Printf("[main] Triggering build for job %s", job) build, err := js.FetchBuild(job) if err != nil { log.Printf("[main] Error fetching build for job %s: %s", job, err) return } for i := 0; i < cfg.Retries; i++ { latestParams := ExtractBuildParams(build) merged := MergeParams(latestParams, cfg.Jenkins.DefaultParameters) if err := js.TriggerBuild(build, StringMapToInterfaceMap(merged)); err != nil { log.Printf("[main] Error triggering build for job %s: %s", job, err) } for _, special := range cfg.Jenkins.SpecialParameters { if IsSubset(latestParams, special) { log.Printf("[main] Skipping special parameters build (subset of latest) for %s: %+v", job, special) continue } log.Printf("[main] Triggering special parameters build for %s: %+v", job, special) if err := js.TriggerBuild(build, special); err != nil { log.Printf("[main] Error triggering special parameters build for job %s: %s", job, err) } } } } }