chore: simplify workflows and unify tool logging and mail presentation
Release / Validate Templates (push) Successful in 2m55s
Release / Package & Release (push) Skipped
Release / Remind to Update Release Documentation (push) Skipped

This commit is contained in:
KenanZhu committed 2026-10-10 14:54:40 +08:00
1 parent f4d96de79e
commit c93f2bf8b2
40 files changed
+523 -1515

No files matched your search

+33 -51
View File
@@ -1,10 +1,8 @@
"""Offline Gitea API and disposable-Git workflow regression tests."""
"""Offline Gitea API and issue-reminder regression tests."""
import importlib.util
import json
import os
from pathlib import Path
import subprocess
import tempfile
import unittest
from unittest.mock import Mock
@@ -101,59 +99,43 @@ class ReleaseTests(unittest.TestCase):
api.request.assert_not_called()
class PullRequestTests(unittest.TestCase):
def setUp(self):
self.temp = tempfile.TemporaryDirectory()
self.addCleanup(self.temp.cleanup)
self.root = Path(self.temp.name)
self.previous = Path.cwd()
os.chdir(self.root)
self.addCleanup(os.chdir, self.previous)
subprocess.run(["git", "init", "--bare", "remote.git"], check=True, capture_output=True)
subprocess.run(["git", "init", "-b", "main", "work"], check=True, capture_output=True)
os.chdir(self.root / "work")
ACTIONS.git("config", "user.name", "test")
ACTIONS.git("config", "user.email", "test@example.invalid")
ACTIONS.git("remote", "add", "origin", str(self.root / "remote.git"))
Path("README.md").write_text("Baseline\n")
Path("source.txt").write_text("Source\n")
ACTIONS.git("add", ".")
ACTIONS.git("commit", "-m", "baseline")
ACTIONS.git("push", "origin", "main")
Path("README.md").write_text("Pending 28.1.0\n")
def test_create_then_reuse_branch_and_paginated_pr(self):
class IssueTests(unittest.TestCase):
def test_creates_release_documentation_issue(self):
api = Mock()
api.request.side_effect = [[], {"html_url": "https://git.example/pulls/1"}]
ACTIONS.create_pull_request(api, "28.1.0")
self.assertEqual("track/gitea-28.1.0", ACTIONS.git("branch", "--show-current"))
payload = api.request.call_args.args[2]
self.assertEqual("main", payload["base"])
self.assertEqual("track/gitea-28.1.0", payload["head"])
self.assertIn("[PENDING]", payload["body"])
original_head = ACTIONS.git("rev-parse", "HEAD")
ACTIONS.git("switch", "main")
Path("README.md").write_text("Pending 28.1.0\n")
api.reset_mock()
api.request.side_effect = [[{"head": {"ref": "unrelated"}}], [{
"head": {"ref": "track/gitea-28.1.0", "repo": {"full_name": "owner/repo"}},
"base": {"ref": "main", "repo": {"full_name": "owner/repo"}},
"html_url": "https://git.example/pulls/1",
}]]
ACTIONS.create_pull_request(api, "28.1.0")
api.request.side_effect = [[], {"html_url": "https://git.example/issues/1"}]
ACTIONS.create_issue(api, "v28.1.0")
calls = api.request.call_args_list
self.assertEqual(["GET", "POST"], [c.args[0] for c in calls])
self.assertEqual("/issues", calls[-1].args[1])
payload = calls[-1].args[2]
self.assertIn("<!-- gitea-mail-templates:template-release:v28.1.0 -->", payload["body"])
self.assertIn("Documentation is maintained manually", payload["body"])
def test_reuses_closed_issue_on_later_page_and_ignores_pull_requests(self):
api = Mock()
marker = "<!-- gitea-mail-templates:template-release:v28.1.0 -->"
api.request.side_effect = [[{"body": marker, "pull_request": {"url": "pr"}}],
[{"body": marker, "state": "closed", "title": "Renamed", "html_url": "https://git.example/issues/1"}]]
ACTIONS.create_issue(api, "v28.1.0")
self.assertEqual(["GET", "GET"], [c.args[0] for c in api.request.call_args_list])
self.assertEqual(original_head, ACTIONS.git("rev-parse", "FETCH_HEAD"))
Path("README.md").write_text("Different pending content\n")
with self.assertRaisesRegex(ValueError, "Existing.*differs"):
ACTIONS.create_pull_request(api, "28.1.0")
self.assertIn("state=all", api.request.call_args_list[0].args[1])
self.assertIn("page=2", api.request.call_args_list[1].args[1])
def test_non_documentation_change_is_not_committed(self):
Path("source.txt").write_text("Changed source\n")
def test_other_release_versions_do_not_suppress_reminder(self):
api = Mock()
with self.assertRaisesRegex(ValueError, "only Markdown"):
ACTIONS.create_pull_request(api, "28.1.0")
api.request.side_effect = [[{"body": "<!-- gitea-mail-templates:template-release:v28.0.0 -->"}], [],
{"html_url": "https://git.example/issues/2"}]
ACTIONS.create_issue(api, "v28.1.0")
payload = api.request.call_args.args[2]
self.assertIn("template-release:v28.1.0", payload["body"])
self.assertIn("READMEs", payload["body"])
def test_invalid_versions_fail_before_api_call(self):
api = Mock()
for version in ("28.1.0", "v28.1.0-rc1", "../../x"):
with self.assertRaises(ValueError):
ACTIONS.create_issue(api, version)
api.request.assert_not_called()
self.assertEqual("baseline", ACTIONS.git("log", "-1", "--format=%s"))
if __name__ == "__main__":