Commit c88c1ea0 authored by Mayra Cabrera's avatar Mayra Cabrera

Merge branch '343978-verify-schema' into 'master'

Make sure CI job `db:check-schema` can catch corrupted `structure.sql`

See merge request gitlab-org/gitlab!73298
parents 5d99898e ac681e99
...@@ -338,27 +338,16 @@ rspec fast_spec_helper minimal: ...@@ -338,27 +338,16 @@ rspec fast_spec_helper minimal:
- .minimal-rspec-tests - .minimal-rspec-tests
- .rails:rules:ee-and-foss-fast_spec_helper:minimal - .rails:rules:ee-and-foss-fast_spec_helper:minimal
db:migrate:reset: db:rollback:
extends: .db-job-base extends: .db-job-base
script: script:
- bundle exec rake db:migrate:reset - bundle exec rake db:migrate VERSION=20181228175414
- bundle exec rake db:migrate SKIP_SCHEMA_VERSION_CHECK=true
db:check-schema:
extends:
- .db-job-base
- .rails:rules:ee-mr-and-default-branch-only
script:
- source scripts/schema_changed.sh
- scripts/validate_migration_timestamps
db:check-migrations: db:migrate:reset:
extends: extends: .db-job-base
- .db-job-base
- .rails:rules:ee-and-foss-mr-with-migration
script: script:
- git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME --depth 20 - bundle exec rake db:migrate:reset
- scripts/validate_migration_schema
allow_failure: true
db:migrate-from-previous-major-version: db:migrate-from-previous-major-version:
extends: .db-job-base extends: .db-job-base
...@@ -367,7 +356,8 @@ db:migrate-from-previous-major-version: ...@@ -367,7 +356,8 @@ db:migrate-from-previous-major-version:
SETUP_DB: "false" SETUP_DB: "false"
PROJECT_TO_CHECKOUT: "gitlab-foss" PROJECT_TO_CHECKOUT: "gitlab-foss"
TAG_TO_CHECKOUT: "v13.12.9" TAG_TO_CHECKOUT: "v13.12.9"
script: before_script:
- !reference [.default-before_script, before_script]
- '[[ -d "ee/" ]] || export PROJECT_TO_CHECKOUT="gitlab"' - '[[ -d "ee/" ]] || export PROJECT_TO_CHECKOUT="gitlab"'
- '[[ -d "ee/" ]] || export TAG_TO_CHECKOUT="${TAG_TO_CHECKOUT}-ee"' - '[[ -d "ee/" ]] || export TAG_TO_CHECKOUT="${TAG_TO_CHECKOUT}-ee"'
- retry 'git fetch https://gitlab.com/gitlab-org/$PROJECT_TO_CHECKOUT.git $TAG_TO_CHECKOUT' - retry 'git fetch https://gitlab.com/gitlab-org/$PROJECT_TO_CHECKOUT.git $TAG_TO_CHECKOUT'
...@@ -376,13 +366,28 @@ db:migrate-from-previous-major-version: ...@@ -376,13 +366,28 @@ db:migrate-from-previous-major-version:
- run_timed_command "bundle exec rake db:drop db:create db:structure:load db:migrate db:seed_fu" - run_timed_command "bundle exec rake db:drop db:create db:structure:load db:migrate db:seed_fu"
- git checkout -f $CI_COMMIT_SHA - git checkout -f $CI_COMMIT_SHA
- SETUP_DB=false USE_BUNDLE_INSTALL=true bash scripts/prepare_build.sh - SETUP_DB=false USE_BUNDLE_INSTALL=true bash scripts/prepare_build.sh
script:
- run_timed_command "bundle exec rake db:migrate" - run_timed_command "bundle exec rake db:migrate"
db:rollback: db:check-schema:
extends: .db-job-base extends:
- db:migrate-from-previous-major-version
- .rails:rules:ee-mr-and-default-branch-only
variables:
TAG_TO_CHECKOUT: "v14.4.0"
script: script:
- bundle exec rake db:migrate VERSION=20181228175414 - run_timed_command "bundle exec rake db:migrate"
- bundle exec rake db:migrate SKIP_SCHEMA_VERSION_CHECK=true - scripts/schema_changed.sh
- scripts/validate_migration_timestamps
db:check-migrations:
extends:
- .db-job-base
- .rails:rules:ee-and-foss-mr-with-migration
script:
- git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME --depth 20
- scripts/validate_migration_schema
allow_failure: true
db:gitlabcom-database-testing: db:gitlabcom-database-testing:
extends: .rails:rules:db:gitlabcom-database-testing extends: .rails:rules:db:gitlabcom-database-testing
......
#!/bin/sh #!/bin/sh
schema_changed() { if [ -n "$(git diff --name-only -- db/structure.sql)" ]; then
if [ ! -z "$(git diff --name-only -- db/structure.sql)" ]; then
printf "Schema changes are not cleanly committed to db/structure.sql\n" printf "Schema changes are not cleanly committed to db/structure.sql\n"
printf "The diff is as follows:\n" printf "The diff is as follows:\n"
diff=$(git diff -p --binary -- db/structure.sql) diff=$(git diff -p --binary -- db/structure.sql)
printf "%s" "$diff" printf "%s" "$diff"
exit 1 exit 1
else else
printf "Schema changes are correctly applied to db/structure.sql\n" printf "Schema changes are correctly applied to db/structure.sql\n"
fi fi
if [ ! -z "$(git add -A -n db/schema_migrations)" ]; then if [ -n "$(git add -A -n db/schema_migrations)" ]; then
printf "Schema version files have not been committed to the repository:\n" printf "Schema version files have not been committed to the repository:\n"
printf "The following files should be committed:\n" printf "The following files should be committed:\n"
diff=$(git add -A -n db/schema_migrations) diff=$(git add -A -n db/schema_migrations)
printf "%s" "$diff" printf "%s" "$diff"
exit 2 exit 2
else else
printf "Schema changes are correctly applied to db/structure.sql and db/schema_migrations/\n" printf "Schema changes are correctly applied to db/structure.sql and db/schema_migrations/\n"
fi fi
}
schema_changed
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment