diff --git a/templates.py b/templates.py index 6286c01..ea957d8 100644 --- a/templates.py +++ b/templates.py @@ -190,11 +190,37 @@ def gitea(args: argparse.Namespace) -> None: }) print(f"{RENOVATE_FILE}: created") + org, name = args.repo.split("/", 1) + teams = call("GET", f"/orgs/{org}/teams?limit=50") or [] + team = next((t for t in teams if t["name"] == "renovate"), None) + if team is None: + team = call("POST", f"/orgs/{org}/teams", { + "name": "renovate", + "description": "Renovate bot: write on listed repos only, not the whole org", + "includes_all_repositories": False, + "permission": "none", + "units": ["repo.code", "repo.issues", "repo.pulls"], + "units_map": {"repo.code": "write", "repo.issues": "write", "repo.pulls": "write"}, + "can_create_org_repo": False, + }) + print(f"team renovate in {org}: created") + call("PUT", f"/teams/{team['id']}/members/renovate") + print("bot renovate: added to the team") + members = {m["login"] for m in call("GET", f"/teams/{team['id']}/members?limit=50") or []} + if "renovate" not in members: + call("PUT", f"/teams/{team['id']}/members/renovate") + print("bot renovate: added to the team") + repos = {r["name"] for r in call("GET", f"/teams/{team['id']}/repos?limit=50") or []} + if name in repos: + print(f"team access to {name}: already there") + else: + call("PUT", f"/teams/{team['id']}/repos/{org}/{name}") + print(f"team access to {name}: granted") + print( "\nOne thing is still manual, and it does not happen by itself: the repo has\n" "to be added to `repositories` in projects/personal/renovate/renovate-config.js\n" - "of infra/komodo, and the `renovate` team of its organization needs write\n" - "access to it. Extending the preset subscribes nothing - the bot only visits\n" + "of infra/komodo. Extending the preset subscribes nothing - the bot only visits\n" "repos named in that list." )