Class: RosettAi::Gitlab::Validators::SupplementaryGitlabCiYamlValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb

Overview

Validates GitLab CI YAML files for syntax correctness.

Uses Psych.parse (AST-only parsing) rather than YAML.safe_load so that GitLab CI custom tags like !reference are accepted without needing explicit constructors. This catches genuine YAML syntax errors (e.g. double-quoted strings misinterpreted as YAML scalars) while remaining compatible with GitLab-specific extensions.

Constant Summary collapse

CI_ROOT_FILE =
'.gitlab-ci.yml'
CI_FILES_DIR =
'.gitlab-ci-files'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project_dir: Dir.pwd) ⇒ SupplementaryGitlabCiYamlValidator

Returns a new instance of SupplementaryGitlabCiYamlValidator.



25
26
27
28
# File 'lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb', line 25

def initialize(project_dir: Dir.pwd)
  @project_dir = Pathname.new(project_dir)
  @results = { valid: [], invalid: [] }
end

Instance Attribute Details

#resultsObject (readonly)

Returns the value of attribute results.



23
24
25
# File 'lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb', line 23

def results
  @results
end

Instance Method Details

#valid?Boolean

Returns:

  • (Boolean)


40
41
42
43
# File 'lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb', line 40

def valid?
  validate if @results[:valid].empty? && @results[:invalid].empty?
  @results[:invalid].empty?
end

#validateObject



30
31
32
33
34
35
36
37
38
# File 'lib/rosett_ai/gitlab/validators/supplementary_gitlab_ci_yaml_validator.rb', line 30

def validate
  @results = { valid: [], invalid: [] }

  files = ci_files
  return @results if files.empty?

  files.each { |file| validate_file(file) }
  @results
end