You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by to...@apache.org on 2022/09/02 13:37:19 UTC
[kafka] 06/06: KAFKA-10712; Update release scripts to Python3 (#11538)
This is an automated email from the ASF dual-hosted git repository.
tombentley pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/kafka.git
commit 114280878709833410981c986bc4f76a34a008af
Author: David Jacot <dj...@confluent.io>
AuthorDate: Mon Nov 29 10:42:14 2021 +0100
KAFKA-10712; Update release scripts to Python3 (#11538)
Reviewers: Mickael Maison <mi...@gmail.com>
---
release.py | 49 ++++++++++++++++++++++++-------------------------
release_notes.py | 29 +++++++++++++++--------------
2 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/release.py b/release.py
index f43e244b0e..456d60cd56 100755
--- a/release.py
+++ b/release.py
@@ -51,8 +51,6 @@ release.py release-email
"""
-from __future__ import print_function
-
import datetime
from getpass import getpass
import json
@@ -98,25 +96,25 @@ def print_output(output):
print(">", line)
def cmd(action, cmd_arg, *args, **kwargs):
- if isinstance(cmd_arg, basestring) and not kwargs.get("shell", False):
+ if isinstance(cmd_arg, str) and not kwargs.get("shell", False):
cmd_arg = cmd_arg.split()
allow_failure = kwargs.pop("allow_failure", False)
num_retries = kwargs.pop("num_retries", 0)
stdin_log = ""
- if "stdin" in kwargs and isinstance(kwargs["stdin"], basestring):
+ if "stdin" in kwargs and isinstance(kwargs["stdin"], str):
stdin_log = "--> " + kwargs["stdin"]
stdin = tempfile.TemporaryFile()
- stdin.write(kwargs["stdin"])
+ stdin.write(kwargs["stdin"].encode('utf-8'))
stdin.seek(0)
kwargs["stdin"] = stdin
print(action, cmd_arg, stdin_log)
try:
output = subprocess.check_output(cmd_arg, *args, stderr=subprocess.STDOUT, **kwargs)
- print_output(output)
+ print_output(output.decode('utf-8'))
except subprocess.CalledProcessError as e:
- print_output(e.output)
+ print_output(e.output.decode('utf-8'))
if num_retries > 0:
kwargs['num_retries'] = num_retries - 1
@@ -136,9 +134,9 @@ def cmd(action, cmd_arg, *args, **kwargs):
def cmd_output(cmd, *args, **kwargs):
- if isinstance(cmd, basestring):
+ if isinstance(cmd, str):
cmd = cmd.split()
- return subprocess.check_output(cmd, *args, stderr=subprocess.STDOUT, **kwargs)
+ return subprocess.check_output(cmd, *args, stderr=subprocess.STDOUT, **kwargs).decode('utf-8')
def replace(path, pattern, replacement):
updated = []
@@ -161,7 +159,7 @@ def regexReplace(path, pattern, replacement):
f.write(line)
def user_ok(msg):
- ok = raw_input(msg)
+ ok = input(msg)
return ok.strip().lower() == 'y'
def sftp_mkdir(dir):
@@ -204,13 +202,14 @@ def get_jdk(prefs, version):
"""
Get settings for the specified JDK version.
"""
- jdk_java_home = get_pref(prefs, 'jdk%d' % version, lambda: raw_input("Enter the path for JAVA_HOME for a JDK%d compiler (blank to use default JAVA_HOME): " % version))
+ jdk_java_home = get_pref(prefs, 'jdk%d' % version, lambda: input("Enter the path for JAVA_HOME for a JDK%d compiler (blank to use default JAVA_HOME): " % version))
jdk_env = dict(os.environ) if jdk_java_home.strip() else None
if jdk_env is not None: jdk_env['JAVA_HOME'] = jdk_java_home
- javaVersion = cmd_output("%s/bin/java -version" % jdk_java_home, env=jdk_env)
- if version == 8 and "1.8.0" not in javaVersion:
- fail("JDK 8 is required")
- elif "%d.0" % version not in javaVersion:
+ java_version = cmd_output("%s/bin/java -version" % jdk_java_home, env=jdk_env)
+ if version == 8:
+ if "1.8.0" not in java_version:
+ fail("JDK 8 is required")
+ elif "%d.0" % version not in java_version and '"%d"' % version not in java_version:
fail("JDK %s is required" % version)
return jdk_env
@@ -271,7 +270,7 @@ def command_stage_docs():
versioned_docs_path = os.path.join(kafka_site_repo_path, docs_version(version))
if not os.path.exists(versioned_docs_path):
- os.mkdir(versioned_docs_path, 0755)
+ os.mkdir(versioned_docs_path, 755)
# The contents of the docs jar are site-docs/<docs dir>. We need to get rid of the site-docs prefix and dump everything
# inside it into the docs version subdirectory in the kafka-site repo
@@ -309,16 +308,16 @@ def command_release_announcement_email():
release_tags = sorted([t for t in tags if re.match(release_tag_pattern, t)])
release_version_num = release_tags[-1]
if not user_ok("""Is the current release %s ? (y/n): """ % release_version_num):
- release_version_num = raw_input('What is the current release version:')
+ release_version_num = input('What is the current release version:')
validate_release_num(release_version_num)
previous_release_version_num = release_tags[-2]
if not user_ok("""Is the previous release %s ? (y/n): """ % previous_release_version_num):
- previous_release_version_num = raw_input('What is the previous release version:')
+ previous_release_version_num = input('What is the previous release version:')
validate_release_num(previous_release_version_num)
if release_version_num < previous_release_version_num :
fail("Current release version number can't be less than previous release version number")
- number_of_contributors = int(subprocess.check_output('git shortlog -sn --no-merges %s..%s | wc -l' % (previous_release_version_num, release_version_num) , shell=True))
- contributors = subprocess.check_output("git shortlog -sn --no-merges %s..%s | cut -f2 | sort --ignore-case" % (previous_release_version_num, release_version_num), shell=True)
+ number_of_contributors = int(subprocess.check_output('git shortlog -sn --no-merges %s..%s | wc -l' % (previous_release_version_num, release_version_num) , shell=True).decode('utf-8'))
+ contributors = subprocess.check_output("git shortlog -sn --no-merges %s..%s | cut -f2 | sort --ignore-case" % (previous_release_version_num, release_version_num), shell=True).decode('utf-8')
release_announcement_data = {
'number_of_contributors': number_of_contributors,
'contributors': ', '.join(str(x) for x in filter(None, contributors.split('\n'))),
@@ -481,10 +480,10 @@ starting_branch = cmd_output('git rev-parse --abbrev-ref HEAD')
cmd("Verifying that you have no unstaged git changes", 'git diff --exit-code --quiet')
cmd("Verifying that you have no staged git changes", 'git diff --cached --exit-code --quiet')
-release_version = raw_input("Release version (without any RC info, e.g. 1.0.0): ")
+release_version = input("Release version (without any RC info, e.g. 1.0.0): ")
release_version_parts = get_release_version_parts(release_version)
-rc = raw_input("Release candidate number: ")
+rc = input("Release candidate number: ")
dev_branch = '.'.join(release_version_parts[:2])
docs_release_version = docs_version(release_version)
@@ -508,7 +507,7 @@ if not rc:
sys.exit(0)
# Prereq checks
-apache_id = get_pref(prefs, 'apache_id', lambda: raw_input("Enter your apache username: "))
+apache_id = get_pref(prefs, 'apache_id', lambda: input("Enter your apache username: "))
jdk8_env = get_jdk(prefs, 8)
jdk15_env = get_jdk(prefs, 15)
@@ -517,7 +516,7 @@ def select_gpg_key():
print("Here are the available GPG keys:")
available_keys = cmd_output("gpg --list-secret-keys")
print(available_keys)
- key_name = raw_input("Which user name (enter the user name without email address): ")
+ key_name = input("Which user name (enter the user name without email address): ")
if key_name not in available_keys:
fail("Couldn't find the requested key.")
return key_name
@@ -527,7 +526,7 @@ key_name = get_pref(prefs, 'gpg-key', select_gpg_key)
gpg_passphrase = get_pref(prefs, 'gpg-pass', lambda: getpass("Passphrase for this GPG key: "))
# Do a quick validation so we can fail fast if the password is incorrect
with tempfile.NamedTemporaryFile() as gpg_test_tempfile:
- gpg_test_tempfile.write("abcdefg")
+ gpg_test_tempfile.write("abcdefg".encode('utf-8'))
cmd("Testing GPG key & passphrase", ["gpg", "--batch", "--pinentry-mode", "loopback", "--passphrase-fd", "0", "-u", key_name, "--armor", "--output", gpg_test_tempfile.name + ".asc", "--detach-sig", gpg_test_tempfile.name], stdin=gpg_passphrase)
save_prefs(prefs)
diff --git a/release_notes.py b/release_notes.py
index 029edcbacf..e44c74d5b2 100755
--- a/release_notes.py
+++ b/release_notes.py
@@ -28,7 +28,7 @@ from jira import JIRA
import itertools, sys
if len(sys.argv) < 2:
- print >>sys.stderr, "Usage: release_notes.py <version>"
+ print("Usage: release_notes.py <version>", file=sys.stderr)
sys.exit(1)
version = sys.argv[1]
@@ -58,7 +58,7 @@ if __name__ == "__main__":
apache = JIRA(JIRA_BASE_URL)
issues = get_issues(apache, 'project=KAFKA and fixVersion=%s' % version)
if not issues:
- print >>sys.stderr, "Didn't find any issues for the target fix version"
+ print("Didn't find any issues for the target fix version", file=sys.stderr)
sys.exit(1)
# Some resolutions, including a lack of resolution, indicate that the bug hasn't actually been addressed and we shouldn't even be able to create a release until they are fixed
@@ -78,11 +78,11 @@ if __name__ == "__main__":
]
unresolved_issues = [issue for issue in issues if issue.fields.resolution in UNRESOLVED_RESOLUTIONS or issue.fields.resolution.name in UNRESOLVED_RESOLUTIONS]
if unresolved_issues:
- print >>sys.stderr, "The release is not completed since unresolved issues or improperly resolved issues were found still tagged with this release as the fix version:"
+ print("The release is not completed since unresolved issues or improperly resolved issues were found still tagged with this release as the fix version:", file=sys.stderr)
for issue in unresolved_issues:
- print >>sys.stderr, "Unresolved issue: %15s %20s %s" % (issue.key, issue.fields.resolution, issue_link(issue))
- print >>sys.stderr
- print >>sys.stderr, "Note that for some resolutions, you should simply remove the fix version as they have not been truly fixed in this release."
+ print("Unresolved issue: %15s %20s %s" % (issue.key, issue.fields.resolution, issue_link(issue)), file=sys.stderr)
+ print("", file=sys.stderr)
+ print("Note that for some resolutions, you should simply remove the fix version as they have not been truly fixed in this release.", file=sys.stderr)
sys.exit(1)
# Get list of (issue type, [issues]) sorted by the issue ID type, with each subset of issues sorted by their key so they
@@ -93,11 +93,12 @@ if __name__ == "__main__":
return -2
if issue.fields.issuetype.name == 'Improvement':
return -1
- return issue.fields.issuetype.id
+ return int(issue.fields.issuetype.id)
+
by_group = [(k,sorted(g, key=lambda issue: issue.id)) for k,g in itertools.groupby(sorted(issues, key=issue_type_key), lambda issue: issue.fields.issuetype.name)]
- print "<h1>Release Notes - Kafka - Version %s</h1>" % version
- print """<p>Below is a summary of the JIRA issues addressed in the %(version)s release of Kafka. For full documentation of the
+ print("<h1>Release Notes - Kafka - Version %s</h1>" % version)
+ print("""<p>Below is a summary of the JIRA issues addressed in the %(version)s release of Kafka. For full documentation of the
release, a guide to get started, and information about the project, see the <a href="https://kafka.apache.org/">Kafka
project site</a>.</p>
@@ -107,10 +108,10 @@ if __name__ == "__main__":
changes, performance changes, and any other changes that might impact your production deployment of Kafka.</p>
<p>The documentation for the most recent release can be found at
- <a href="https://kafka.apache.org/documentation.html">https://kafka.apache.org/documentation.html</a>.</p>""" % { 'version': version, 'minor': minor_version_dotless }
+ <a href="https://kafka.apache.org/documentation.html">https://kafka.apache.org/documentation.html</a>.</p>""" % { 'version': version, 'minor': minor_version_dotless })
for itype, issues in by_group:
- print "<h2>%s</h2>" % itype
- print "<ul>"
+ print("<h2>%s</h2>" % itype)
+ print("<ul>")
for issue in issues:
- print '<li>[<a href="%(link)s">%(key)s</a>] - %(summary)s</li>' % {'key': issue.key, 'link': issue_link(issue), 'summary': issue.fields.summary}
- print "</ul>"
+ print('<li>[<a href="%(link)s">%(key)s</a>] - %(summary)s</li>' % {'key': issue.key, 'link': issue_link(issue), 'summary': issue.fields.summary})
+ print("</ul>")