35 lines
812 B
Ruby
35 lines
812 B
Ruby
|
# 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
|