@@ -12,6 +12,69 @@ PKG_VERSION = File.foreach(File.join(__dir__, "lib/json/version.rb")) do |
1212 /^\s *VERSION\s *=\s *'(.*)'/ =~ line and break $1
1313end rescue nil
1414
15+ module CI
16+ extend self
17+
18+ def gem_published? ( name , version )
19+ require 'net/https'
20+ require 'uri'
21+ uri = URI . parse ( "https://rubygems.org/api/v2/rubygems/#{ name } /versions/#{ version } .json" )
22+ Net ::HTTP . get_response ( uri ) . is_a? ( Net ::HTTPSuccess )
23+ end
24+
25+ def changelog ( version )
26+ changelog_lines = File . readlines ( File . expand_path ( "CHANGES.md" , __dir__ ) )
27+ changelog_lines = changelog_lines . drop_while { |line | !( line . start_with? ( "### " ) && line . include? ( "(#{ version } )" ) ) }
28+ if changelog_lines . empty?
29+ return false
30+ end
31+ changelog_lines . shift
32+ changelog_lines = changelog_lines . take_while { |line | !( line . start_with? ( "### " ) ) }
33+ changelog_lines . join
34+ end
35+
36+ def prerelease? ( version )
37+ !version . match? ( /\A [\d .]+\z / )
38+ end
39+ end
40+
41+ namespace :ci do
42+ task :check_release do
43+ unless PKG_VERSION
44+ abort ( "Gem version couldn't be read" )
45+ end
46+
47+ if CI . gem_published? ( "json" , PKG_VERSION )
48+ $stderr. puts "Version #{ PKG_VERSION } was already released. Nothing to do."
49+ exit 0
50+ end
51+
52+ if changelog = CI . changelog ( PKG_VERSION )
53+ puts "Changelog:"
54+ puts changelog
55+ else
56+ abort ( "Could not find version #{ PKG_VERSION } in CHANGES.md" )
57+ end
58+
59+ if ENV [ "GITHUB_OUTPUT" ]
60+ $stderr. puts "Triggering release"
61+ File . open ( ENV [ "GITHUB_OUTPUT" ] , "a+" ) do |f |
62+ f . puts "run_publish=true"
63+ end
64+ end
65+ end
66+
67+ task :create_release do
68+ tag = "v#{ PKG_VERSION } "
69+ args = [
70+ "--title" , tag ,
71+ "--notes" , changelog ,
72+ ]
73+ args << "--prerelease" << "--latest=false" if CI . prerelease? ( PKG_VERSION )
74+ system ( "gh" , "release" , "create" , tag , "--draft" , *args )
75+ end
76+ end
77+
1578JAVA_DIR = "java/src/json/ext"
1679JAVA_RAGEL_PATH = "#{ JAVA_DIR } /ParserConfig.rl"
1780JAVA_PARSER_SRC = "#{ JAVA_DIR } /ParserConfig.java"
0 commit comments