diff options
Diffstat (limited to 'app/models/ci')
-rw-r--r-- | app/models/ci/build.rb | 8 | ||||
-rw-r--r-- | app/models/ci/pipeline.rb | 13 | ||||
-rw-r--r-- | app/models/ci/pipeline_schedule.rb (renamed from app/models/ci/trigger_schedule.rb) | 29 | ||||
-rw-r--r-- | app/models/ci/trigger.rb | 7 |
4 files changed, 33 insertions, 24 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 971ab7cb0ee..760ec8e5919 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -124,8 +124,8 @@ module Ci success? || failed? || canceled? end - def retried? - !self.pipeline.statuses.latest.include?(self) + def latest? + !retried? end def expanded_environment_name @@ -300,8 +300,8 @@ module Ci def execute_hooks return unless project build_data = Gitlab::DataBuilder::Build.build(self) - project.execute_hooks(build_data.dup, :build_hooks) - project.execute_services(build_data.dup, :build_hooks) + project.execute_hooks(build_data.dup, :job_hooks) + project.execute_services(build_data.dup, :job_hooks) PagesService.new(build_data).execute project.running_or_pending_build_count(force: true) end diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index 4be4aa9ffe2..81c30b0e077 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -9,6 +9,7 @@ module Ci belongs_to :project belongs_to :user belongs_to :auto_canceled_by, class_name: 'Ci::Pipeline' + belongs_to :pipeline_schedule, class_name: 'Ci::PipelineSchedule' has_many :auto_canceled_pipelines, class_name: 'Ci::Pipeline', foreign_key: 'auto_canceled_by_id' has_many :auto_canceled_jobs, class_name: 'CommitStatus', foreign_key: 'auto_canceled_by_id' @@ -17,6 +18,10 @@ module Ci has_many :builds, foreign_key: :commit_id has_many :trigger_requests, dependent: :destroy, foreign_key: :commit_id + # Merge requests for which the current pipeline is running against + # the merge request's latest commit. + has_many :merge_requests, foreign_key: "head_pipeline_id" + has_many :pending_builds, -> { pending }, foreign_key: :commit_id, class_name: 'Ci::Build' has_many :retryable_builds, -> { latest.failed_or_canceled }, foreign_key: :commit_id, class_name: 'Ci::Build' has_many :cancelable_statuses, -> { cancelable }, foreign_key: :commit_id, class_name: 'CommitStatus' @@ -380,14 +385,6 @@ module Ci project.execute_services(data, :pipeline_hooks) end - # Merge requests for which the current pipeline is running against - # the merge request's latest commit. - def merge_requests - @merge_requests ||= project.merge_requests - .where(source_branch: self.ref) - .select { |merge_request| merge_request.head_pipeline.try(:id) == self.id } - end - # All the merge requests for which the current pipeline runs/ran against def all_merge_requests @all_merge_requests ||= project.merge_requests.where(source_branch: ref) diff --git a/app/models/ci/trigger_schedule.rb b/app/models/ci/pipeline_schedule.rb index 012a18eb439..cf6e53c4ca4 100644 --- a/app/models/ci/trigger_schedule.rb +++ b/app/models/ci/pipeline_schedule.rb @@ -1,24 +1,43 @@ module Ci - class TriggerSchedule < ActiveRecord::Base + class PipelineSchedule < ActiveRecord::Base extend Ci::Model include Importable acts_as_paranoid belongs_to :project - belongs_to :trigger + belongs_to :owner, class_name: 'User' + has_one :last_pipeline, -> { order(id: :desc) }, class_name: 'Ci::Pipeline' + has_many :pipelines - validates :trigger, presence: { unless: :importing? } validates :cron, unless: :importing_or_inactive?, cron: true, presence: { unless: :importing_or_inactive? } validates :cron_timezone, cron_timezone: true, presence: { unless: :importing_or_inactive? } validates :ref, presence: { unless: :importing_or_inactive? } + validates :description, presence: true before_save :set_next_run_at scope :active, -> { where(active: true) } + scope :inactive, -> { where(active: false) } + + def owned_by?(current_user) + owner == current_user + end + + def inactive? + !active? + end + + def deactivate! + update_attribute(:active, false) + end def importing_or_inactive? - importing? || !active? + importing? || inactive? + end + + def runnable_by_owner? + Ability.allowed?(owner, :create_pipeline, project) end def set_next_run_at @@ -32,7 +51,7 @@ module Ci end def real_next_run( - worker_cron: Settings.cron_jobs['trigger_schedule_worker']['cron'], + worker_cron: Settings.cron_jobs['pipeline_schedule_worker']['cron'], worker_time_zone: Time.zone.name) Gitlab::Ci::CronParser.new(worker_cron, worker_time_zone) .next_time_from(next_run_at) diff --git a/app/models/ci/trigger.rb b/app/models/ci/trigger.rb index 2f64f70685a..6df41a3f301 100644 --- a/app/models/ci/trigger.rb +++ b/app/models/ci/trigger.rb @@ -8,14 +8,11 @@ module Ci belongs_to :owner, class_name: "User" has_many :trigger_requests - has_one :trigger_schedule, dependent: :destroy validates :token, presence: true, uniqueness: true before_validation :set_default_values - accepts_nested_attributes_for :trigger_schedule - def set_default_values self.token = SecureRandom.hex(15) if self.token.blank? end @@ -39,9 +36,5 @@ module Ci def can_access_project? self.owner_id.blank? || Ability.allowed?(self.owner, :create_build, project) end - - def trigger_schedule - super || build_trigger_schedule(project: project) - end end end |