uwu-tools / peribolos

Apache License 2.0
21 stars 6 forks source link

Perform config merges if specified config path is a directory #172

Closed justaugustus closed 1 year ago

justaugustus commented 1 year ago

The merge command primarily exists as a preprocessor. Together with bash and Makefile targets, it:

This change internalizes that preprocessing when it recognizes that peribolos is being run against a config dir, instead of an individual YAML config file.

The specified config dir can be named anything, but the nested org configs will be expected to have the following form:

<config-dir>/<org-name>/org.yaml

The merge subcommand may be removed in a future iteration.

Signed-off-by: Stephen Augustus foo@auggie.dev


Example command:

peribolos --config-path=config --fix-org --fix-org-members --fix-teams --fix-team-members --min-admins=3 --required-admins=auggie-bot --required-admins=cpanato --required-admins=justaugustus --github-token-path /Users/augustus/.github-token

Example output:

❯ ./admin/update.sh --github-token-path ~/.github-token
+++ dirname ./admin/update.sh
++ cd ./admin/..
++ pwd -P
+ REPO_ROOT=/Users/augustus/prj/uwu-tools/peribolos
+ readonly REPO_ROOT
+ admins=('auggie-bot' 'cpanato' 'justaugustus')
+ readonly admins
+ readonly min_admins=3
+ min_admins=3
+ readonly config_path=config
+ config_path=config
+ cd /Users/augustus/prj/uwu-tools/peribolos
+ make update-prep
go build -v -o /Users/augustus/prj/uwu-tools/peribolos/_output/bin/peribolos
github.com/uwu-tools/peribolos
+ cmd=/Users/augustus/prj/uwu-tools/peribolos/_output/bin/peribolos
+ args=(--config-path="$config_path" --fix-org --fix-org-members --fix-teams --fix-team-members --min-admins="$min_admins" "${admins[@]/#/--required-admins=}")
+ /Users/augustus/prj/uwu-tools/peribolos/_output/bin/peribolos --config-path=config --fix-org --fix-org-members --fix-teams --fix-team-members --min-admins=3 --required-admins=auggie-bot --required-admins=cpanato --required-admins=justaugustus --github-token-path /Users/augustus/.github-token
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:918","func":"k8s.io/test-infra/prow/github.(*client).log","level":"info","msg":"Throttle(300, 100, *)","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"component":"unset","file":"/Users/augustus/prj/uwu-tools/peribolos/cmd/main.go:114","func":"github.com/uwu-tools/peribolos/cmd.rootCmd","level":"info","msg":"Adding config for org: relengfam","severity":"info","time":"2023-02-02T06:34:53-05:00"}
orgs:
  relengfam:
    admins:
    - auggie-bot
    - cpanato
    - justaugustus
    billing_email: fake@example.com
    company: ""
    default_repository_permission: read
    description: ""
    email: ""
    has_organization_projects: true
    has_repository_projects: true
    location: ""
    members_can_create_repositories: true
    name: ""
    repos:
      .allstar:
        default_branch: main
        has_projects: true
      artifacts:
        default_branch: main
        description: Kubernetes artifact promotion configurations
        has_projects: true
        homepage: https://artifacts.k8s.io/
      discuss-test:
        default_branch: main
        has_projects: true
        private: true

{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:918","func":"k8s.io/test-infra/prow/github.(*client).log","level":"info","msg":"GetOrg(relengfam)","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:1191","func":"k8s.io/test-infra/prow/github.(*client).doRequest","level":"info","msg":"Using GitHub REST API Version: 2022-11-28","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:918","func":"k8s.io/test-infra/prow/github.(*client).log","level":"info","msg":"ListOrgInvitations(relengfam)","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:1191","func":"k8s.io/test-infra/prow/github.(*client).doRequest","level":"info","msg":"Using GitHub REST API Version: 2022-11-28","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:918","func":"k8s.io/test-infra/prow/github.(*client).log","level":"info","msg":"User()","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:1191","func":"k8s.io/test-infra/prow/github.(*client).doRequest","level":"info","msg":"Using GitHub REST API Version: 2022-11-28","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:918","func":"k8s.io/test-infra/prow/github.(*client).log","level":"info","msg":"ListOrgMembers(relengfam, admin)","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:1191","func":"k8s.io/test-infra/prow/github.(*client).doRequest","level":"info","msg":"Using GitHub REST API Version: 2022-11-28","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:918","func":"k8s.io/test-infra/prow/github.(*client).log","level":"info","msg":"ListOrgMembers(relengfam, member)","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:1191","func":"k8s.io/test-infra/prow/github.(*client).doRequest","level":"info","msg":"Using GitHub REST API Version: 2022-11-28","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"component":"unset","file":"/Users/augustus/prj/uwu-tools/peribolos/org/org.go:52","func":"github.com/uwu-tools/peribolos/org.Configure","level":"info","msg":"Skipping org repositories configuration","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:918","func":"k8s.io/test-infra/prow/github.(*client).log","level":"info","msg":"ListTeams(relengfam)","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"client":"github","component":"unset","file":"/Users/augustus/go/pkg/mod/k8s.io/test-infra@v0.0.0-20230130201249-27b8435f1305/prow/github/client.go:1191","func":"k8s.io/test-infra/prow/github.(*client).doRequest","level":"info","msg":"Using GitHub REST API Version: 2022-11-28","severity":"info","time":"2023-02-02T06:34:53-05:00"}
{"component":"unset","file":"/Users/augustus/prj/uwu-tools/peribolos/cmd/main.go:142","func":"github.com/uwu-tools/peribolos/cmd.rootCmd","level":"info","msg":"Finished syncing configuration.","severity":"info","time":"2023-02-02T06:34:54-05:00"}