Skip to content

Instantly share code, notes, and snippets.

@krames
Last active August 29, 2015 13:57
Show Gist options
  • Select an option

  • Save krames/9495424 to your computer and use it in GitHub Desktop.

Select an option

Save krames/9495424 to your computer and use it in GitHub Desktop.
This gist creates releases for fog/fog based on the changelog.txt file. You will need to supply a username and a personal access token.
require 'singleton'
require 'octokit'
class ReleaseNotesGenerator
include Singleton
def release_header?
release_match != nil
end
def release_match
@current_line.match(/(\d+\.\d+\.\d+)\s+\d{2}\/\d{2}\/\d{4}\s+([0-9a-f]+)/)
end
def skip_header_lines
2.times { @file.readline }
end
def print_release
# puts "+" * 50
puts @release
# puts "+" * 50
# puts "The is space is blank\n"
exit
end
def github
@client ||= Octokit::Client.new \
:login => USER_NAME
:password => API_KEYk
end
def add_release
github.create_release "fog/fog", "v#{@release_tag}", {:name => "v#{@release_tag}", :body => @release}
puts "creating release #{@release_tag}"
end
def set_release_vars
@header = @current_line
@release_tag = release_match[1]
@release_hash = release_match[2]
end
def section_header?
@current_line.match(/\[[^\]]+\]/) != nil
end
def inside_release_details?
@inside_release_details
end
def format_section_header
if section_header?
@current_line = "#### #{@current_line}"
end
end
def line_blank?
@current_line.match(/[^\s]/).nil?
end
def bullet_item
if inside_release_details? && !section_header?
@current_line = "* #{@current_line}" unless line_blank?
end
end
def strip_at_signs
@current_line.gsub! /(@[^\s]+)/, '`\1`'
end
def italicize_thanks
@current_line.gsub! /(thanks .*$)/, '*\1*'
end
def format_line
format_section_header
bullet_item
strip_at_signs
italicize_thanks
end
def reset_variables
@release = ""
@inside_release_details = false
end
def parse(file_name)
File.open(file_name) do |file|
@file = file
@release = nil
@releases = []
file.each_line do |line|
@current_line = line
if release_header?
add_release if @release
# print_release if @release
set_release_vars
skip_header_lines
reset_variables
else
@inside_release_details ||= section_header?
format_line
@release << @current_line
end
end
end
end
end
ReleaseNotesGenerator.instance.parse 'changelog.txt'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment