advanced pipeline
This commit is contained in:
Executable
+119
@@ -0,0 +1,119 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require "rubygems"
|
||||
|
||||
ENGINE_PREFIX = "libs/ruby/warp_engine/".freeze
|
||||
VERSION_PATH = "#{ENGINE_PREFIX}lib/warp_engine/version.rb".freeze
|
||||
TAG_PREFIX = "warp_engine-v".freeze
|
||||
SKIP_ENV = "SKIP_WARP_ENGINE_VERSION_CHECK".freeze
|
||||
|
||||
def die(message)
|
||||
warn "\e[31mwarp_engine verzióellenőrzés\e[0m: #{message}"
|
||||
exit 1
|
||||
end
|
||||
|
||||
def ok(message)
|
||||
puts "warp_engine verzióellenőrzés: #{message}"
|
||||
exit 0
|
||||
end
|
||||
|
||||
def git(*args)
|
||||
output = IO.popen([ "git", *args ], err: File::NULL, &:read)
|
||||
$?.success? ? output : nil
|
||||
end
|
||||
|
||||
def blank_rev?(rev)
|
||||
rev.nil? || rev.empty? || rev.match?(/\A0+\z/)
|
||||
end
|
||||
|
||||
def version_in(spec)
|
||||
source = git("show", spec)
|
||||
return nil if source.nil? || source.empty?
|
||||
|
||||
match = source.match(/VERSION\s*=\s*["']([^"']+)["']/)
|
||||
return nil if match.nil?
|
||||
|
||||
Gem::Version.new(match[1])
|
||||
rescue ArgumentError
|
||||
nil
|
||||
end
|
||||
|
||||
def engine_files(*diff_args)
|
||||
output = git("diff", *diff_args) or die("a git diff nem futott le (#{diff_args.join(' ')})")
|
||||
output.lines.map(&:chomp).select { |path| path.start_with?(ENGINE_PREFIX) }
|
||||
end
|
||||
|
||||
def bumped!(from, to, changed, how)
|
||||
die("a #{VERSION_PATH} nem olvasható #{how}") if to.nil?
|
||||
|
||||
if from.nil?
|
||||
ok("#{to} — korábbi verzió nem volt, elfogadva")
|
||||
end
|
||||
|
||||
if to > from
|
||||
puts "warp_engine verzióellenőrzés: #{from} -> #{to}, rendben (#{changed.size} érintett fájl)"
|
||||
return
|
||||
end
|
||||
|
||||
die(<<~MESSAGE)
|
||||
a warp_engine módosult, de a verzió nem emelkedett (#{from} -> #{to}).
|
||||
|
||||
Érintett fájlok:
|
||||
#{changed.first(10).map { |path| " #{path}" }.join("\n")}#{changed.size > 10 ? "\n ... és még #{changed.size - 10}" : ''}
|
||||
|
||||
Emeld a verziót itt: #{VERSION_PATH}
|
||||
A gem a #{TAG_PREFIX}<verzió> tagre kerül ki a registrybe.
|
||||
|
||||
Kihagyás (csak indokolt esetben): #{SKIP_ENV}=1, vagy git commit --no-verify
|
||||
MESSAGE
|
||||
end
|
||||
|
||||
def check_staged
|
||||
changed = engine_files("--cached", "--name-only", "--diff-filter=ACMRD")
|
||||
ok("a commit nem érinti a warp_engine-t") if changed.empty?
|
||||
ok("első commit, elfogadva") if git("rev-parse", "--verify", "HEAD").nil?
|
||||
|
||||
bumped!(version_in("HEAD:#{VERSION_PATH}"), version_in(":#{VERSION_PATH}"), changed, "az indexből")
|
||||
end
|
||||
|
||||
def check_range(from, to)
|
||||
ok("nincs korábbi commit a push-ban, elfogadva") if blank_rev?(from)
|
||||
to = "HEAD" if blank_rev?(to)
|
||||
|
||||
changed = engine_files("--name-only", from, to)
|
||||
ok("a push nem érinti a warp_engine-t") if changed.empty?
|
||||
|
||||
bumped!(version_in("#{from}:#{VERSION_PATH}"), version_in("#{to}:#{VERSION_PATH}"), changed, "a #{to} commitban")
|
||||
end
|
||||
|
||||
def check_tag(ref)
|
||||
tag = ref.to_s.sub(%r{\Arefs/tags/}, "")
|
||||
die("a(z) #{tag} tag neve nem #{TAG_PREFIX}<verzió> alakú") unless tag.start_with?(TAG_PREFIX)
|
||||
|
||||
tagged = Gem::Version.new(tag.delete_prefix(TAG_PREFIX))
|
||||
current = version_in("HEAD:#{VERSION_PATH}") or die("a #{VERSION_PATH} nem olvasható a HEAD-ben")
|
||||
|
||||
if tagged != current
|
||||
die("a tag #{tagged}-t hirdet, a #{VERSION_PATH} viszont #{current}-t tartalmaz")
|
||||
end
|
||||
|
||||
ok("a tag és a VERSION egyezik (#{current})")
|
||||
rescue ArgumentError
|
||||
die("a(z) #{tag} tagből nem olvasható verzió")
|
||||
end
|
||||
|
||||
ok("kihagyva (#{SKIP_ENV})") if ENV[SKIP_ENV] == "1"
|
||||
|
||||
case ARGV[0]
|
||||
when "--staged" then check_staged
|
||||
when "--range" then check_range(ARGV[1], ARGV[2])
|
||||
when "--tag" then check_tag(ARGV[1])
|
||||
else
|
||||
warn <<~USAGE
|
||||
Használat:
|
||||
script/warp_engine_version_check.rb --staged
|
||||
script/warp_engine_version_check.rb --range <elozo-sha> <mostani-sha>
|
||||
script/warp_engine_version_check.rb --tag <refs/tags/warp_engine-vX.Y.Z>
|
||||
USAGE
|
||||
exit 2
|
||||
end
|
||||
Reference in New Issue
Block a user