Skip to content

Commit 301fb95

Browse files
authored
(fix) "Update" secrets API call switch to PUT to fix functionality (#11)
* Change PATCH request to PUT for updating secret * Update ci.yml * Update requirements.txt * Update main.py * Update main.py
1 parent 1045970 commit 301fb95

File tree

3 files changed

+20
-32
lines changed

3 files changed

+20
-32
lines changed

.github/workflows/ci.yml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,15 @@ on: [push]
44

55
jobs:
66
build:
7-
87
runs-on: ubuntu-latest
9-
strategy:
10-
matrix:
11-
python-version: [3.7, 3.8]
128

139
steps:
14-
- uses: actions/checkout@v2
10+
- uses: actions/checkout@v5
1511

16-
- name: Set up Python ${{ matrix.python-version }}
17-
uses: actions/setup-python@v2
12+
- name: Set up Python
13+
uses: actions/setup-python@v5
1814
with:
19-
python-version: ${{ matrix.python-version }}
15+
python-version: 3.13
2016

2117
- name: Run pylint
2218
uses: cclauss/GitHub-Action-for-pylint@0.7.0

main.py

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -208,29 +208,21 @@ def add_dependabot_secret(token, target_repository, secret_name, secret_value, r
208208
def update_dependabot_secret(token, target_repository, secret_name, secret_value, repoOwner):
209209
repo_name = target_repository.name
210210
repo_owner = repoOwner
211-
key_id, key = get_repo_public_key(token, repo_owner, repo_name)
212-
query_url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/dependabot/secrets"
213-
headers = {'Authorization': f'token {token}'}
214-
r = requests.get(query_url, headers=headers)
215-
response = r.json()
216-
try:
217-
secret_names = flatten_secrets_dict(response["secrets"])
218-
except:
219-
secret_names = []
220-
if secret_name not in secret_names:
221-
# patch call update repo secrets to dependabot secrets
222-
url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/dependabot/secrets/{secret_name}"
211+
headers = {
212+
'Authorization': f'token {token}',
213+
'Accept': 'application/vnd.github+json'
214+
}
223215

224-
data = {
225-
"encrypted_value": encrypt(key, secret_value),
226-
"key_id": key_id
227-
}
228-
response = requests.patch(url, headers=headers, data=json.dumps(data))
229-
print(f"Response Code: {response.status_code}")
230-
if response.status_code == 204:
231-
print(f"dependabot Secret \"{secret_name}\" updated in {repo_name}")
232-
else:
233-
print(f"dependabot Secret \"{secret_name}\" could NOT be updated in {repo_name}")
216+
key_id, key = get_repo_public_key(token, repo_owner, repo_name)
217+
put_url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/dependabot/secrets/{secret_name}"
218+
encrypted_value = encrypt(key, secret_value)
219+
body = {"encrypted_value": encrypted_value, "key_id": key_id}
220+
put_resp = requests.put(put_url, headers=headers, json=body)
221+
print(f"Create (update) Response Code: {put_resp.status_code}")
222+
if put_resp.status_code in (201, 204):
223+
print(f"dependabot Secret \"{secret_name}\" updated in {repo_name}")
224+
else:
225+
print(f"dependabot Secret \"{secret_name}\" could NOT be updated in {repo_name}. Response: {put_resp.text}")
234226

235227
def delete_dependabot_secret(token, target_repository, secret_name, repoOwner):
236228
repo_name = target_repository.name
@@ -307,4 +299,4 @@ def delete_dependabot_secret(token, target_repository, secret_name, repoOwner):
307299
repo.delete_secret(inp.secret_names[i])
308300
print(f"Secret \"{inp.secret_names[i]}\" removed from {repo.name}")
309301
except UnknownObjectException:
310-
print(f"The provided token does not have permission to manage {repo.name}, it is being skipped")
302+
print(f"The provided token does not have permission to manage {repo.name}, it is being skipped")

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
PyGithub>=1.55
1+
PyGithub>=2.7.0

0 commit comments

Comments
 (0)