diff options
-rw-r--r-- | app/models/ci/trigger_schedule.rb | 4 | ||||
-rw-r--r-- | app/validators/cron_timezone_validator.rb (renamed from app/validators/cron_time_zone_validator.rb) | 10 | ||||
-rw-r--r-- | app/validators/cron_validator.rb | 2 | ||||
-rw-r--r-- | db/migrate/20170329095907_create_ci_trigger_schedules.rb | 16 | ||||
-rw-r--r-- | db/migrate/20170404163427_add_trigger_id_foreign_key.rb | 15 | ||||
-rw-r--r-- | db/schema.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/cron_parser.rb | 14 | ||||
-rw-r--r-- | spec/factories/ci/trigger_schedules.rb | 8 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/cron_parser_spec.rb | 28 | ||||
-rw-r--r-- | spec/lib/gitlab/import_export/safe_model_attributes.yml | 2 | ||||
-rw-r--r-- | spec/models/ci/trigger_schedule_spec.rb | 2 | ||||
-rw-r--r-- | spec/workers/trigger_schedule_worker_spec.rb | 2 |
12 files changed, 56 insertions, 49 deletions
diff --git a/app/models/ci/trigger_schedule.rb b/app/models/ci/trigger_schedule.rb index 9b1dfce969a..d18dbea284e 100644 --- a/app/models/ci/trigger_schedule.rb +++ b/app/models/ci/trigger_schedule.rb @@ -12,13 +12,13 @@ module Ci validates :trigger, presence: { unless: :importing? } validates :cron, cron: true, presence: { unless: :importing? } - validates :cron_time_zone, cron_time_zone: true, presence: { unless: :importing? } + validates :cron_timezone, cron_timezone: true, presence: { unless: :importing? } validates :ref, presence: { unless: :importing? } after_create :schedule_next_run! def schedule_next_run! - next_time = Gitlab::Ci::CronParser.new(cron, cron_time_zone).next_time_from(Time.now) + next_time = Gitlab::Ci::CronParser.new(cron, cron_timezone).next_time_from(Time.now) update!(next_run_at: next_time) if next_time.present? end end diff --git a/app/validators/cron_time_zone_validator.rb b/app/validators/cron_timezone_validator.rb index 9d4bbe1d458..542c7d006ad 100644 --- a/app/validators/cron_time_zone_validator.rb +++ b/app/validators/cron_timezone_validator.rb @@ -1,9 +1,9 @@ -# CronTimeZoneValidator +# CronTimezoneValidator # -# Custom validator for CronTimeZone. -class CronTimeZoneValidator < ActiveModel::EachValidator +# Custom validator for CronTimezone. +class CronTimezoneValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) - cron_parser = Gitlab::Ci::CronParser.new(record.cron, record.cron_time_zone) - record.errors.add(attribute, " is invalid syntax") unless cron_parser.cron_time_zone_valid? + cron_parser = Gitlab::Ci::CronParser.new(record.cron, record.cron_timezone) + record.errors.add(attribute, " is invalid syntax") unless cron_parser.cron_timezone_valid? end end diff --git a/app/validators/cron_validator.rb b/app/validators/cron_validator.rb index cc07011d56b..981fade47a6 100644 --- a/app/validators/cron_validator.rb +++ b/app/validators/cron_validator.rb @@ -3,7 +3,7 @@ # Custom validator for Cron. class CronValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) - cron_parser = Gitlab::Ci::CronParser.new(record.cron, record.cron_time_zone) + cron_parser = Gitlab::Ci::CronParser.new(record.cron, record.cron_timezone) record.errors.add(attribute, " is invalid syntax") unless cron_parser.cron_valid? end end diff --git a/db/migrate/20170329095907_create_ci_trigger_schedules.rb b/db/migrate/20170329095907_create_ci_trigger_schedules.rb index 3dcd05175c0..cfcfa27ebb5 100644 --- a/db/migrate/20170329095907_create_ci_trigger_schedules.rb +++ b/db/migrate/20170329095907_create_ci_trigger_schedules.rb @@ -3,9 +3,7 @@ class CreateCiTriggerSchedules < ActiveRecord::Migration DOWNTIME = false - disable_ddl_transaction! - - def up + def change create_table :ci_trigger_schedules do |t| t.integer "project_id" t.integer "trigger_id", null: false @@ -13,17 +11,11 @@ class CreateCiTriggerSchedules < ActiveRecord::Migration t.datetime "created_at" t.datetime "updated_at" t.string "cron" - t.string "cron_time_zone" + t.string "cron_timezone" t.datetime "next_run_at" end - add_index :ci_trigger_schedules, ["next_run_at"], name: "index_ci_trigger_schedules_on_next_run_at", using: :btree - add_index :ci_trigger_schedules, ["project_id"], name: "index_ci_trigger_schedules_on_project_id", using: :btree - add_concurrent_foreign_key :ci_trigger_schedules, :ci_triggers, column: :trigger_id, on_delete: :cascade - end - - def down - remove_foreign_key :ci_trigger_schedules, column: :trigger_id - drop_table :ci_trigger_schedules + add_index :ci_trigger_schedules, :next_run_at + add_index :ci_trigger_schedules, :project_id end end diff --git a/db/migrate/20170404163427_add_trigger_id_foreign_key.rb b/db/migrate/20170404163427_add_trigger_id_foreign_key.rb new file mode 100644 index 00000000000..6679a95ca11 --- /dev/null +++ b/db/migrate/20170404163427_add_trigger_id_foreign_key.rb @@ -0,0 +1,15 @@ +class AddTriggerIdForeignKey < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_foreign_key :ci_trigger_schedules, :ci_triggers, column: :trigger_id, on_delete: :cascade + end + + def down + remove_foreign_key :ci_trigger_schedules, column: :trigger_id + end +end diff --git a/db/schema.rb b/db/schema.rb index 7d9f969c2e1..a564a4b6a12 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -307,7 +307,7 @@ ActiveRecord::Schema.define(version: 20170405080720) do t.datetime "created_at" t.datetime "updated_at" t.string "cron" - t.string "cron_time_zone" + t.string "cron_timezone" t.datetime "next_run_at" end diff --git a/lib/gitlab/ci/cron_parser.rb b/lib/gitlab/ci/cron_parser.rb index 69dd8ad0fce..d1877b76598 100644 --- a/lib/gitlab/ci/cron_parser.rb +++ b/lib/gitlab/ci/cron_parser.rb @@ -4,13 +4,13 @@ module Gitlab VALID_SYNTAX_SAMPLE_TIME_ZONE = 'UTC'.freeze VALID_SYNTAX_SAMPLE_CRON = '* * * * *'.freeze - def initialize(cron, cron_time_zone = 'UTC') + def initialize(cron, cron_timezone = 'UTC') @cron = cron - @cron_time_zone = cron_time_zone + @cron_timezone = cron_timezone end def next_time_from(time) - cron_line = try_parse_cron(@cron, @cron_time_zone) + cron_line = try_parse_cron(@cron, @cron_timezone) cron_line.next_time(time).in_time_zone(Time.zone) if cron_line.present? end @@ -18,14 +18,14 @@ module Gitlab try_parse_cron(@cron, VALID_SYNTAX_SAMPLE_TIME_ZONE).present? end - def cron_time_zone_valid? - try_parse_cron(VALID_SYNTAX_SAMPLE_CRON, @cron_time_zone).present? + def cron_timezone_valid? + try_parse_cron(VALID_SYNTAX_SAMPLE_CRON, @cron_timezone).present? end private - def try_parse_cron(cron, cron_time_zone) - Rufus::Scheduler.parse("#{cron} #{cron_time_zone}") + def try_parse_cron(cron, cron_timezone) + Rufus::Scheduler.parse("#{cron} #{cron_timezone}") rescue # noop end diff --git a/spec/factories/ci/trigger_schedules.rb b/spec/factories/ci/trigger_schedules.rb index 9c16d45b49a..49d2b29727f 100644 --- a/spec/factories/ci/trigger_schedules.rb +++ b/spec/factories/ci/trigger_schedules.rb @@ -2,7 +2,7 @@ FactoryGirl.define do factory :ci_trigger_schedule, class: Ci::TriggerSchedule do trigger factory: :ci_trigger_for_trigger_schedule cron '0 1 * * *' - cron_time_zone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE + cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE after(:build) do |trigger_schedule, evaluator| trigger_schedule.update!(project: trigger_schedule.trigger.project) @@ -16,17 +16,17 @@ FactoryGirl.define do trait :nightly do cron '0 1 * * *' - cron_time_zone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE + cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE end trait :weekly do cron '0 1 * * 6' - cron_time_zone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE + cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE end trait :monthly do cron '0 1 22 * *' - cron_time_zone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE + cron_timezone Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_TIME_ZONE end end end diff --git a/spec/lib/gitlab/ci/cron_parser_spec.rb b/spec/lib/gitlab/ci/cron_parser_spec.rb index 1cdd8c1d2e7..b07b84027fc 100644 --- a/spec/lib/gitlab/ci/cron_parser_spec.rb +++ b/spec/lib/gitlab/ci/cron_parser_spec.rb @@ -6,12 +6,12 @@ describe Gitlab::Ci::CronParser do end describe '#next_time_from' do - subject { described_class.new(cron, cron_time_zone).next_time_from(Time.now) } + subject { described_class.new(cron, cron_timezone).next_time_from(Time.now) } - context 'when cron and cron_time_zone are valid' do + context 'when cron and cron_timezone are valid' do context 'when specific time' do let(:cron) { '3 4 5 6 *' } - let(:cron_time_zone) { 'UTC' } + let(:cron_timezone) { 'UTC' } it_behaves_like "returns time in the future" @@ -25,7 +25,7 @@ describe Gitlab::Ci::CronParser do context 'when specific day of week' do let(:cron) { '* * * * 0' } - let(:cron_time_zone) { 'UTC' } + let(:cron_timezone) { 'UTC' } it_behaves_like "returns time in the future" @@ -36,7 +36,7 @@ describe Gitlab::Ci::CronParser do context 'when slash used' do let(:cron) { '*/10 */6 */10 */10 *' } - let(:cron_time_zone) { 'UTC' } + let(:cron_timezone) { 'UTC' } it_behaves_like "returns time in the future" @@ -50,7 +50,7 @@ describe Gitlab::Ci::CronParser do context 'when range used' do let(:cron) { '0,20,40 * 1-5 * *' } - let(:cron_time_zone) { 'UTC' } + let(:cron_timezone) { 'UTC' } it_behaves_like "returns time in the future" @@ -60,9 +60,9 @@ describe Gitlab::Ci::CronParser do end end - context 'when cron_time_zone is US/Pacific' do + context 'when cron_timezone is US/Pacific' do let(:cron) { '0 0 * * *' } - let(:cron_time_zone) { 'US/Pacific' } + let(:cron_timezone) { 'US/Pacific' } it_behaves_like "returns time in the future" @@ -72,9 +72,9 @@ describe Gitlab::Ci::CronParser do end end - context 'when cron and cron_time_zone are invalid' do + context 'when cron and cron_timezone are invalid' do let(:cron) { 'invalid_cron' } - let(:cron_time_zone) { 'invalid_cron_time_zone' } + let(:cron_timezone) { 'invalid_cron_timezone' } it 'returns nil' do is_expected.to be_nil @@ -98,17 +98,17 @@ describe Gitlab::Ci::CronParser do end end - describe '#cron_time_zone_valid?' do - subject { described_class.new(Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_CRON, cron_time_zone).cron_time_zone_valid? } + describe '#cron_timezone_valid?' do + subject { described_class.new(Gitlab::Ci::CronParser::VALID_SYNTAX_SAMPLE_CRON, cron_timezone).cron_timezone_valid? } context 'when cron is valid' do - let(:cron_time_zone) { 'Europe/Istanbul' } + let(:cron_timezone) { 'Europe/Istanbul' } it { is_expected.to eq(true) } end context 'when cron is invalid' do - let(:cron_time_zone) { 'Invalid-zone' } + let(:cron_timezone) { 'Invalid-zone' } it { is_expected.to eq(false) } end diff --git a/spec/lib/gitlab/import_export/safe_model_attributes.yml b/spec/lib/gitlab/import_export/safe_model_attributes.yml index 42082ff3dee..0c43c5662e8 100644 --- a/spec/lib/gitlab/import_export/safe_model_attributes.yml +++ b/spec/lib/gitlab/import_export/safe_model_attributes.yml @@ -249,7 +249,7 @@ Ci::TriggerSchedule: - created_at - updated_at - cron -- cron_time_zone +- cron_timezone - next_run_at DeployKey: - id diff --git a/spec/models/ci/trigger_schedule_spec.rb b/spec/models/ci/trigger_schedule_spec.rb index 9a4bf122bf0..fc01d702f65 100644 --- a/spec/models/ci/trigger_schedule_spec.rb +++ b/spec/models/ci/trigger_schedule_spec.rb @@ -13,7 +13,7 @@ describe Ci::TriggerSchedule, models: true do end it 'updates next_run_at' do - next_time = Gitlab::Ci::CronParser.new(trigger_schedule.cron, trigger_schedule.cron_time_zone).next_time_from(Time.now) + next_time = Gitlab::Ci::CronParser.new(trigger_schedule.cron, trigger_schedule.cron_timezone).next_time_from(Time.now) expect(Ci::TriggerSchedule.last.next_run_at).to eq(next_time) end end diff --git a/spec/workers/trigger_schedule_worker_spec.rb b/spec/workers/trigger_schedule_worker_spec.rb index 75a98e42ac5..9d8fd9305ca 100644 --- a/spec/workers/trigger_schedule_worker_spec.rb +++ b/spec/workers/trigger_schedule_worker_spec.rb @@ -23,7 +23,7 @@ describe TriggerScheduleWorker do end it 'updates next_run_at' do - next_time = Gitlab::Ci::CronParser.new(trigger_schedule.cron, trigger_schedule.cron_time_zone).next_time_from(Time.now) + next_time = Gitlab::Ci::CronParser.new(trigger_schedule.cron, trigger_schedule.cron_timezone).next_time_from(Time.now) expect(Ci::TriggerSchedule.last.next_run_at).to eq(next_time) end end |