66from typing import Tuple
77from typing import Union
88
9+ from github .PublicKey import PublicKey
910from github .Repository import Repository
1011
1112from repo_manager .schemas .secret import Secret
1213
1314
15+ def get_public_key (repo : Repository , is_dependabot : bool = False ) -> PublicKey :
16+ """
17+ :calls: `GET /repos/{owner}/{repo}/actions/secrets/public-key <https://docs.github.com/en/rest/reference/actions#get-a-repository-public-key>`_
18+ :rtype: :class:`github.PublicKey.PublicKey`
19+ """
20+ secret_type = "actions" if not is_dependabot else "dependabot"
21+ headers , data = repo ._requester .requestJsonAndCheck ("GET" , f"{ repo .url } /{ secret_type } /secrets/public-key" )
22+ return PublicKey (repo ._requester , headers , data , completed = True )
23+
24+
1425def create_secret (repo : Repository , secret_name : str , unencrypted_value : str , is_dependabot : bool = False ) -> bool :
1526 """
1627 :calls: `PUT /repos/{owner}/{repo}/actions/secrets/{secret_name} <https://docs.github.com/en/rest/reference/actions#get-a-repository-secret>`_
@@ -20,16 +31,18 @@ def create_secret(repo: Repository, secret_name: str, unencrypted_value: str, is
2031 :param unencrypted_value: string
2132 :rtype: bool
2233 """
23- public_key = repo . get_public_key ()
34+ public_key = get_public_key (repo , is_dependabot )
2435 payload = public_key .encrypt (unencrypted_value )
2536 put_parameters = {
2637 "key_id" : public_key .key_id ,
2738 "encrypted_value" : payload ,
2839 }
2940 secret_type = "actions" if not is_dependabot else "dependabot"
3041 status , headers , data = repo ._requester .requestJson (
31- "PUT" , f"{ repo .url } /actions/ { secret_type } /{ secret_name } " , input = put_parameters
42+ "PUT" , f"{ repo .url } /{ secret_type } /secrets /{ secret_name } " , input = put_parameters
3243 )
44+ if status != 201 :
45+ raise Exception (f"Unable to create { secret_type } secret { status } " )
3346 return status == 201
3447
3548
0 commit comments