Fixed strcture for db change
This commit is contained in:
parent
c426763c42
commit
3d1bc4a44c
6 changed files with 22 additions and 19 deletions
|
@ -2,14 +2,14 @@ module Ci
|
|||
class CreatePipelineService < BaseService
|
||||
attr_reader :pipeline
|
||||
|
||||
def execute(ignore_skip_ci: false, save_on_errors: true, trigger_request: nil, scheduled_trigger: false)
|
||||
def execute(ignore_skip_ci: false, save_on_errors: true, trigger_request: nil)
|
||||
@pipeline = Ci::Pipeline.new(
|
||||
project: project,
|
||||
ref: ref,
|
||||
sha: sha,
|
||||
before_sha: before_sha,
|
||||
tag: tag?,
|
||||
trigger_requests: (scheduled_trigger) ? [] : Array(trigger_request),
|
||||
trigger_requests: Array(trigger_request),
|
||||
user: current_user
|
||||
)
|
||||
|
||||
|
@ -17,10 +17,8 @@ module Ci
|
|||
return error('Pipeline is disabled')
|
||||
end
|
||||
|
||||
unless scheduled_trigger
|
||||
unless trigger_request || can?(current_user, :create_pipeline, project)
|
||||
return error('Insufficient permissions to create a new pipeline')
|
||||
end
|
||||
unless trigger_request || can?(current_user, :create_pipeline, project)
|
||||
return error('Insufficient permissions to create a new pipeline')
|
||||
end
|
||||
|
||||
unless branch? || tag?
|
||||
|
|
|
@ -3,14 +3,15 @@ class TriggerScheduleWorker
|
|||
include CronjobQueue
|
||||
|
||||
def perform
|
||||
Ci::TriggerSchedule.where("next_run_at < ?", Time.now).find_each do |trigger|
|
||||
Ci::TriggerSchedule.where("next_run_at < ?", Time.now).find_each do |trigger_schedule|
|
||||
begin
|
||||
Ci::CreatePipelineService.new(trigger.project, trigger.owner, ref: trigger.ref).
|
||||
execute(ignore_skip_ci: true, scheduled_trigger: true)
|
||||
Ci::CreateTriggerRequestService.new.execute(trigger_schedule.trigger.project,
|
||||
trigger_schedule.trigger,
|
||||
trigger_schedule.trigger.ref)
|
||||
rescue => e
|
||||
Rails.logger.error "#{trigger.id}: Failed to trigger job: #{e.message}"
|
||||
Rails.logger.error "#{trigger_schedule.id}: Failed to trigger_schedule job: #{e.message}"
|
||||
ensure
|
||||
trigger.schedule_next_run!
|
||||
trigger_schedule.schedule_next_run!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
FactoryGirl.define do
|
||||
factory :ci_trigger_without_token, class: Ci::Trigger do
|
||||
factory :ci_trigger do
|
||||
token 'token'
|
||||
token { SecureRandom.hex(10) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -214,9 +214,5 @@ describe Ci::CreatePipelineService, services: true do
|
|||
expect(Environment.find_by(name: "review/master")).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'when scheduled_trigger' do
|
||||
# TODO: spec if approved
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -8,18 +8,26 @@ describe TriggerScheduleWorker do
|
|||
end
|
||||
|
||||
context 'when there is a scheduled trigger within next_run_at' do
|
||||
let(:user) { create(:user) }
|
||||
let(:project) { create(:project) }
|
||||
let(:trigger) { create(:ci_trigger, owner: user, project: project, ref: 'master') }
|
||||
let!(:trigger_schedule) { create(:ci_trigger_schedule, :cron_nightly_build, :force_triggable, trigger: trigger, project: project) }
|
||||
|
||||
before do
|
||||
create(:ci_trigger_schedule, :cron_nightly_build, :force_triggable)
|
||||
worker.perform
|
||||
end
|
||||
|
||||
it 'creates a new trigger request' do
|
||||
expect(Ci::TriggerRequest.first.trigger_id).to eq(trigger.id)
|
||||
end
|
||||
|
||||
it 'creates a new pipeline' do
|
||||
expect(Ci::Pipeline.last.status).to eq('pending')
|
||||
end
|
||||
|
||||
it 'schedules next_run_at' do
|
||||
trigger_schedule2 = create(:ci_trigger_schedule, :cron_nightly_build)
|
||||
expect(Ci::TriggerSchedule.last.next_run_at).to eq(trigger_schedule2.next_run_at)
|
||||
next_time = Ci::CronParser.new('0 1 * * *', 'Europe/Istanbul').next_time_from_now
|
||||
expect(Ci::TriggerSchedule.last.next_run_at).to eq(next_time)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue