in cmd/init-repo/main.go [48:138]
func main() {
configFilePath := flag.String("config", "", "the config file in yaml format")
githubHost := flag.String("github-host", "", "the address of github (defaults to github.com)")
basePackage := flag.String("base-package", "", "the name of the package base (defaults to k8s.io when source repo is kubernetes, "+
"otherwise github-host/target-org)")
repoName := flag.String("source-repo", "", "the name of the source repository (eg. kubernetes)")
repoOrg := flag.String("source-org", "", "the name of the source repository organization, (eg. kubernetes)")
rulesFile := flag.String("rules-file", "", "the file with repository rules")
targetOrg := flag.String("target-org", "", `the target organization to publish into (e.g. "k8s-publishing-bot")`)
flag.Usage = Usage
flag.Parse()
cfg := config.Config{}
if *configFilePath != "" {
bs, err := ioutil.ReadFile(*configFilePath)
if err != nil {
glog.Fatalf("Failed to load config file from %q: %v", *configFilePath, err)
}
if err := yaml.Unmarshal(bs, &cfg); err != nil {
glog.Fatalf("Failed to parse config file at %q: %v", *configFilePath, err)
}
}
if *targetOrg != "" {
cfg.TargetOrg = *targetOrg
}
if *repoName != "" {
cfg.SourceRepo = *repoName
}
if *repoOrg != "" {
cfg.SourceOrg = *repoOrg
}
if *githubHost != "" {
cfg.GithubHost = *githubHost
}
if *basePackage != "" {
cfg.BasePackage = *basePackage
}
if cfg.GithubHost == "" {
cfg.GithubHost = "github.com"
}
// defaulting when base package is not specified
if cfg.BasePackage == "" {
if cfg.SourceRepo == "kubernetes" {
cfg.BasePackage = "k8s.io"
} else {
cfg.BasePackage = filepath.Join(cfg.GithubHost, cfg.TargetOrg)
}
}
BaseRepoPath = filepath.Join(SystemGoPath, "src", cfg.BasePackage)
if *rulesFile != "" {
cfg.RulesFile = *rulesFile
}
if cfg.SourceRepo == "" || cfg.SourceOrg == "" {
glog.Fatalf("source-org and source-repo cannot be empty")
}
if cfg.TargetOrg == "" {
glog.Fatalf("Target organization cannot be empty")
}
// If RULE_FILE_PATH is detected, check if the source repository include rules files.
if len(os.Getenv("RULE_FILE_PATH")) > 0 {
cfg.RulesFile = filepath.Join(BaseRepoPath, cfg.SourceRepo, os.Getenv("RULE_FILE_PATH"))
}
if cfg.RulesFile == "" {
glog.Fatalf("No rules file provided")
}
rules, err := config.LoadRules(cfg.RulesFile)
if err != nil {
glog.Fatalf("Failed to load rules: %v", err)
}
if err := config.Validate(rules); err != nil {
glog.Fatalf("Invalid rules: %v", err)
}
if err := os.MkdirAll(BaseRepoPath, os.ModePerm); err != nil {
glog.Fatalf("Failed to create source repo directory %s: %v", BaseRepoPath, err)
}
cloneSourceRepo(cfg)
for _, rule := range rules.Rules {
cloneForkRepo(cfg, rule.DestinationRepository)
}
}