#!/usr/bin/env ruby require "bundler/inline" gemfile do source "https://rubygems.org" gem "diffy" end require "open-uri" require "yaml" Diffy::Diff.default_options.merge!( include_diff_info: true, context: 1, ) class Tarball attr_reader :version, :size, :sha1, :sha256, :sha512 def initialize(version, url, size, sha1, sha256, sha512) @url = url @size = size @sha1 = sha1 @sha256 = sha256 @sha512 = sha512 @version = version @xy = version[/\A\d+\.\d+/] end def gz?; @url.end_with?('.gz'); end def zip?; @url.end_with?('.zip'); end def bz2?; @url.end_with?('.bz2'); end def xz?; @url.end_with?('.xz'); end def ext; @url[/(?:zip|tar\.(?:gz|bz2|xz))\z/]; end def to_md < SIZE: #{@size} bytes SHA1: #{@sha1} SHA256: #{@sha256} SHA512: #{@sha512} eom end # * /home/naruse/obj/ruby-trunk/tmp/ruby-2.6.0-preview3.tar.gz # SIZE: 17116009 bytes # SHA1: 21f62c369661a2ab1b521fd2fa8191a4273e12a1 # SHA256: 97cea8aa63dfa250ba6902b658a7aa066daf817b22f82b7ee28f44aec7c2e394 # SHA512: 1e2042324821bb4e110af7067f52891606dcfc71e640c194ab1c117f0b941550e0b3ac36ad3511214ac80c536b9e5cfaf8789eec74cf56971a832ea8fc4e6d94 def self.parse(wwwdir, version, rubydir) unless /\A(\d+)\.(\d+)\.(\d+)(?:-(?:preview|rc)\d+)?\z/ =~ version raise "unexpected version string '#{version}'" end x = $1.to_i y = $2.to_i z = $3.to_i # previous tag for git diff --shortstat # It's only for x.y.0 release if z != 0 prev_tag = nil elsif y != 0 prev_tag = "v#{x}_#{y-1}_0" prev_ver = "#{x}.#{y-1}.0" elsif x == 3 && y == 0 && z == 0 prev_tag = "v2_7_0" prev_ver = "2.7.0" else raise "unexpected version for prev_ver '#{version}'" end uri = "https://cache.ruby-lang.org/pub/tmp/ruby-info-#{version}-draft.yml" info = YAML.load(URI(uri).read) if info.size != 1 raise "unexpected info.yml '#{uri}'" end tarballs = [] info[0]["size"].each_key do |ext| url = info[0]["url"][ext] size = info[0]["size"][ext] sha1 = info[0]["sha1"][ext] sha256 = info[0]["sha256"][ext] sha512 = info[0]["sha512"][ext] tarball = Tarball.new(version, url, size, sha1, sha256, sha512) tarballs << tarball end if prev_tag # show diff shortstat tag = "v#{version.gsub(/[.\-]/, '_')}" stat = `git -C #{rubydir} diff --shortstat #{prev_tag}..#{tag}` files_changed, insertions, deletions = stat.scan(/\d+/) end xy = version[/\A\d+\.\d+/] #puts "## Download\n\n" #tarballs.each do |tarball| # puts tarball.to_md #end update_branches_yml(version, xy, wwwdir) update_downloads_yml(version, xy, wwwdir) update_releases_yml(version, xy, tarballs, wwwdir, files_changed, insertions, deletions) tarballs end def self.update_branches_yml(ver, xy, wwwdir) filename = "_data/branches.yml" orig_data = File.read(File.join(wwwdir, filename)) data = orig_data.dup if data.include?("\n- name: #{xy}\n") data.sub!(/\n- name: #{Regexp.escape(xy)}\n(?: .*\n)*/) do |node| unless ver.include?("-") # assume this is X.Y.0 release node.sub!(/^ status: preview\n/, " status: normal maintenance\n") node.sub!(/^ date:\n/, " date: #{Time.now.year}-12-25\n") end node end else if ver.include?("-") status = "preview" year = nil else status = "normal maintenance" year = Time.now.year end entry = < " exit end Tarball.parse(wwwdir, version, rubydir) end main