101 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import subprocess
 | |
| 
 | |
| subprocess.call(["git", "init"])
 | |
| subprocess.call(["git", "checkout", "-b", "main"])
 | |
| subprocess.call(["git", "add", "*"])
 | |
| subprocess.call(["git", "commit", "-m", "Initial commit"])
 | |
| subprocess.call(["git", "config", "user.name", "{{ cookiecutter.git_user }}"])
 | |
| subprocess.call(["git", "config", "user.email", "{{ cookiecutter.email }}"])
 | |
| 
 | |
| # subprocess.call(["python", "-m", "venv", "venv"])
 | |
| 
 | |
| 
 | |
| def get_secret(secret_name: str):
 | |
|     try:
 | |
|         import secretstorage
 | |
| 
 | |
|         connection = secretstorage.dbus_init()
 | |
|         collection = secretstorage.get_default_collection(connection)
 | |
|         collection.unlock()
 | |
|         secret = collection.search_items({"Title": secret_name}).__next__()
 | |
|         secret.unlock()
 | |
|         return secret.get_secret().decode("utf-8")
 | |
|     except (ModuleNotFoundError, StopIteration):
 | |
|         import getpass
 | |
| 
 | |
|         return getpass.getpass(
 | |
|             f"Secret service or secret {'Title': 'secret_name'} not available,"
 | |
|             "please enter you gitea api token:"
 | |
|         )
 | |
| 
 | |
| 
 | |
| if {{cookiecutter.generate_gitea_project}}:
 | |
|     try:
 | |
|         import giteapy
 | |
|     except ModuleNotFoundError:
 | |
|         print("module `giteapy` is not availabled, repository not created")
 | |
|         exit()
 | |
|     API_KEY = get_secret("Gitea Token")
 | |
|     configuration = giteapy.Configuration()
 | |
|     configuration.api_key["access_token"] = API_KEY
 | |
|     client = giteapy.ApiClient(configuration)
 | |
|     client.configuration.host = "{{ cookiecutter.gitea_url }}/api/v1"
 | |
|     api_instance = giteapy.UserApi(client)
 | |
|     repo = giteapy.CreateRepoOption(
 | |
|         name="{{ cookiecutter.project_slug }}", private=True
 | |
|     )
 | |
|     api_instance.create_current_user_repo(body=repo)
 | |
| 
 | |
| 
 | |
| if {{cookiecutter.generate_gitea_project}} and {{cookiecutter.configure_ci}}:
 | |
|     import http.client
 | |
| 
 | |
|     # import json
 | |
| 
 | |
|     api_instance = giteapy.RepositoryApi(client)
 | |
|     options = giteapy.AddCollaboratorOption("read")
 | |
|     api_instance.repo_add_collaborator(
 | |
|         "{{ cookiecutter.git_user }}",
 | |
|         "{{ cookiecutter.project_slug }}",
 | |
|         "{{ cookiecutter.woodpecker_gitea_user }}",
 | |
|         body=options,
 | |
|     )
 | |
| 
 | |
|     API_KEY = get_secret("Woodpecker Token")
 | |
|     WOODPECKER_SERVER = "{{ cookiecutter.woodpecker_server }}".removeprefix("https://")
 | |
|     origin = "{{ cookiecutter.git_origin }}"
 | |
|     repo = "/".join(origin.removesuffix(".git").split(":")[-1].split("/")[-2:])
 | |
|     connection = http.client.HTTPSConnection(WOODPECKER_SERVER)
 | |
|     connection.request(
 | |
|         "GET",
 | |
|         "/api/user/repos?all=true&flush=true",
 | |
|         headers={"Authorization": f"Bearer {API_KEY}"},
 | |
|     )
 | |
|     response = connection.getresponse()
 | |
|     status = response.status
 | |
|     response.read()
 | |
|     if status != 200:
 | |
|         print(
 | |
|             f"\033[38;2;255;0;0mInvalid response from woodpecker while loading repos: {status} ({response.reason})\033[0m"
 | |
|         )
 | |
|         exit(1)
 | |
| 
 | |
|     connection.request(
 | |
|         "POST",
 | |
|         f"/api/repos/{repo}",
 | |
|         headers={
 | |
|             "Authorization": f"Bearer {API_KEY}",
 | |
|             "referer": f"https://{WOODPECKER_SERVER}/repo/add",
 | |
|         },
 | |
|     )
 | |
|     response = connection.getresponse()
 | |
|     status = response.status
 | |
|     if status != 200:
 | |
|         print(
 | |
|             f"\033[38;2;255;0;0mInvalid response from woodpecker while linking repo: {status} ({response.reason})\033[0m"
 | |
|         )
 | |
|         exit(1)
 | |
| 
 | |
| if {{cookiecutter.generate_gitea_project}}:
 | |
|     subprocess.call(["git", "remote", "add", "origin", "{{ cookiecutter.git_origin }}"])
 | |
|     subprocess.call(["git", "push", "-u", "origin", "main"])
 |