From 122b0665731b4b8eb0d2e9bf4ad7bda54e162798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 8 Oct 2019 02:52:15 +0200 Subject: [PATCH 1/6] Remove already executed tasks These tasks were executed when upgading to version 0.19, 1.0.0-beta or 1.0.0. --- lib/migrations/reports.rb | 29 --------------- lib/tasks/budgets.rake | 10 ------ lib/tasks/consul.rake | 3 -- lib/tasks/db.rake | 5 --- lib/tasks/legislation_proposals.rake | 10 ------ lib/tasks/polls.rake | 10 ------ lib/tasks/proposal_actions.rake | 23 ------------ lib/tasks/proposals.rake | 27 -------------- lib/tasks/stats_and_results.rake | 7 ---- spec/lib/migrations/reports_spec.rb | 53 ---------------------------- spec/lib/tasks/db_spec.rb | 15 -------- 11 files changed, 192 deletions(-) delete mode 100644 lib/migrations/reports.rb delete mode 100644 lib/tasks/legislation_proposals.rake delete mode 100644 lib/tasks/polls.rake delete mode 100644 lib/tasks/proposals.rake delete mode 100644 lib/tasks/stats_and_results.rake delete mode 100644 spec/lib/migrations/reports_spec.rb delete mode 100644 spec/lib/tasks/db_spec.rb diff --git a/lib/migrations/reports.rb b/lib/migrations/reports.rb deleted file mode 100644 index 31a57eade..000000000 --- a/lib/migrations/reports.rb +++ /dev/null @@ -1,29 +0,0 @@ -class Migrations::Reports - def migrate - migrate_polls - migrate_budgets - end - - private - - def migrate_polls - Poll.find_each do |poll| - next unless poll.report.new_record? - - poll.report.update!( - results: poll.read_attribute(:results_enabled), - stats: poll.read_attribute(:stats_enabled), - advanced_stats: poll.read_attribute(:stats_enabled), - ) - end - - end - - def migrate_budgets - Budget.find_each do |budget| - next unless budget.report.new_record? - - budget.report.update!(results: true, stats: true, advanced_stats: true) - end - end -end diff --git a/lib/tasks/budgets.rake b/lib/tasks/budgets.rake index 2059bca4b..4a4e40203 100644 --- a/lib/tasks/budgets.rake +++ b/lib/tasks/budgets.rake @@ -1,14 +1,4 @@ namespace :budgets do - desc "Regenerate ballot_lines_count cache" - task calculate_ballot_lines: :environment do - ApplicationLogger.new.info "Calculating ballot lines" - - Budget::Ballot.find_each.with_index do |ballot, index| - Budget::Ballot.reset_counters ballot.id, :lines - print "." if (index % 10_000).zero? - end - end - namespace :email do desc "Sends emails to authors of selected investments" diff --git a/lib/tasks/consul.rake b/lib/tasks/consul.rake index 21acf1638..3bc71d27d 100644 --- a/lib/tasks/consul.rake +++ b/lib/tasks/consul.rake @@ -4,9 +4,6 @@ namespace :consul do desc "Runs tasks needed to upgrade from 1.0.0-beta to 1.0.0" task "execute_release_1.0.0_tasks": [ - "poll:generate_slugs", - "stats_and_results:migrate_to_reports", - "budgets:calculate_ballot_lines", "settings:remove_deprecated_settings", "settings:rename_setting_keys", "settings:add_new_settings", diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index 1d350a4bd..0c036c609 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -4,9 +4,4 @@ namespace :db do @avoid_log = args[:print_log] == "avoid_log" load(Rails.root.join("db", "dev_seeds.rb")) end - - desc "populate the default pages manually" - task pages: :environment do - load(Rails.root.join("db", "pages.rb")) - end end diff --git a/lib/tasks/legislation_proposals.rake b/lib/tasks/legislation_proposals.rake deleted file mode 100644 index ad2b7729e..000000000 --- a/lib/tasks/legislation_proposals.rake +++ /dev/null @@ -1,10 +0,0 @@ -namespace :legislation_proposals do - desc "Calculate cached votes score for existing legislation proposals" - task calculate_cached_votes_score: :environment do - Legislation::Proposal.find_each do |p| - p.update_column(:cached_votes_score, p.cached_votes_up - p.cached_votes_down) - print "." - end - puts "\nTask finished 🎉" - end -end diff --git a/lib/tasks/polls.rake b/lib/tasks/polls.rake deleted file mode 100644 index 2bd16c46f..000000000 --- a/lib/tasks/polls.rake +++ /dev/null @@ -1,10 +0,0 @@ -namespace :poll do - desc "Generate slugs polls" - task generate_slugs: :environment do - ApplicationLogger.new.info "Generating poll slugs" - - Poll.find_each do |poll| - poll.update_columns(slug: poll.generate_slug, updated_at: Time.current) if poll.generate_slug? - end - end -end diff --git a/lib/tasks/proposal_actions.rake b/lib/tasks/proposal_actions.rake index c84f86797..29aa69d7e 100644 --- a/lib/tasks/proposal_actions.rake +++ b/lib/tasks/proposal_actions.rake @@ -12,29 +12,6 @@ namespace :proposal_actions do end end - desc "Initialize proposal settings" - task initialize_settings: :environment do - %w[ - proposals.successful_proposal_id - proposals.poll_short_title - proposals.poll_description - proposals.poll_link - proposals.email_short_title - proposals.email_description - proposals.poster_short_title - proposals.poster_description - ].each do |key| - Setting[key] = nil if Setting.find_by(key: key).nil? - end - end - - desc "Publish all proposals" - task publish_all: :environment do - Proposal.draft.find_each do |proposal| - proposal.update_columns(published_at: proposal.created_at, updated_at: Time.current) - end - end - desc "Simulate successful proposal" task create_successful_proposal: :environment do expected_supports = [ diff --git a/lib/tasks/proposals.rake b/lib/tasks/proposals.rake deleted file mode 100644 index 6658b3cc1..000000000 --- a/lib/tasks/proposals.rake +++ /dev/null @@ -1,27 +0,0 @@ -namespace :proposals do - - desc "Move external_url to description" - task move_external_url_to_description: :environment do - include ActionView::Helpers::SanitizeHelper - include TextWithLinksHelper - - models = [Proposal, Legislation::Proposal] - - models.each do |model| - print "Move external_url to description for #{model}s" - model.find_each do |resource| - if resource.external_url.present? - Globalize.with_locale(I18n.default_locale) do - new_description = "#{resource.description}

#{sanitize_and_auto_link(resource.external_url)}

" - resource.description = new_description - resource.external_url = "" - resource.updated_at = Time.current - resource.save(validate: false) - print "." - end - end - end - puts " ✅ " - end - end -end diff --git a/lib/tasks/stats_and_results.rake b/lib/tasks/stats_and_results.rake deleted file mode 100644 index bc4cdacca..000000000 --- a/lib/tasks/stats_and_results.rake +++ /dev/null @@ -1,7 +0,0 @@ -namespace :stats_and_results do - desc "Migrates stats_enabled and results_enabled data to enabled reports" - task migrate_to_reports: :environment do - ApplicationLogger.new.info "Migrating stats and results" - Migrations::Reports.new.migrate - end -end diff --git a/spec/lib/migrations/reports_spec.rb b/spec/lib/migrations/reports_spec.rb deleted file mode 100644 index 6a746c4f9..000000000 --- a/spec/lib/migrations/reports_spec.rb +++ /dev/null @@ -1,53 +0,0 @@ -require "rails_helper" - -describe Migrations::Reports do - describe "#migrate" do - it "ignores polls with existing reports" do - create(:poll, results_enabled: true, stats_enabled: true) do |poll| - poll.write_attribute(:results_enabled, false) - poll.write_attribute(:stats_enabled, false) - poll.save - end - - Migrations::Reports.new.migrate - - expect(Poll.last.results_enabled).to be true - expect(Poll.last.stats_enabled).to be true - expect(Poll.last.advanced_stats_enabled).to be nil - end - - it "migrates polls with no reports" do - create(:poll) do |poll| - poll.write_attribute(:results_enabled, true) - poll.write_attribute(:stats_enabled, true) - poll.save - end - - Migrations::Reports.new.migrate - - expect(Poll.last.results_enabled).to be true - expect(Poll.last.stats_enabled).to be true - expect(Poll.last.advanced_stats_enabled).to be true - end - - it "ignores budgets with existing reports" do - create(:budget, results_enabled: false, stats_enabled: false, advanced_stats_enabled: false) - - Migrations::Reports.new.migrate - - expect(Budget.last.results_enabled).to be false - expect(Budget.last.stats_enabled).to be false - expect(Budget.last.advanced_stats_enabled).to be false - end - - it "enables results and stats for every budget" do - create(:budget) - - Migrations::Reports.new.migrate - - expect(Budget.last.results_enabled).to be true - expect(Budget.last.stats_enabled).to be true - expect(Budget.last.advanced_stats_enabled).to be true - end - end -end diff --git a/spec/lib/tasks/db_spec.rb b/spec/lib/tasks/db_spec.rb deleted file mode 100644 index 6c7b1d960..000000000 --- a/spec/lib/tasks/db_spec.rb +++ /dev/null @@ -1,15 +0,0 @@ -require "rails_helper" - -describe "rake db:pages" do - let :run_rake_task do - Rake.application.invoke_task("db:pages") - end - - it "seeds the database with the default custom pages" do - SiteCustomization::Page.destroy_all - expect(SiteCustomization::Page.count).to be 0 - - run_rake_task - expect(SiteCustomization::Page.count).to be 7 - end -end From 8fb44961e98e876b0f050ad17767b8a5ee243416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 8 Oct 2019 02:57:50 +0200 Subject: [PATCH 2/6] Remove tasks to rename/remove deprecated settings I was thinking of leaving these tasks empty, so in the future we could use them again if we rename or remove more settings. But since we haven't renamed nor removed any settings for more than seven months, and we've only used these tasks once, I'm simply removing the tasks. It's easy to add them back if we ever need them. --- lib/tasks/consul.rake | 2 - lib/tasks/settings.rake | 51 --------------- spec/lib/tasks/settings_spec.rb | 112 -------------------------------- 3 files changed, 165 deletions(-) delete mode 100644 spec/lib/tasks/settings_spec.rb diff --git a/lib/tasks/consul.rake b/lib/tasks/consul.rake index 3bc71d27d..01b146482 100644 --- a/lib/tasks/consul.rake +++ b/lib/tasks/consul.rake @@ -4,8 +4,6 @@ namespace :consul do desc "Runs tasks needed to upgrade from 1.0.0-beta to 1.0.0" task "execute_release_1.0.0_tasks": [ - "settings:remove_deprecated_settings", - "settings:rename_setting_keys", "settings:add_new_settings", "stats:generate" ] diff --git a/lib/tasks/settings.rake b/lib/tasks/settings.rake index ad800abb5..c434180ba 100644 --- a/lib/tasks/settings.rake +++ b/lib/tasks/settings.rake @@ -1,58 +1,7 @@ namespace :settings do - - desc "Remove deprecated settings" - task remove_deprecated_settings: :environment do - ApplicationLogger.new.info "Removing deprecated settings" - - deprecated_keys = [ - "place_name", - "banner-style.banner-style-one", - "banner-style.banner-style-two", - "banner-style.banner-style-three", - "banner-img.banner-img-one", - "banner-img.banner-img-two", - "banner-img.banner-img-three", - "verification_offices_url", - "feature.spending_proposals", - "feature.spending_proposal_features.phase1", - "feature.spending_proposal_features.phase2", - "feature.spending_proposal_features.phase3", - "feature.spending_proposal_features.voting_allowed", - "feature.spending_proposal_features.final_voting_allowed", - "feature.spending_proposal_features.open_results_page", - "feature.spending_proposal_features.valuation_allowed" - ] - - deprecated_keys.each do |key| - Setting.where(key: key).first&.destroy - end - end - - desc "Rename existing settings" - task rename_setting_keys: :environment do - ApplicationLogger.new.info "Renaming existing settings" - Setting.rename_key from: "map_latitude", to: "map.latitude" - Setting.rename_key from: "map_longitude", to: "map.longitude" - Setting.rename_key from: "map_zoom", to: "map.zoom" - - Setting.rename_key from: "feature.debates", to: "process.debates" - Setting.rename_key from: "feature.proposals", to: "process.proposals" - Setting.rename_key from: "feature.polls", to: "process.polls" - Setting.rename_key from: "feature.budgets", to: "process.budgets" - Setting.rename_key from: "feature.legislation", to: "process.legislation" - - Setting.rename_key from: "per_page_code_head", to: "html.per_page_code_head" - Setting.rename_key from: "per_page_code_body", to: "html.per_page_code_body" - - Setting.rename_key from: "feature.homepage.widgets.feeds.proposals", to: "homepage.widgets.feeds.proposals" - Setting.rename_key from: "feature.homepage.widgets.feeds.debates", to: "homepage.widgets.feeds.debates" - Setting.rename_key from: "feature.homepage.widgets.feeds.processes", to: "homepage.widgets.feeds.processes" - end - desc "Add new settings" task add_new_settings: :environment do ApplicationLogger.new.info "Adding new settings" Setting.add_new_settings end - end diff --git a/spec/lib/tasks/settings_spec.rb b/spec/lib/tasks/settings_spec.rb deleted file mode 100644 index 195ee0565..000000000 --- a/spec/lib/tasks/settings_spec.rb +++ /dev/null @@ -1,112 +0,0 @@ -require "rails_helper" - -describe Setting do - - context "Remove deprecated settings" do - - let :run_remove_deprecated_settings_task do - Rake::Task["settings:remove_deprecated_settings"].reenable - Rake.application.invoke_task "settings:remove_deprecated_settings" - end - - before do - Setting.create(key: "place_name", value: "City") - Setting.create(key: "banner-style.banner-style-one", value: "Style one") - Setting.create(key: "banner-style.banner-style-two", value: "Style two") - Setting.create(key: "banner-style.banner-style-three", value: "Style three") - Setting.create(key: "banner-img.banner-img-one", value: "Image 1") - Setting.create(key: "banner-img.banner-img-two", value: "Image 2") - Setting.create(key: "banner-img.banner-img-three", value: "Image 3") - Setting.create(key: "verification_offices_url", value: "http://offices.url") - Setting.create(key: "not_deprecated", value: "Setting not deprecated") - run_remove_deprecated_settings_task - end - - it "Rake only removes deprecated settings" do - expect(Setting.where(key: "place_name").count).to eq(0) - expect(Setting.where(key: "banner-style.banner-style-one").count).to eq(0) - expect(Setting.where(key: "banner-style.banner-style-two").count).to eq(0) - expect(Setting.where(key: "banner-style.banner-style-three").count).to eq(0) - expect(Setting.where(key: "banner-img.banner-img-one").count).to eq(0) - expect(Setting.where(key: "banner-img.banner-img-two").count).to eq(0) - expect(Setting.where(key: "banner-img.banner-img-three").count).to eq(0) - expect(Setting.where(key: "verification_offices_url").count).to eq(0) - expect(Setting.where(key: "not_deprecated").count).to eq(1) - end - end - - describe "#rename_setting_keys" do - - let :run_rake_task do - Rake::Task["settings:rename_setting_keys"].reenable - Rake.application.invoke_task "settings:rename_setting_keys" - end - - let :old_keys do - %w[map_latitude map_longitude map_zoom feature.debates feature.proposals feature.polls - feature.budgets feature.legislation per_page_code_head per_page_code_body - feature.homepage.widgets.feeds.proposals feature.homepage.widgets.feeds.debates - feature.homepage.widgets.feeds.processes] - end - - let :new_keys do - %w[map.latitude map.longitude map.zoom process.debates process.proposals process.polls - process.budgets process.legislation html.per_page_code_head html.per_page_code_body - homepage.widgets.feeds.proposals homepage.widgets.feeds.debates - homepage.widgets.feeds.processes] - end - - context "with existing old settings" do - it "rename all settings keys keeping the same value" do - Setting.destroy_all - old_keys.each { |old_key| Setting[old_key] = "old value" } - - run_rake_task - - new_keys.each do |new_key| - expect(Setting[new_key]).to eq "old value" - end - - old_keys.each do |old_key| - expect(Setting.where(key: old_key)).not_to exist - end - end - end - - context "without existing old settings" do - it "initializes all settings with null value" do - Setting.destroy_all - - run_rake_task - - new_keys.each do |new_key| - expect(Setting[new_key]).to eq nil - end - - old_keys.each do |old_key| - expect(Setting.where(key: old_key)).not_to exist - end - end - end - - context "with already existing new settings" do - it "does not change the value of the new settings even if the old setting exist" do - Setting.destroy_all - old_keys.each { |old_key| Setting[old_key] = "old value" } - new_keys.each { |new_key| Setting[new_key] = "new value" } - - run_rake_task - - new_keys.each do |new_key| - expect(Setting[new_key]).to eq "new value" - end - - old_keys.each do |old_key| - expect(Setting.where(key: old_key)).not_to exist - end - end - end - - end - -end From 7bb39c8e4e552ac312a8163abf91e8a870f8cf4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 8 Oct 2019 03:36:03 +0200 Subject: [PATCH 3/6] Execute `add_new_settings` on every release Although it's already executed when deploying with capistrano, heroku installations don't use capistrano for deployment, so we're also executing it when upgrading. This isn't a one-time task, so it makes sense to have it executed on every release. --- lib/tasks/consul.rake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/tasks/consul.rake b/lib/tasks/consul.rake index 01b146482..d2969ea50 100644 --- a/lib/tasks/consul.rake +++ b/lib/tasks/consul.rake @@ -1,10 +1,9 @@ namespace :consul do desc "Runs tasks needed to upgrade to the latest version" - task execute_release_tasks: "execute_release_1.0.0_tasks" + task execute_release_tasks: ["settings:add_new_settings", "execute_release_1.0.0_tasks"] desc "Runs tasks needed to upgrade from 1.0.0-beta to 1.0.0" task "execute_release_1.0.0_tasks": [ - "settings:add_new_settings", "stats:generate" ] end From acbad387491befb097710865bb19da9f7d5555f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 8 Oct 2019 03:10:00 +0200 Subject: [PATCH 4/6] Update `execute_release_tasks` task It now contains tasks we've added after version 1.0.0 --- lib/tasks/consul.rake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/tasks/consul.rake b/lib/tasks/consul.rake index d2969ea50..1763575e5 100644 --- a/lib/tasks/consul.rake +++ b/lib/tasks/consul.rake @@ -1,9 +1,9 @@ namespace :consul do desc "Runs tasks needed to upgrade to the latest version" - task execute_release_tasks: ["settings:add_new_settings", "execute_release_1.0.0_tasks"] + task execute_release_tasks: ["settings:add_new_settings", "execute_release_1.1.0_tasks"] - desc "Runs tasks needed to upgrade from 1.0.0-beta to 1.0.0" - task "execute_release_1.0.0_tasks": [ - "stats:generate" + desc "Runs tasks needed to upgrade from 1.0.0 to 1.1.0" + task "execute_release_1.1.0_tasks": [ + "budgets:set_original_heading_id" ] end From 4fad6f16f6042f83e606b94ed58704099dc46860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 8 Oct 2019 03:24:00 +0200 Subject: [PATCH 5/6] Make `set_original_heading_id` task idempotent This way there'll be no side effects if accidentally executed on data already having the `original_heading_id`. --- lib/tasks/budgets.rake | 4 +++- spec/lib/tasks/budgets_spec.rb | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/tasks/budgets.rake b/lib/tasks/budgets.rake index 4a4e40203..68ce74d93 100644 --- a/lib/tasks/budgets.rake +++ b/lib/tasks/budgets.rake @@ -17,7 +17,9 @@ namespace :budgets do task set_original_heading_id: :environment do puts "Starting" Budget::Investment.find_each do |investment| - investment.update_column(:original_heading_id, investment.heading_id) + unless investment.original_heading_id.present? + investment.update_column(:original_heading_id, investment.heading_id) + end print "." end puts "Finished" diff --git a/spec/lib/tasks/budgets_spec.rb b/spec/lib/tasks/budgets_spec.rb index 67ec3e63c..58848a267 100644 --- a/spec/lib/tasks/budgets_spec.rb +++ b/spec/lib/tasks/budgets_spec.rb @@ -3,6 +3,7 @@ require "rails_helper" describe Budget do let(:run_rake_task) do + Rake::Task["budgets:set_original_heading_id"].reenable Rake.application.invoke_task("budgets:set_original_heading_id") end @@ -19,4 +20,17 @@ describe Budget do expect(investment.original_heading_id).to equal(heading.id) end + it "does not overwrite original_heading_id when already present" do + original_heading = create(:budget_heading) + new_heading = create(:budget_heading) + investment = create(:budget_investment, heading: original_heading) + investment.update(heading: new_heading) + + expect(investment.original_heading_id).to eq original_heading.id + + run_rake_task + investment.reload + + expect(investment.original_heading_id).to eq original_heading.id + end end From 0a2efb1d805bbd63834b26a46ac83420acf2a21f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Tue, 8 Oct 2019 20:37:25 +0200 Subject: [PATCH 6/6] Use application logger in set_original_heading_id The pull request adding the original heading was done before we started using `ApplicationLogger` in rake tasks. --- lib/tasks/budgets.rake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/tasks/budgets.rake b/lib/tasks/budgets.rake index 68ce74d93..eb4d49b7c 100644 --- a/lib/tasks/budgets.rake +++ b/lib/tasks/budgets.rake @@ -15,14 +15,13 @@ namespace :budgets do desc "Update investments original_heading_id with current heading_id" task set_original_heading_id: :environment do - puts "Starting" + ApplicationLogger.new.info "Setting original_heading_id to investments" Budget::Investment.find_each do |investment| unless investment.original_heading_id.present? investment.update_column(:original_heading_id, investment.heading_id) end print "." end - puts "Finished" end end