gitlab-org--gitlab-foss/spec/factories/ci/builds.rb
Tiger de03a8bcb4 Detailed status for builds that fail prerequisites
Create FailedUnmetPrerequisites status to allow custom
messaging for builds that were unable to be queued due
to failing to meet prerequisites (eg. failing to create
Kubernetes namespace for deployment).
2019-04-02 11:04:41 +11:00

350 lines
7 KiB
Ruby

include ActionDispatch::TestProcess
FactoryBot.define do
factory :ci_build, class: Ci::Build do
name 'test'
stage 'test'
stage_idx 0
ref 'master'
tag false
protected false
created_at 'Di 29. Okt 09:50:00 CET 2013'
pending
options do
{
image: 'ruby:2.1',
services: ['postgres'],
script: ['ls -a']
}
end
yaml_variables do
[
{ key: 'DB_NAME', value: 'postgres', public: true }
]
end
pipeline factory: :ci_pipeline
trait :degenerated do
options nil
yaml_variables nil
end
trait :started do
started_at 'Di 29. Okt 09:51:28 CET 2013'
end
trait :finished do
started
finished_at 'Di 29. Okt 09:53:28 CET 2013'
end
trait :success do
finished
status 'success'
end
trait :failed do
finished
status 'failed'
end
trait :canceled do
finished
status 'canceled'
end
trait :skipped do
started
status 'skipped'
end
trait :running do
started
status 'running'
end
trait :pending do
queued_at 'Di 29. Okt 09:50:59 CET 2013'
status 'pending'
end
trait :created do
status 'created'
end
trait :preparing do
status 'preparing'
end
trait :scheduled do
schedulable
status 'scheduled'
scheduled_at { 1.minute.since }
end
trait :expired_scheduled do
schedulable
status 'scheduled'
scheduled_at { 1.minute.ago }
end
trait :manual do
status 'manual'
self.when 'manual'
end
trait :teardown_environment do
environment 'staging'
options do
{
script: %w(ls),
environment: { name: 'staging',
action: 'stop',
url: 'http://staging.example.com/$CI_JOB_NAME' }
}
end
end
trait :deploy_to_production do
environment 'production'
options do
{
script: %w(ls),
environment: { name: 'production',
url: 'http://prd.example.com/$CI_JOB_NAME' }
}
end
end
trait :start_review_app do
environment 'review/$CI_COMMIT_REF_NAME'
options do
{
script: %w(ls),
environment: { name: 'review/$CI_COMMIT_REF_NAME',
url: 'http://staging.example.com/$CI_JOB_NAME',
on_stop: 'stop_review_app' }
}
end
end
trait :stop_review_app do
name 'stop_review_app'
environment 'review/$CI_COMMIT_REF_NAME'
options do
{
script: %w(ls),
environment: { name: 'review/$CI_COMMIT_REF_NAME',
url: 'http://staging.example.com/$CI_JOB_NAME',
action: 'stop' }
}
end
end
trait :allowed_to_fail do
allow_failure true
end
trait :ignored do
allowed_to_fail
end
trait :playable do
manual
end
trait :retryable do
success
end
trait :schedulable do
self.when 'delayed'
options do
{
script: ['ls -a'],
start_in: '1 minute'
}
end
end
trait :actionable do
self.when 'manual'
end
trait :retried do
retried true
end
trait :cancelable do
pending
end
trait :erasable do
success
artifacts
end
trait :tags do
tag_list [:docker, :ruby]
end
trait :on_tag do
tag true
end
trait :triggered do
trigger_request factory: :ci_trigger_request
end
after(:build) do |build, evaluator|
build.project ||= build.pipeline.project
end
trait :tag do
tag true
end
trait :coverage do
coverage 99.9
coverage_regex '/(d+)/'
end
trait :trace_live do
after(:create) do |build, evaluator|
build.trace.set('BUILD TRACE')
end
end
trait :trace_artifact do
after(:create) do |build, evaluator|
create(:ci_job_artifact, :trace, job: build)
end
end
trait :unicode_trace_live do
after(:create) do |build, evaluator|
trace = File.binread(
File.expand_path(
Rails.root.join('spec/fixtures/trace/ansi-sequence-and-unicode')))
build.trace.set(trace)
end
end
trait :erased do
erased_at { Time.now }
erased_by factory: :user
end
trait :queued do
queued_at { Time.now }
runner factory: :ci_runner
end
trait :legacy_artifacts do
after(:create) do |build, _|
build.update!(
legacy_artifacts_file: fixture_file_upload(
Rails.root.join('spec/fixtures/ci_build_artifacts.zip'), 'application/zip'),
legacy_artifacts_metadata: fixture_file_upload(
Rails.root.join('spec/fixtures/ci_build_artifacts_metadata.gz'), 'application/x-gzip')
)
end
end
trait :artifacts do
after(:create) do |build|
create(:ci_job_artifact, :archive, job: build, expire_at: build.artifacts_expire_at)
create(:ci_job_artifact, :metadata, job: build, expire_at: build.artifacts_expire_at)
build.reload
end
end
trait :test_reports do
after(:build) do |build|
build.job_artifacts << create(:ci_job_artifact, :junit, job: build)
end
end
trait :expired do
artifacts_expire_at { 1.minute.ago }
end
trait :with_commit do
after(:build) do |build|
allow(build).to receive(:commit).and_return build(:commit, :without_author)
end
end
trait :with_commit_and_author do
after(:build) do |build|
allow(build).to receive(:commit).and_return build(:commit)
end
end
trait :extended_options do
options do
{
image: { name: 'ruby:2.1', entrypoint: '/bin/sh' },
services: ['postgres', { name: 'docker:stable-dind', entrypoint: '/bin/sh', command: 'sleep 30', alias: 'docker' }],
script: %w(echo),
after_script: %w(ls date),
artifacts: {
name: 'artifacts_file',
untracked: false,
paths: ['out/'],
when: 'always',
expire_in: '7d'
},
cache: {
key: 'cache_key',
untracked: false,
paths: ['vendor/*'],
policy: 'pull-push'
}
}
end
end
trait :no_options do
options { {} }
end
trait :non_playable do
status 'created'
self.when 'manual'
end
trait :protected do
protected true
end
trait :script_failure do
failed
failure_reason 1
end
trait :api_failure do
failed
failure_reason 2
end
trait :prerequisite_failure do
failed
failure_reason 10
end
trait :with_runner_session do
after(:build) do |build|
build.build_runner_session(url: 'https://localhost')
end
end
end
end