diff options
author | Robert Speicher <robert@gitlab.com> | 2016-07-20 20:03:04 +0300 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2016-07-20 20:03:04 +0300 |
commit | cf6de7dae95570c95e8e0590770d62d32a371bf6 (patch) | |
tree | 6e9ab9c2b419baca51eb1dfdb4918be05aa9d734 /lib/tasks | |
parent | 6f8156cea587f08e11ad578bec012af103cc82e4 (diff) | |
parent | a8bfe20d0dbc79616ad69b0e9c1c985ba1887407 (diff) |
Merge branch 'migration-downtime-tags' into 'master'
Added checks for migration downtime
This adds a set of checks that check/list which migrations require downtime (or not). It also comes with a CI task that fails should a migration not be tagged properly.
Fixes #14545
See merge request !4911
Diffstat (limited to 'lib/tasks')
-rw-r--r-- | lib/tasks/downtime_check.rake | 26 | ||||
-rw-r--r-- | lib/tasks/gitlab/db.rake | 15 |
2 files changed, 41 insertions, 0 deletions
diff --git a/lib/tasks/downtime_check.rake b/lib/tasks/downtime_check.rake new file mode 100644 index 00000000000..30a2e9be5ce --- /dev/null +++ b/lib/tasks/downtime_check.rake @@ -0,0 +1,26 @@ +desc 'Checks if migrations in a branch require downtime' +task downtime_check: :environment do + # First we'll want to make sure we're comparing with the right upstream + # repository/branch. + current_branch = `git rev-parse --abbrev-ref HEAD`.strip + + # Either the developer ran this task directly on the master branch, or they're + # making changes directly on the master branch. + if current_branch == 'master' + if defined?(Gitlab::License) + repo = 'gitlab-ee' + else + repo = 'gitlab-ce' + end + + `git fetch https://gitlab.com/gitlab-org/#{repo}.git --depth 1` + + compare_with = 'FETCH_HEAD' + # The developer is working on a different branch, in this case we can just + # compare with the master branch. + else + compare_with = 'master' + end + + Rake::Task['gitlab:db:downtime_check'].invoke(compare_with) +end diff --git a/lib/tasks/gitlab/db.rake b/lib/tasks/gitlab/db.rake index 7230b9485be..0ec19e1a625 100644 --- a/lib/tasks/gitlab/db.rake +++ b/lib/tasks/gitlab/db.rake @@ -46,5 +46,20 @@ namespace :gitlab do Rake::Task['db:seed_fu'].invoke end end + + desc 'Checks if migrations require downtime or not' + task :downtime_check, [:ref] => :environment do |_, args| + abort 'You must specify a Git reference to compare with' unless args[:ref] + + require 'shellwords' + + ref = Shellwords.escape(args[:ref]) + + migrations = `git diff #{ref}.. --name-only -- db/migrate`.lines. + map { |file| Rails.root.join(file.strip).to_s }. + select { |file| File.file?(file) } + + Gitlab::DowntimeCheck.new.check_and_print(migrations) + end end end |