DEVX-121: fix: GiteaClient.set_repo_variable uses PUT instead of PATCH
Post-merge / detect-type (push) Successful in 9s
Post-merge / validate-commit-msg (push) Successful in 9s
Post-merge / vikunja (push) Successful in 22s
Post-merge / configure-repo (push) Successful in 17s
Post-merge / sync-wiki (push) Successful in 31s
Post-merge / release (push) Successful in 38s
Post-merge / publish (push) Successful in 23s
Post-merge / badges (push) Successful in 39s

This commit was merged in pull request #184.
This commit is contained in:
2026-07-07 15:51:45 +00:00
parent ad7b52c368
commit 6a463a93d2
2 changed files with 8 additions and 7 deletions
+5 -4
View File
@@ -391,15 +391,16 @@ class GiteaClient:
def set_repo_variable(self, name: str, value: str) -> None: def set_repo_variable(self, name: str, value: str) -> None:
"""Create or update a Gitea Actions repository variable (idempotent). """Create or update a Gitea Actions repository variable (idempotent).
Tries PATCH first; if the variable doesn't exist (404), creates it Tries PUT first (update); if the variable doesn't exist (404),
via POST. creates it via POST. Gitea 1.26.x does not support PATCH for
action variables.
""" """
try: try:
self._request("PATCH", f"/actions/variables/{name}", json={"value": value}) self._request("PUT", f"/actions/variables/{name}", json={"value": value})
except APIError as e: except APIError as e:
if e.status != 404: if e.status != 404:
raise raise
self._request("POST", "/actions/variables", json={"name": name, "value": value}) self._request("POST", f"/actions/variables/{name}", json={"value": value})
class VikunjaClient: class VikunjaClient:
+3 -3
View File
@@ -944,7 +944,7 @@ class TestGiteaClientActions:
client._session.request = MagicMock(return_value=_mock_response({})) client._session.request = MagicMock(return_value=_mock_response({}))
client.set_repo_variable("PRODUCTION_DEPLOY_TAG", "v0.28.2") client.set_repo_variable("PRODUCTION_DEPLOY_TAG", "v0.28.2")
client._session.request.assert_called_once_with( client._session.request.assert_called_once_with(
"PATCH", "PUT",
"https://git.example.com/repos/owner/repo/actions/variables/PRODUCTION_DEPLOY_TAG", "https://git.example.com/repos/owner/repo/actions/variables/PRODUCTION_DEPLOY_TAG",
timeout=DEFAULT_TIMEOUT, timeout=DEFAULT_TIMEOUT,
json={"value": "v0.28.2"}, json={"value": "v0.28.2"},
@@ -960,8 +960,8 @@ class TestGiteaClientActions:
assert client._session.request.call_count == 2 assert client._session.request.call_count == 2
second_call = client._session.request.call_args_list[1] second_call = client._session.request.call_args_list[1]
assert second_call.args[0] == "POST" assert second_call.args[0] == "POST"
assert second_call.args[1] == "https://git.example.com/repos/owner/repo/actions/variables" assert second_call.args[1] == "https://git.example.com/repos/owner/repo/actions/variables/NEW_VAR"
assert second_call.kwargs["json"] == {"name": "NEW_VAR", "value": "v0.29.0"} assert second_call.kwargs["json"] == {"value": "v0.29.0"}
def test_set_repo_variable_reraises_non_404(self) -> None: def test_set_repo_variable_reraises_non_404(self) -> None:
client = GiteaClient("https://git.example.com", "tok", "owner", "repo") client = GiteaClient("https://git.example.com", "tok", "owner", "repo")