Adding changelog generation.

Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/2f1614aa
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/2f1614aa
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/2f1614aa

Branch: refs/heads/master
Commit: 2f1614aa849052053e0ea352edf776aad2c28b10
Parents: 36e9f45
Author: Dave Johnson <[email protected]>
Authored: Thu Nov 20 11:05:00 2014 +0100
Committer: Dave Johnson <[email protected]>
Committed: Thu Nov 20 11:05:00 2014 +0100

----------------------------------------------------------------------
 release/changelog.rb         | 150 ++++++++++++++++++++++++++++++++++++++
 release/release-candidate.sh |   2 +-
 2 files changed, 151 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2f1614aa/release/changelog.rb
----------------------------------------------------------------------
diff --git a/release/changelog.rb b/release/changelog.rb
new file mode 100755
index 0000000..8e7cfcb
--- /dev/null
+++ b/release/changelog.rb
@@ -0,0 +1,150 @@
+#!/usr/bin/env ruby
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Updates the CHANGELOG for the specified Apache Usergrid release, if no
+# version override is specified then .usergridversion will be read and used.
+# The version string will need to match the Apache Usergrid jira tickets
+# fixVersion to generate this list.
+#
+require 'rubygems'
+require 'json'
+require 'uri'
+require 'net/http'
+require 'net/https'
+require 'openssl'
+require 'tempfile'
+
+def http_post(uri, params={}, headers={}, body=nil, debug=false)
+  http = Net::HTTP.new(uri.host, uri.port)
+  http.set_debug_output($stdout) if debug
+  if uri.scheme == "https" || uri.port == 443
+    http.use_ssl = true
+    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
+  end
+  response = nil
+
+  begin
+    request = Net::HTTP::Post.new(uri.request_uri)
+    request.set_form_data(params) if (params && params.size > 1)
+    request.basic_auth uri.user, uri.password if uri.user
+    request.body = body if body
+
+    headers.each_pair do |name, value|
+      request[name] = value
+    end
+
+    response = http.request(request)
+  rescue Exception => e
+    raise "Error posting to #{uri.to_s}. #{e}"
+  end
+
+  response
+end
+
+def get_jira_issues_for_query(url, jql, startAt=0, maxResults=100)
+  begin
+    request_body = { :jql => jql, :startAt => startAt, :maxResults => 
maxResults}
+    response = http_post(
+      URI(url),
+      {},
+      {"content-type" => 'application/json', "accept" => "application/json"},
+      request_body.to_json
+    )
+  rescue StandardError => e
+    raise "Error executing jql query: #{jql}. #{e}"
+  end
+
+  begin
+    results = JSON.parse(response.body)
+  rescue StandardError => e
+    raise "Error parsing json result"
+  end
+
+  results
+end
+
+def get_all_jira_issues_for_query(url, jql)
+  startAt = 0
+  maxResults = 100
+
+  results = []
+  begin
+    res = get_jira_issues_for_query(url, jql, startAt, maxResults)
+    results.concat(res['issues']) if res && res.has_key?('issues')
+    startAt = startAt + maxResults
+  end until (results.size() == res['total'] )
+
+  results
+end
+
+base_dir = `git rev-parse --show-toplevel`.strip
+
+# Get the current version from the .usergridversion file if no version 
override is provided
+version = nil
+if ARGV[0].nil?
+  version = nil
+  Dir.chdir(base_dir) do
+    version = File.read('.usergridversion').strip
+  end
+else
+  version = ARGV[0]
+end
+
+raise "Unable to read .usergridversion" if version.nil?
+
+jira_base_url = "https://issues.apache.org/jira";
+jira_search_url = "/rest/api/2/search"
+jira_url = jira_base_url + jira_search_url
+
+jql="project=AURORA AND fixVersion='#{version}' AND status in 
(Resolved,Closed) ORDER BY issuetype"
+
+# Fetch all the issues available for the given jql query
+results = get_all_jira_issues_for_query(jira_url, jql)
+
+changelog = {}
+# Loop through and add all results
+results.each do |issue|
+  key = issue['key']
+  summary = issue['fields']['summary']
+  type = issue['fields']['issuetype']['name']
+
+  changelog_entry = "[#{key}] - #{summary}"
+
+  if !changelog[type].nil?
+    changelog[type] << changelog_entry
+  else
+    changelog[type] = [changelog_entry]
+  end
+end
+
+# Merge the new updates and the existing changelog
+tmpfile = Tempfile.open('usergrid.changelog')
+begin
+  tmpfile.puts "Usergrid #{version}", "-" * 80
+  changelog.keys.sort.each do |type|
+    tmpfile.puts "## #{type}"
+    changelog[type].each { |entry| tmpfile.puts "    * #{entry}" }
+    tmpfile.puts ""
+  end
+  # Append all the existing CHANGELOG entries and write the new CHANGELOG file
+  tmpfile.puts ""
+  changelog_file = File.join(base_dir, 'CHANGELOG')
+  tmpfile.write File.read(changelog_file) if File.exist?(changelog_file)
+  tmpfile.rewind
+  tmpfile.flush
+  File.open(changelog_file,"w+") {|f|  f.write(tmpfile.read) }
+ensure
+  tmpfile.close
+  tmpfile.unlink
+end

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2f1614aa/release/release-candidate.sh
----------------------------------------------------------------------
diff --git a/release/release-candidate.sh b/release/release-candidate.sh
index 913c2eb..028f3b7 100755
--- a/release/release-candidate.sh
+++ b/release/release-candidate.sh
@@ -165,7 +165,7 @@ fi
 git clean -fdxq
 
 echo "Generating changelog"
-${base_dir}/build-support/release/changelog $current_version
+${base_dir}/release/changelog.rb $current_version
 git add CHANGELOG
 git commit -m "Updating CHANGELOG for ${current_version} release."
 

Reply via email to