Reviewed-by: Goncharov, Artem <artem.goncharov@t-systems.com> Co-authored-by: gtema <artem.goncharov@gmail.com> Co-committed-by: gtema <artem.goncharov@gmail.com>
		
			
				
	
	
		
			185 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/python
 | 
						|
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
#    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
						|
# implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
import argparse
 | 
						|
import copy
 | 
						|
import logging
 | 
						|
import yaml
 | 
						|
 | 
						|
import otc_metadata.services
 | 
						|
 | 
						|
data = otc_metadata.services.Services()
 | 
						|
 | 
						|
 | 
						|
def process_services(args, services):
 | 
						|
    """Process services"""
 | 
						|
    gitea_bp = dict(
 | 
						|
        branch_name="main",
 | 
						|
        enable_approvals_whitelist=True,
 | 
						|
        approvals_whitelist_teams=["docs-infra-team"],
 | 
						|
        block_on_rejected_reviews=True,
 | 
						|
        dismiss_stale_approvals=True,
 | 
						|
        enable_push=False,
 | 
						|
        status_check_contexts=["gl/check"],
 | 
						|
        enable_merge_whitelist=True,
 | 
						|
        merge_whitelist_usernames=["zuul"],
 | 
						|
    )
 | 
						|
    gitea_repo_template = dict(
 | 
						|
        default_branch="main",
 | 
						|
        description="Open Telekom Cloud Service docs",
 | 
						|
        homepage=None,
 | 
						|
        archived=False,
 | 
						|
        has_issues=True,
 | 
						|
        has_projects=False,
 | 
						|
        has_wiki=False,
 | 
						|
        default_delete_branch_after_merge=True,
 | 
						|
        allow_merge_commit=False,
 | 
						|
        allow_squash_merge=True,
 | 
						|
        allow_rebase_merge=False,
 | 
						|
        default_merge_style="squash",
 | 
						|
        branch_protections=[],
 | 
						|
    )
 | 
						|
    github_bp = dict(
 | 
						|
        branch_name="main",
 | 
						|
        enable_approvals_whitelist=True,
 | 
						|
        approvals_whitelist_teams=["docs-infra-team"],
 | 
						|
        block_on_rejected_reviews=True,
 | 
						|
        dismiss_stale_approvals=True,
 | 
						|
        enable_push=False,
 | 
						|
        status_check_contexts=["gl/check"],
 | 
						|
        enable_merge_whitelist=True,
 | 
						|
        merge_whitelist_usernames=["zuul"],
 | 
						|
    )
 | 
						|
    github_repo_template = dict(
 | 
						|
        default_branch="main",
 | 
						|
        description="Open Telekom Cloud Service docs",
 | 
						|
        homepage=None,
 | 
						|
        archived=False,
 | 
						|
        has_issues=True,
 | 
						|
        has_projects=False,
 | 
						|
        has_wiki=False,
 | 
						|
        delete_branch_on_merge=True,
 | 
						|
        allow_merge_commit=False,
 | 
						|
        allow_squash_merge=True,
 | 
						|
        allow_rebase_merge=False,
 | 
						|
        allow_update_branch=True,
 | 
						|
        branch_protections=[],
 | 
						|
    )
 | 
						|
 | 
						|
    for service in services:
 | 
						|
        logging.debug(f"Processing service {service}")
 | 
						|
        config = None
 | 
						|
        repo_name = None
 | 
						|
 | 
						|
        for repo in service["repositories"]:
 | 
						|
            logging.debug(f"Processing repository {repo}")
 | 
						|
            if repo["environment"] != args.target_environment:
 | 
						|
                continue
 | 
						|
 | 
						|
            if repo["type"] == "gitea":
 | 
						|
                teams = []
 | 
						|
                branch_protections_main = copy.deepcopy(gitea_bp)
 | 
						|
                if "teams" in repo:
 | 
						|
                    teams_def = repo["teams"]
 | 
						|
                if "teams" in service:
 | 
						|
                    teams_def = service["teams"]
 | 
						|
                if teams_def:
 | 
						|
                    for team in teams_def:
 | 
						|
                        branch_protections_main[
 | 
						|
                            "approvals_whitelist_teams"
 | 
						|
                        ].append(team["name"])
 | 
						|
                        teams.append(team["name"])
 | 
						|
                data = copy.deepcopy(gitea_repo_template)
 | 
						|
                data["description"] = (
 | 
						|
                    f"Open Telekom Cloud {service['service_title']} "
 | 
						|
                    f"Service docs"
 | 
						|
                )
 | 
						|
                data["branch_protections"].append(branch_protections_main)
 | 
						|
                data["teams"] = teams
 | 
						|
                repo_name = repo["repo"].split("/")[1]
 | 
						|
                config = {repo_name: data}
 | 
						|
 | 
						|
            elif repo["type"] == "github":
 | 
						|
                teams = []
 | 
						|
                branch_protections_main = copy.deepcopy(github_bp)
 | 
						|
                if "teams" in repo:
 | 
						|
                    teams_def = repo["teams"]
 | 
						|
                if "teams" in service:
 | 
						|
                    teams_def = service["teams"]
 | 
						|
                if teams_def:
 | 
						|
                    for team in teams_def:
 | 
						|
                        teams.append(
 | 
						|
                            {
 | 
						|
                                "slug": team["name"],
 | 
						|
                                "permission": "push"
 | 
						|
                                if team["permission"] == "write"
 | 
						|
                                else "pull",
 | 
						|
                            }
 | 
						|
                        )
 | 
						|
                data = copy.deepcopy(github_repo_template)
 | 
						|
                data["description"] = (
 | 
						|
                    f"Open Telekom Cloud {service['service_title']} " f"docs"
 | 
						|
                )
 | 
						|
                data["branch_protections"].append(
 | 
						|
                    {"branch": "main", "template": "zuul"}
 | 
						|
                )
 | 
						|
                data["teams"] = teams
 | 
						|
                repo_name = repo["repo"].split("/")[1]
 | 
						|
                config = {repo_name: data}
 | 
						|
 | 
						|
            else:
 | 
						|
                logging.error(
 | 
						|
                    "Repository type %s is not supported", repo["type"]
 | 
						|
                )
 | 
						|
                exit(1)
 | 
						|
 | 
						|
        if data:
 | 
						|
            with open(
 | 
						|
                f"{args.work_dir}/{repo_name}.yml",
 | 
						|
                "w",
 | 
						|
                encoding="utf-8",
 | 
						|
                newline="",
 | 
						|
            ) as out:
 | 
						|
                logging.debug(
 | 
						|
                    "Generating %s config from template...",
 | 
						|
                    service["service_type"],
 | 
						|
                )
 | 
						|
                yaml.dump(config, out)
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    parser = argparse.ArgumentParser(
 | 
						|
        description="Update conf.py file in repositories."
 | 
						|
    )
 | 
						|
    parser.add_argument(
 | 
						|
        "--target-environment",
 | 
						|
        required=True,
 | 
						|
        help="Environment to be used as a source",
 | 
						|
    )
 | 
						|
    parser.add_argument(
 | 
						|
        "--work-dir",
 | 
						|
        required=True,
 | 
						|
        help="Working directory to use for repository checkout.",
 | 
						|
    )
 | 
						|
 | 
						|
    args = parser.parse_args()
 | 
						|
    logging.basicConfig(level=logging.DEBUG)
 | 
						|
 | 
						|
    process_services(args, data.all_services)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |