From d6e0d933d8c181b08599db3264446a7458fdca43 Mon Sep 17 00:00:00 2001 From: Histausse Date: Tue, 23 May 2023 12:57:07 +0200 Subject: [PATCH] push token to woodpecker --- hooks/post_gen_project.py | 72 +++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 21 deletions(-) diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index e48d01e..d5a995d 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -2,6 +2,7 @@ import subprocess import http.client import json import os +from base64 import b64encode REMOVE_PATHS = [ {% if cookiecutter.open_source_license == "Proprietary" %} "LICENSE", {% endif %} @@ -66,10 +67,46 @@ def get_new_gitea_token( print( f"\033[38;2;255;0;0mInvalid response from gitea while creating a new token: {status} ({response.reason})\033[0m" ) + print(response.read()) exit(1) data = json.load(response) return data["sha1"] +def push_woodpecker_secret( + connection: http.client.HTTPSConnection, + repo: str, + secret_name: str, + secret: str, + woodpecker_token: str, + images: list[str] | None = None +): + if images is None: images = [] + connection.request( + "POST", + f"/api/repos/{repo}/secrets", + json.dumps( + { + "name": secret_name, + "value": secret, + "image": images, + "event": ["push", "tag"], + } + ), + { + "Authorization": f"Bearer {woodpecker_token}", + "content-type": "application/json", + }, + ) + response = connection.getresponse() + status = response.status + if status != 200: + print( + f"\033[38;2;255;0;0mInvalid response from woodpecker when sending a new secret: {status} ({response.reason})\033[0m" + ) + print(response.read()) + exit(1) + response.read() + if {{cookiecutter.generate_gitea_project}}: try: @@ -100,15 +137,16 @@ if {{cookiecutter.generate_gitea_project}} and {{cookiecutter.configure_ci}}: ) connection_gitea = http.client.HTTPSConnection("git.pains-perdus.fr") GITEA_API_KEY = get_new_gitea_token(connection_gitea, "CI {{ cookiecutter.git_user }}/{{ cookiecutter.project_slug }}", "{{ cookiecutter.git_user }}", GITEA_API_KEY) - API_KEY = get_secret("Woodpecker Token") + WOODPECKER_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}"}, + headers={"Authorization": f"Bearer {WOODPECKER_API_KEY}"}, ) response = connection.getresponse() status = response.status @@ -123,7 +161,7 @@ if {{cookiecutter.generate_gitea_project}} and {{cookiecutter.configure_ci}}: "POST", f"/api/repos/{repo}", headers={ - "Authorization": f"Bearer {API_KEY}", + "Authorization": f"Bearer {WOODPECKER_API_KEY}", "referer": f"https://{WOODPECKER_SERVER}/repo/add", }, ) @@ -133,25 +171,17 @@ if {{cookiecutter.generate_gitea_project}} and {{cookiecutter.configure_ci}}: print( f"\033[38;2;255;0;0mInvalid response from woodpecker while linking repo: {status} ({response.reason})\033[0m" ) + print(response.read()) exit(1) + response.read() + push_woodpecker_secret( + connection, + repo, + "gitea_token", + GITEA_API_KEY, + WOODPECKER_API_KEY + ) if {{cookiecutter.generate_gitea_project}}: subprocess.call(["git", "remote", "add", "origin", "{{ cookiecutter.git_origin }}"]) - subpr def get_new_gitea_token(): - """""" - connection.request( - "POST", - f"/api/repos/{repo}/secrets", - json.dumps( - { - "name": "test_token", - "value": "loren ispum", - "image": ["test"], - "event": ["push", "tag"], - } - ), - { - "Authorization": f"Bearer {API_KEY}", - "content-type": "application/json", - }, - )ocess.call(["git", "push", "-u", "origin", "main"]) + subprocess.call(["git", "push", "-u", "origin", "main"])