Skip to content

Instantly share code, notes, and snippets.

@frbayart
Created May 25, 2022 07:39
Show Gist options
  • Save frbayart/f98a5d1e646eb308cb160f4dff82b8b8 to your computer and use it in GitHub Desktop.
Save frbayart/f98a5d1e646eb308cb160f4dff82b8b8 to your computer and use it in GitHub Desktop.
Probot settings.yaml generator
from github import Github
from jinja2 import Environment, FileSystemLoader
import os
import yaml
g = Github(os.environ['GITHUT_PAT'])
repo = g.get_repo("GH-ORG/REPONAME")
labels = repo.get_labels()
milestones = repo.get_milestones()
topics = repo.get_topics()
collaborators = repo.get_collaborators()
teams = repo.get_teams()
class Branch:
def __init__(
self,
name,
enforce_admins,
dismiss_stale_reviews,
required_approving_review_count,
require_code_owner_reviews,
required_status_checks
):
self.name = name
self.enforce_admins = enforce_admins
self.dismiss_stale_reviews = dismiss_stale_reviews
self.required_approving_review_count = required_approving_review_count
self.require_code_owner_reviews = require_code_owner_reviews
self.required_status_checks = required_status_checks
b = []
for branch in ['main', 'develop']:
print(branch)
b.append(
Branch(
repo.get_branch(branch).name,
repo.get_branch(branch).get_protection().enforce_admins,
repo.get_branch(branch).get_protection().required_pull_request_reviews.dismiss_stale_reviews,
repo.get_branch(branch).get_protection().required_pull_request_reviews.required_approving_review_count,
repo.get_branch(branch).get_protection().required_pull_request_reviews.require_code_owner_reviews,
repo.get_branch(branch).get_protection().required_status_checks
)
)
if __name__ == "__main__":
env = Environment(loader = FileSystemLoader('.'), trim_blocks=True, lstrip_blocks=True)
template = env.get_template('settings.yaml.j2')
file=open("settings.yaml", "w")
file.write(template.render(
repository=repo,
labels=labels,
milestones=milestones,
topics=topics,
collaborators=collaborators,
teams=teams,
branches=b
))
file.close()
# These settings are synced to GitHub by https://probot.github.io/apps/settings/
repository:
name: {{ repository.name }}
description: {{ repository.description }}
{% if repository.homepage | length > 0 %}
homepage: {{ repository.homepage }}
{% endif %}
{% if topics | length > 0 %}
topics: {% for topic in topics %}{{ topic }}{% if not loop.last %}, {% endif %}{% endfor %}
{% endif %}
private: {{ repository.private | lower }}
has_issues: {{ repository.has_issues | lower }}
has_projects: {{ repository.has_projects | lower }}
has_wiki: {{ repository.has_wiki | lower }}
has_downloads: {{ repository.has_downloads | lower }}
default_branch: {{ repository.default_branch | lower }}
allow_squash_merge: {{ repository.allow_squash_merge | lower }}
allow_merge_commit: {{ repository.allow_merge_commit | lower }}
allow_rebase_merge: {{ repository.allow_rebase_merge | lower }}
delete_branch_on_merge: {{ repository.delete_branch_on_merge | lower }}
enable_automated_security_fixes: {{ repository.enable_automated_security_fixes() | lower }}
enable_vulnerability_alerts: {{ repository.enable_vulnerability_alert() | lower }}
labels:
{% for label in labels %}
- name: {{ label.name }}
color: {{ label.color }}
description: {{ label.description }}
{% endfor %}
milestones:
{% for milestone in milestones %}
- title: {{ milestone.title }}
{% if milestone.description | length > 0 %}
description: |
{{ milestone.description | indent(6)}}
{% endif %}
state: {{ milestone.state }}
{% endfor %}
# See https://docs.github.com/en/rest/reference/teams#add-or-update-team-repository-permissions for available options
teams:
{% for team in teams %}
- name: {{ team.name }}
permission: {{ team.permission }}
{% endfor %}
branches:
{% for branch in branches %}
- name: {{ branch.name }}
protection:
required_pull_request_reviews:
required_approving_review_count: {{ branch.required_approving_review_count }}
dismiss_stale_reviews: {{ branch.dismiss_stale_reviews | lower }}
require_code_owner_reviews: {{ branch.require_code_owner_reviews | lower }}
required_status_checks:
strict: {{ branch.required_status_checks.strict | lower }}
contexts: [{% for context in branch.required_status_checks.contexts %}'{{ context }}'{% if not loop.last %}, {% endif %}{% endfor %}]
enforce_admins: {{ branch.enforce_admins |lower }}
required_linear_history: true
required_signatures: true
{% endfor %}
- name: release/*
protection:
required_pull_request_reviews:
required_approving_review_count: 1
dismiss_stale_reviews: true
require_code_owner_reviews: false
required_status_checks:
strict: true
contexts: ['continuous-integration/jenkins/branch']
enforce_admins: true
required_linear_history: true
required_signatures: true
- name: support/*
protection:
required_pull_request_reviews:
required_approving_review_count: 1
dismiss_stale_reviews: true
require_code_owner_reviews: false
required_status_checks:
strict: true
contexts: ['continuous-integration/jenkins/branch']
enforce_admins: true
required_linear_history: true
required_signatures: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment