File: schema_validator.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (34 lines) | stat: -rw-r--r-- 812 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# frozen_string_literal: true

require_relative '../migration_schema_validator'

class SchemaValidator < MigrationSchemaValidator
  ALLOW_SCHEMA_CHANGES = 'ALLOW_SCHEMA_CHANGES'
  COMMIT_MESSAGE_SKIP_TAG = 'skip-db-structure-check'

  def validate!
    return if should_skip?

    return if schema_changes.empty?

    die "#{FILENAME} was changed, and no migrations were added:\n#{schema_changes}" if committed_migrations.empty?
  end

  private

  def schema_changes
    @schema_changes ||= run("git diff #{diff_target} HEAD -- #{FILENAME}")
  end

  def should_skip?
    skip_env_present? || skip_commit_present?
  end

  def skip_env_present?
    !ENV[ALLOW_SCHEMA_CHANGES].to_s.empty?
  end

  def skip_commit_present?
    run("git show -s --format=%B -n 1").to_s.include?(COMMIT_MESSAGE_SKIP_TAG)
  end
end