• Kamil Trzcinski's avatar
    Pre-create all builds for Pipeline when a trigger is received · 39203f1a
    Kamil Trzcinski authored
    This change simplifies a Pipeline processing by introducing a special new status: created.
    This status is used for all builds that are created for a pipeline.
    We are then processing next stages and queueing some of the builds (created -> pending) or skipping them (created -> skipped).
    This makes it possible to simplify and solve a few ordering problems with how previously builds were scheduled.
    This also allows us to visualise a full pipeline (with created builds).
    
    This also removes an after_touch used for updating a pipeline state parameters.
    Right now in various places we explicitly call a reload_status! on pipeline to force it to be updated and saved.
    39203f1a
pipelines.rb 1.37 KB
# == Schema Information
#
# Table name: commits
#
#  id             :integer          not null, primary key
#  project_id     :integer
#  ref            :string(255)
#  sha            :string(255)
#  before_sha     :string(255)
#  push_data      :text
#  created_at     :datetime
#  updated_at     :datetime
#  tag            :boolean          default(FALSE)
#  yaml_errors    :text
#  committed_at   :datetime
#  gl_project_id  :integer
#

FactoryGirl.define do
  factory :ci_empty_pipeline, class: Ci::Pipeline do
    ref 'master'
    sha '97de212e80737a608d939f648d959671fb0a0142'
    status 'pending'

    project factory: :empty_project

    factory :ci_pipeline_without_jobs do
      after(:build) do |commit|
        allow(commit).to receive(:ci_yaml_file) { YAML.dump({}) }
      end
    end

    factory :ci_pipeline_with_one_job do
      after(:build) do |commit|
        allow(commit).to receive(:ci_yaml_file) { YAML.dump({ rspec: { script: "ls" } }) }
      end
    end

    factory :ci_pipeline_with_two_job do
      after(:build) do |commit|
        allow(commit).to receive(:ci_yaml_file) { YAML.dump({ rspec: { script: "ls" }, spinach: { script: "ls" } }) }
      end
    end

    factory :ci_pipeline do
      after(:build) do |commit|
        allow(commit).to receive(:ci_yaml_file) { File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml')) }
      end
    end
  end
end