From b0f9519ddfdf5493c75532336fb963112efd2759 Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Fri, 5 Jan 2024 10:25:58 -0300 Subject: [PATCH 01/12] name and message are not required when generate_release_notes it true --- github/Repository.py | 14 ++++++++------ ...ry.testCreateGitReleaseGenerateReleaseNotes.txt | 10 ++++++++++ tests/Repository.py | 9 +++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 tests/ReplayData/Repository.testCreateGitReleaseGenerateReleaseNotes.txt diff --git a/github/Repository.py b/github/Repository.py index b1195c849a..d58b3a5547 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1245,8 +1245,8 @@ def create_git_tag_and_release( def create_git_release( self, tag: str, - name: str, - message: str, + name: str = NotSet, + message: str = NotSet, draft: bool = False, prerelease: bool = False, generate_release_notes: bool = False, @@ -1264,8 +1264,8 @@ def create_git_release( :rtype: :class:`github.GitRelease.GitRelease` """ assert isinstance(tag, str), tag - assert isinstance(name, str), name - assert isinstance(message, str), message + assert is_optional(name, str), name + assert is_optional(message, str), message assert isinstance(draft, bool), draft assert isinstance(prerelease, bool), prerelease assert isinstance(generate_release_notes, bool), generate_release_notes @@ -1275,12 +1275,14 @@ def create_git_release( ), target_commitish post_parameters = { "tag_name": tag, - "name": name, - "body": message, "draft": draft, "prerelease": prerelease, "generate_release_notes": generate_release_notes, } + if is_defined(name): + post_parameters["name"] = name + if is_defined(message): + post_parameters["body"] = message if isinstance(target_commitish, str): post_parameters["target_commitish"] = target_commitish elif isinstance(target_commitish, github.Branch.Branch): diff --git a/tests/ReplayData/Repository.testCreateGitReleaseGenerateReleaseNotes.txt b/tests/ReplayData/Repository.testCreateGitReleaseGenerateReleaseNotes.txt new file mode 100644 index 0000000000..4b82aa1f16 --- /dev/null +++ b/tests/ReplayData/Repository.testCreateGitReleaseGenerateReleaseNotes.txt @@ -0,0 +1,10 @@ +https +POST +api.github.com +None +/repos/jacquev6/PyGithub/releases +{'Content-Type': 'application/json', 'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} +{"prerelease": false, "generate_release_notes": true, "tag_name": "vX.Y.Z-by-PyGithub-acctest-release-notes", "draft": false} +201 +[('content-length', '1656'), ('x-runtime-rack', '0.601694'), ('vary', 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding'), ('x-xss-protection', '1; mode=block'), ('x-content-type-options', 'nosniff'), ('etag', '"64c4aea05900ae1072ee705caf9b529c"'), ('location', 'https://api.github.com/repos/jacquev6/PyGithub/releases/7636454'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('status', '201 Created'), ('x-ratelimit-remaining', '4951'), ('x-github-media-type', 'github.v3; format=json'), ('access-control-expose-headers', 'ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval'), ('x-github-request-id', '92E2:1D39A:50FE29C:5DF3D65:59AE9019'), ('date', 'Tue, 05 Sep 2017 11:52:58 GMT'), ('access-control-allow-origin', '*'), ('content-security-policy', "default-src 'none'"), ('strict-transport-security', 'max-age=31536000; includeSubdomains; preload'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('x-frame-options', 'deny'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1504614271')] +{"url":"https://api.github.com/repos/jacquev6/PyGithub/releases/7636454","assets_url":"https://api.github.com/repos/jacquev6/PyGithub/releases/7636454/assets","upload_url":"https://uploads.github.com/repos/jacquev6/PyGithub/releases/7636454/assets{?name,label}","html_url":"https://github.com/jacquev6/PyGithub/releases/tag/vX.Y.Z-by-PyGithub-acctest-release-notes","id":7636454,"tag_name":"vX.Y.Z-by-PyGithub-acctest-release-notes","target_commitish":"master","name":"vX.Y.Z: PyGithub acctest-release-notes","draft":false,"author":{"login":"jacquev6","id":3760893,"avatar_url":"https://avatars2.githubusercontent.com/u/3760893?v=4","gravatar_id":"","url":"https://api.github.com/users/jacquev6","html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","site_admin":false},"prerelease":false,"created_at":"2016-10-29T02:39:27Z","published_at":"2017-09-05T11:52:58Z","assets":[],"tarball_url":"https://api.github.com/repos/jacquev6/PyGithub/tarball/vX.Y.Z-by-PyGithub-acctest-release-notes","zipball_url":"https://api.github.com/repos/jacquev6/PyGithub/zipball/vX.Y.Z-by-PyGithub-acctest-release-notes","body":"This release is created by PyGithub"} diff --git a/tests/Repository.py b/tests/Repository.py index a4a62e7a4e..42f73bf666 100644 --- a/tests/Repository.py +++ b/tests/Repository.py @@ -405,6 +405,15 @@ def testCreateGitRelease(self): self.assertEqual(release.draft, False) self.assertEqual(release.prerelease, False) + def testCreateGitReleaseGenerateReleaseNotes(self): + release = self.repo.create_git_release( + "vX.Y.Z-by-PyGithub-acctest-release-notes", + generate_release_notes=True + ) + self.assertEqual(release.tag_name, "vX.Y.Z-by-PyGithub-acctest-release-notes") + self.assertEqual(release.draft, False) + self.assertEqual(release.prerelease, False) + def testCreateGitReleaseWithAllArguments(self): release = self.repo.create_git_release( "vX.Y.Z-by-PyGithub-acctest2", From 80ca7bcb052bd2c6c193f637ff576017525d4b2b Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Fri, 5 Jan 2024 10:31:26 -0300 Subject: [PATCH 02/12] typing --- github/Repository.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/github/Repository.py b/github/Repository.py index d58b3a5547..7298beb998 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1245,8 +1245,8 @@ def create_git_tag_and_release( def create_git_release( self, tag: str, - name: str = NotSet, - message: str = NotSet, + name: Opt[str] = NotSet, + message: Opt[str] = NotSet, draft: bool = False, prerelease: bool = False, generate_release_notes: bool = False, From 22930e6ce97d0c8c4aa9797c57ce3c1903222f05 Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Fri, 5 Jan 2024 10:36:12 -0300 Subject: [PATCH 03/12] black --- tests/Repository.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/Repository.py b/tests/Repository.py index 42f73bf666..b32c8faf78 100644 --- a/tests/Repository.py +++ b/tests/Repository.py @@ -406,10 +406,7 @@ def testCreateGitRelease(self): self.assertEqual(release.prerelease, False) def testCreateGitReleaseGenerateReleaseNotes(self): - release = self.repo.create_git_release( - "vX.Y.Z-by-PyGithub-acctest-release-notes", - generate_release_notes=True - ) + release = self.repo.create_git_release("vX.Y.Z-by-PyGithub-acctest-release-notes", generate_release_notes=True) self.assertEqual(release.tag_name, "vX.Y.Z-by-PyGithub-acctest-release-notes") self.assertEqual(release.draft, False) self.assertEqual(release.prerelease, False) From fa794b112b779f444c7703d547bc34a626ffbd3e Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Fri, 5 Jan 2024 10:46:24 -0300 Subject: [PATCH 04/12] change in create_git_tag_and_release also --- github/Repository.py | 4 ++-- tests/GitRelease.py | 7 +------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/github/Repository.py b/github/Repository.py index 7298beb998..ec98fc2c5b 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1207,10 +1207,10 @@ def create_git_tag_and_release( self, tag: str, tag_message: str, - release_name: str, - release_message: str, object: str, type: str, + release_name: Opt[str] = NotSet, + release_message: Opt[str] = NotSet, tagger: Opt[InputGitAuthor] = NotSet, draft: bool = False, prerelease: bool = False, diff --git a/tests/GitRelease.py b/tests/GitRelease.py index 37dfd71c44..34a547c0bf 100644 --- a/tests/GitRelease.py +++ b/tests/GitRelease.py @@ -107,12 +107,7 @@ def setUpNewRelease(self): repo = self.repo commit_sha = repo.get_commits()[0].sha # Just need any commit self.new_release = repo.create_git_tag_and_release( - self.new_tag, - "tag message", - "release title", - "release message", - commit_sha, - "commit", + self.new_tag, "tag message", commit_sha, "commit", "release title", "release message" ) self.new_release_id = self.new_release.id From ec8d2c2a393e8e55e18eb9fe4a2682d08fe05cc7 Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Tue, 13 Feb 2024 11:08:19 -0300 Subject: [PATCH 05/12] docstring and only optional if generate_release_notes is True --- github/Repository.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/github/Repository.py b/github/Repository.py index ec98fc2c5b..9aa3c6323e 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1221,10 +1221,10 @@ def create_git_tag_and_release( :meth:`Repository.create_git_release`. :param tag: string :param tag_message: string - :param release_name: string - :param release_message: string :param object: string :param type: string + :param release_name: string + :param release_message: string :param tagger: :class:github.InputGitAuthor.InputGitAuthor :param draft: bool :param prerelease: bool @@ -1264,8 +1264,8 @@ def create_git_release( :rtype: :class:`github.GitRelease.GitRelease` """ assert isinstance(tag, str), tag - assert is_optional(name, str), name - assert is_optional(message, str), message + assert generate_release_notes and is_optional(name, str) or isinstance(name, str), name + assert generate_release_notes and is_optional(message, str) or isinstance(message, str), message assert isinstance(draft, bool), draft assert isinstance(prerelease, bool), prerelease assert isinstance(generate_release_notes, bool), generate_release_notes From 6f383ea29329b17f740e2018f62896563477fa06 Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Wed, 21 Feb 2024 18:10:50 -0300 Subject: [PATCH 06/12] Update github/Repository.py Co-authored-by: Enrico Minack --- github/Repository.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/github/Repository.py b/github/Repository.py index d8cb3ceaf9..742abb150e 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1273,11 +1273,11 @@ def create_git_release( :rtype: :class:`github.GitRelease.GitRelease` """ assert isinstance(tag, str), tag - assert generate_release_notes and is_optional(name, str) or isinstance(name, str), name - assert generate_release_notes and is_optional(message, str) or isinstance(message, str), message + assert isinstance(generate_release_notes, bool), generate_release_notes + assert isinstance(name, str) or generate_release_notes and is_optional(name, str), name + assert isinstance(message, str) or generate_release_notes and is_optional(message, str), message assert isinstance(draft, bool), draft assert isinstance(prerelease, bool), prerelease - assert isinstance(generate_release_notes, bool), generate_release_notes assert is_optional( target_commitish, (str, github.Branch.Branch, github.Commit.Commit, github.GitCommit.GitCommit), From 04fb0cf5a571dc6902e821a7992608990daf7e5c Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Mon, 26 Feb 2024 20:01:37 -0300 Subject: [PATCH 07/12] revert some changes --- github/Repository.py | 9 +++++---- tests/GitRelease.py | 7 ++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/github/Repository.py b/github/Repository.py index 742abb150e..a89ea3f5f1 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1212,14 +1212,15 @@ def create_git_ref(self, ref: str, sha: str) -> GitRef: headers, data = self._requester.requestJsonAndCheck("POST", f"{self.url}/git/refs", input=post_parameters) return github.GitRef.GitRef(self._requester, headers, data, completed=True) + # TODO: v3: reorder arguments and add default value `NotSet` where `Opt[str]` def create_git_tag_and_release( self, tag: str, tag_message: str, + release_name: Opt[str], + release_message: Opt[str], object: str, type: str, - release_name: Opt[str] = NotSet, - release_message: Opt[str] = NotSet, tagger: Opt[InputGitAuthor] = NotSet, draft: bool = False, prerelease: bool = False, @@ -1274,8 +1275,8 @@ def create_git_release( """ assert isinstance(tag, str), tag assert isinstance(generate_release_notes, bool), generate_release_notes - assert isinstance(name, str) or generate_release_notes and is_optional(name, str), name - assert isinstance(message, str) or generate_release_notes and is_optional(message, str), message + assert isinstance(name, str) or generate_release_notes and (name is None or is_optional(name, str)), name + assert isinstance(message, str) or generate_release_notes and (message is None or is_optional(message, str)), message assert isinstance(draft, bool), draft assert isinstance(prerelease, bool), prerelease assert is_optional( diff --git a/tests/GitRelease.py b/tests/GitRelease.py index 34a547c0bf..37dfd71c44 100644 --- a/tests/GitRelease.py +++ b/tests/GitRelease.py @@ -107,7 +107,12 @@ def setUpNewRelease(self): repo = self.repo commit_sha = repo.get_commits()[0].sha # Just need any commit self.new_release = repo.create_git_tag_and_release( - self.new_tag, "tag message", commit_sha, "commit", "release title", "release message" + self.new_tag, + "tag message", + "release title", + "release message", + commit_sha, + "commit", ) self.new_release_id = self.new_release.id From c5928a18a00c148d0ad91d5928d2c6582ef73e94 Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Mon, 26 Feb 2024 20:04:11 -0300 Subject: [PATCH 08/12] revert some changes 2 --- github/Repository.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/github/Repository.py b/github/Repository.py index a89ea3f5f1..4bb8161fcc 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1231,10 +1231,10 @@ def create_git_tag_and_release( :meth:`Repository.create_git_release`. :param tag: string :param tag_message: string - :param object: string - :param type: string :param release_name: string :param release_message: string + :param object: string + :param type: string :param tagger: :class:github.InputGitAuthor.InputGitAuthor :param draft: bool :param prerelease: bool From 31d81037ca78ff1b19f6ed9d0df26642a5e85c4d Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Mon, 26 Feb 2024 20:42:45 -0300 Subject: [PATCH 09/12] black --- github/Repository.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/github/Repository.py b/github/Repository.py index 4bb8161fcc..ffa673cd5f 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1276,7 +1276,9 @@ def create_git_release( assert isinstance(tag, str), tag assert isinstance(generate_release_notes, bool), generate_release_notes assert isinstance(name, str) or generate_release_notes and (name is None or is_optional(name, str)), name - assert isinstance(message, str) or generate_release_notes and (message is None or is_optional(message, str)), message + assert ( + isinstance(message, str) or generate_release_notes and (message is None or is_optional(message, str)) + ), message assert isinstance(draft, bool), draft assert isinstance(prerelease, bool), prerelease assert is_optional( From 6688954a10035809f08e8f7590e590cae9d31754 Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Mon, 26 Feb 2024 20:44:47 -0300 Subject: [PATCH 10/12] black 2 --- github/Repository.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/Repository.py b/github/Repository.py index ffa673cd5f..2a950168f2 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1277,7 +1277,7 @@ def create_git_release( assert isinstance(generate_release_notes, bool), generate_release_notes assert isinstance(name, str) or generate_release_notes and (name is None or is_optional(name, str)), name assert ( - isinstance(message, str) or generate_release_notes and (message is None or is_optional(message, str)) + isinstance(message, str) or generate_release_notes and (message is None or is_optional(message, str)) ), message assert isinstance(draft, bool), draft assert isinstance(prerelease, bool), prerelease From 60730dda78363268e71b83a1c3c1ee99213acb5e Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Mon, 4 Mar 2024 15:47:28 -0300 Subject: [PATCH 11/12] Update github/Repository.py Co-authored-by: Enrico Minack --- github/Repository.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/github/Repository.py b/github/Repository.py index 2a950168f2..5382ab0fbc 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1275,9 +1275,9 @@ def create_git_release( """ assert isinstance(tag, str), tag assert isinstance(generate_release_notes, bool), generate_release_notes - assert isinstance(name, str) or generate_release_notes and (name is None or is_optional(name, str)), name + assert isinstance(name, str) or generate_release_notes and is_optional(name, str), name assert ( - isinstance(message, str) or generate_release_notes and (message is None or is_optional(message, str)) + isinstance(message, str) or generate_release_notes and is_optional(message, str) ), message assert isinstance(draft, bool), draft assert isinstance(prerelease, bool), prerelease From 98adf51f71acc94836fff6afb115f5ace1dadf96 Mon Sep 17 00:00:00 2001 From: Heitor Polidoro Date: Mon, 4 Mar 2024 16:05:40 -0300 Subject: [PATCH 12/12] black --- github/Repository.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/github/Repository.py b/github/Repository.py index 5382ab0fbc..362b804514 100644 --- a/github/Repository.py +++ b/github/Repository.py @@ -1276,9 +1276,7 @@ def create_git_release( assert isinstance(tag, str), tag assert isinstance(generate_release_notes, bool), generate_release_notes assert isinstance(name, str) or generate_release_notes and is_optional(name, str), name - assert ( - isinstance(message, str) or generate_release_notes and is_optional(message, str) - ), message + assert isinstance(message, str) or generate_release_notes and is_optional(message, str), message assert isinstance(draft, bool), draft assert isinstance(prerelease, bool), prerelease assert is_optional(