Skip to content

Instantly share code, notes, and snippets.

@dot
Created May 8, 2017 10:44
Show Gist options
  • Select an option

  • Save dot/9b33a3c8e69893d7e428ad5f2067b958 to your computer and use it in GitHub Desktop.

Select an option

Save dot/9b33a3c8e69893d7e428ad5f2067b958 to your computer and use it in GitHub Desktop.
gh releaser
require 'octokit'
require 'pry'
require 'active_support'
require 'active_support/core_ext'
token = ENV['GH_TOKEN'] # create via https://github.com/settings/tokens
repos = 'nnh/oscr-ptosh'
matchers = [/Merge pull request \#(\d+) from/, /\(\#(\d+)\)/]
client = Octokit::Client.new(access_token: token)
# fetch commits from latest release tag
latest_release = client.releases(repos).first.tag_name
changes = client.compare(repos, latest_release, 'master').commits
# list PR-ish commits
list = changes.each_with_object({}) do |commit, r|
msg = commit.commit.message.split(/\n/).first
matchers.each do |m|
if m =~ msg
r[$1] = {sha: commit.sha, date: commit.commit.author.date}
break
end
end
end
# attach PR title
list.each do |num, val|
pr = client.pull_request(repos, num)
if pr.merge_commit_sha == val[:sha]
val.update(title: pr.title)
end
end
# make release note
note = list.each_with_object("") do |(k, v), r|
r << " - ##{k} #{v[:title].gsub(/\[\#(\d+)\]/){ "([##{$1}](https://www.pivotaltracker.com/story/show/#{$1}))" }}\n"
end
# make draft release
opt = {target_commitish: :release,
name: "#{Date.current.strftime('%Y%m%d')} release",
body: note,
draft: true}
client.create_release(repos, Date.current.strftime('%Y%m%d'), opt)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment