Class: RubyInstaller::Build::Release
- Inherits:
-
Object
- Object
- RubyInstaller::Build::Release
- Defined in:
- lib/ruby_installer/build/release.rb
Constant Summary collapse
- CONTENT_TYPE_FOR_EXT =
{ ".exe" => "application/vnd.microsoft.portable-executable", ".asc" => "application/pgp-signature", ".7z" => "application/zip", ".yml" => "application/x-yaml", }
Instance Method Summary collapse
- #headline_regex(rel = nil) ⇒ Object
- #hfile(ver) ⇒ Object
- #rel_to_ver(rel) ⇒ Object
- #reldate ⇒ Object
- #release_name(rel) ⇒ Object
- #release_text(rel) ⇒ Object
- #tag_version(rel) ⇒ Object
- #update_history(rel) ⇒ Object
- #upload_to_github(tag:, repo:, token: nil, files:) ⇒ Object
- #version_regex ⇒ Object
Instance Method Details
#headline_regex(rel = nil) ⇒ Object
12 13 14 |
# File 'lib/ruby_installer/build/release.rb', line 12 def headline_regex(rel=nil) "^(?<pre>[^\\w]*)(?<release>#{rel ? Regexp.escape(rel) : version_regex})(?<sp1>[^\\w]+)(?<date>[2Y][0Y][0-9Y][0-9Y]-[0-1M][0-9M]-[0-3D][0-9D])(?<sp2>[ \\w]*)$" end |
#hfile(ver) ⇒ Object
4 5 6 |
# File 'lib/ruby_installer/build/release.rb', line 4 def hfile(ver) "CHANGELOG-#{ver}.md" end |
#rel_to_ver(rel) ⇒ Object
32 33 34 35 36 |
# File 'lib/ruby_installer/build/release.rb', line 32 def rel_to_ver(rel) m = rel.match(/^#{version_regex}$/) raise "invalid version string #{rel.inspect}" unless m m[:ver][0, 3] # Extract major and minor version "2.4" etc. end |
#reldate ⇒ Object
16 17 18 |
# File 'lib/ruby_installer/build/release.rb', line 16 def reldate Time.now.strftime("%Y-%m-%d") end |
#release_name(rel) ⇒ Object
26 27 28 29 30 |
# File 'lib/ruby_installer/build/release.rb', line 26 def release_name(rel) ver = rel_to_ver(rel) m = File.read(hfile(ver)).match(/#{headline_regex(rel)}/) m[:release] end |
#release_text(rel) ⇒ Object
20 21 22 23 24 |
# File 'lib/ruby_installer/build/release.rb', line 20 def release_text(rel) ver = rel_to_ver(rel) m = File.read(hfile(ver)).match(/(?<annotation>#{headline_regex(rel)}.*?)(#{headline_regex}|\z)/m) || raise("Unable to find release #{rel.inspect} in #{hfile(ver)}") m[:annotation] end |
#tag_version(rel) ⇒ Object
51 52 53 54 55 56 57 58 |
# File 'lib/ruby_installer/build/release.rb', line 51 def tag_version(rel) $stderr.puts "Tag release #{rel} with annotation:" rt = release_text(rel).gsub(/\A[# ]+/, "") $stderr.puts(rt.gsub(/^/, " ")) IO.popen(["git", "tag", "--file=-", rel, "--cleanup=whitespace"], "w") do |fd| fd.write rt end end |
#update_history(rel) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/ruby_installer/build/release.rb', line 38 def update_history(rel) hfile = hfile(rel_to_ver(rel)) hin = File.read(hfile) hout = hin.sub(/#{headline_regex(rel)}/) do $1 + $2 + $3 + reldate + $5 end if hout != hin $stderr.puts "Updating #{hfile} for release." File.write(hfile, hout) Rake::FileUtilsExt.sh "git", "commit", hfile, "-m", "Update release date in #{hfile}" end end |
#upload_to_github(tag:, repo:, token: nil, files:) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/ruby_installer/build/release.rb', line 67 def upload_to_github(tag:, repo:, token: nil, files:) require "octokit" client = Octokit::Client.new(access_token: token) release = nil (1..100).find do |page| release = client.releases(repo, page: page).find{|r| r.tag_name==tag } end $stderr.puts "#{ release ? "Add to" : "Create" } github release #{tag}" if tag =~ /head$/ if release headline = release.name body = release.body .gsub(/[2Y][0Y][0-9Y][0-9Y]-[0-1M][0-9M]-[0-3D][0-9D] [0-2H][0-9H]:[0-6M][0-9M]:[0-6S][0-9S] UTC/, Time.now.utc.strftime("%Y-%m-%d %H:%M:%S UTC")) .gsub(/(Ruby version #{RUBY_PLATFORM}.*?```).*?(```)/m) do $1 + "\n" + `ruby --version` + "\n" + $2 end else headline = tag body = "Latest build of #{tag}" end else headline = IO.popen(["git", "tag", "-l", tag, "--format=%(subject)"], &:read) body = IO.popen(["git", "tag", "-l", tag, "--format=%(body)"], &:read) end raise "invalid headline of tag #{tag.inspect} #{headline.inspect}" if headline.to_s.strip.empty? raise "invalid body of tag #{tag.inspect} #{body.inspect}" if body.to_s.strip.empty? if release release = client.update_release(release.url, name: headline, body: body) else release = client.create_release(repo, tag, target_commitish: "master", name: headline, body: body, draft: true, prerelease: true ) end old_assets = client.release_assets(release.url) files.each do |fname| if old_asset=old_assets.find{|a| a.name == File.basename(fname) } $stderr.puts "Delete old #{old_asset.name}" client.delete_release_asset(old_asset.url) end $stderr.print "Uploading #{fname} (#{File.size(fname)} bytes) ... " client.upload_asset(release.url, fname, content_type: CONTENT_TYPE_FOR_EXT[File.extname(fname)]) $stderr.puts "OK" end end |
#version_regex ⇒ Object
8 9 10 |
# File 'lib/ruby_installer/build/release.rb', line 8 def version_regex '[\w]+-(?<ver>\d+\.\d+\.\d+(\.[a-z]\w*)?-[\d\w]+)' end |