advanced pipeline
ci/woodpecker/push/deploy Pipeline was successful
ci/woodpecker/push/warp_engine Pipeline was successful

This commit is contained in:
2026-08-25 23:50:11 +02:00
parent 259de781bb
commit a58e91520e
42 changed files with 403 additions and 60 deletions
+119
View File
@@ -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