#!/usr/bin/env ruby
require 'yaml'
def check_yaml_file(file_path)
puts "🔍 检查YAML文件: #{file_path}"
begin
yaml = YAML.load_file(file_path)
puts "✅ YAML语法正确"
# 结构验证
jobs = yaml.keys.reject { |k| k.start_with?('.') }
variables = yaml.keys.select { |k| k.start_with?('.') }
puts "📊 结构分析:"
puts " Job数量: #{jobs.length}"
puts " Jobs: #{jobs.join(', ')}"
puts " 变量定义: #{variables.join(', ')}"
# GitLab CI验证
required_fields = ['stage', 'script', 'rules']
jobs.each do |job_name|
job = yaml[job_name]
missing = required_fields - job.keys
status = missing.empty? ? '✅' : '❌'
puts " #{job_name}: #{status} #{missing.empty? ? '完整' : '缺少 ' + missing.join(', ')}"
end
puts "🎉 所有检查通过!"
rescue Psych::SyntaxError => e
puts "❌ YAML语法错误:"
puts " 行号: #{e.line}"
puts " 列号: #{e.column}"
puts " 错误: #{e.problem}"
exit 1
rescue => e
puts "❌ 检查失败: #{e.message}"
exit 1
end
end
# 主程序
if ARGV.empty?
check_yaml_file('ci/feishu-notify.yml')
else
ARGV.each { |file| check_yaml_file(file) }
end
