kafka-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ij...@apache.org
Subject kafka git commit: KAFKA-3851; Automate release notes and include links to upgrade notes for release and most recent docs to forward users of older releases to newest docs.
Date Wed, 27 Jul 2016 23:00:26 GMT
Repository: kafka
Updated Branches:
  refs/heads/trunk 8deedcacb -> d5c821c19


KAFKA-3851; Automate release notes and include links to upgrade notes for release and most
recent docs to forward users of older releases to newest docs.

Author: Ewen Cheslack-Postava <me@ewencp.org>

Reviewers: Jun Rao <junrao@gmail.com>, Ismael Juma <ismael@juma.me.uk>

Closes #1670 from ewencp/kafka-3851-automate-release-notes


Project: http://git-wip-us.apache.org/repos/asf/kafka/repo
Commit: http://git-wip-us.apache.org/repos/asf/kafka/commit/d5c821c1
Tree: http://git-wip-us.apache.org/repos/asf/kafka/tree/d5c821c1
Diff: http://git-wip-us.apache.org/repos/asf/kafka/diff/d5c821c1

Branch: refs/heads/trunk
Commit: d5c821c198dcfbc69bd393c7725f93b22b479bca
Parents: 8deedca
Author: Ewen Cheslack-Postava <me@ewencp.org>
Authored: Wed Jul 27 23:54:04 2016 +0100
Committer: Ismael Juma <ismael@juma.me.uk>
Committed: Wed Jul 27 23:54:04 2016 +0100

----------------------------------------------------------------------
 release_notes.py | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kafka/blob/d5c821c1/release_notes.py
----------------------------------------------------------------------
diff --git a/release_notes.py b/release_notes.py
new file mode 100755
index 0000000..5940fb2
--- /dev/null
+++ b/release_notes.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+
+"""Usage: release_notes.py <version> > RELEASE_NOTES.html
+
+Generates release notes for a Kafka release by generating an HTML doc containing some introductory
information about the
+ release with links to the Kafka docs followed by a list of issues resolved in the release.
The script will fail if it finds
+ any unresolved issues still marked with the target release. You should run this script after
either resolving all issues or
+ moving outstanding issues to a later release.
+
+"""
+
+from jira import JIRA
+import itertools, sys
+
+if len(sys.argv) < 2:
+    print >>sys.stderr, "Usage: release_notes.py <version>"
+    sys.exit(1)
+
+version = sys.argv[1]
+minor_version_dotless = "".join(version.split(".")[:3]) # i.e., 0.10.0 if version == 0.10.0.1
+
+JIRA_BASE_URL = 'https://issues.apache.org/jira'
+MAX_RESULTS = 100 # This is constrained for cloud instances so we need to fix this value
+
+def get_issues(jira, query, **kwargs):
+    """
+    Get all issues matching the JQL query from the JIRA instance. This handles expanding
paginated results for you. Any additional keyword arguments are forwarded to the JIRA.search_issues
call.
+    """
+    results = []
+    startAt = 0
+    new_results = None
+    while new_results == None or len(new_results) == MAX_RESULTS:
+        new_results = jira.search_issues(query, startAt=startAt, maxResults=MAX_RESULTS,
**kwargs)
+        results += new_results
+        startAt += len(new_results)
+    return results
+
+def issue_link(issue):
+    return "%s/browse/%s" % (JIRA_BASE_URL, issue.key)
+
+
+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"
+        sys.exit(1)
+
+    unresolved_issues = [issue for issue in issues if issue.fields.resolution is None]
+    if unresolved_issues:
+        print >>sys.stderr, "The release is not completed since unresolved issues were
found still tagged with this release as the fix version:"
+        for issue in unresolved_issues:
+            print >>sys.stderr, "Unresolved issue: %s %s" % (issue.key, issue_link(issue))
+        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
+    # are in increasing order of bug #. To get a nice ordering of the issue types we customize
the key used to sort by issue
+    # type a bit to ensure features and improvements end up first.
+    def issue_type_key(issue):
+        if issue.fields.issuetype.name == 'New Feature':
+            return -2
+        if issue.fields.issuetype.name == 'Improvement':
+            return -1
+        return 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
+    release, a guide to get started, and information about the project, see the <a href="http://kafka.apache.org/">Kafka
+    project site</a>.</p>
+
+    <p><b>Note about upgrades:</b> Please carefully review the
+    <a href="http://kafka.apache.org/%(minor)s/documentation.html#upgrade">upgrade
documentation</a> for this release thoroughly
+    before upgrading your cluster. The upgrade notes discuss any critical information about
incompatibilities and breaking
+    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="http://kafka.apache.org/documentation.html">http://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>"
+        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>"


Mime
View raw message