diff options
author | Rémy Coutable <remy@rymai.me> | 2016-07-19 15:49:54 +0300 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-07-19 15:49:54 +0300 |
commit | 61e7453e0465ceb631d3e8445429cfed7c1449d3 (patch) | |
tree | f20fabfca0a5d7cdf694f1df69c88788b3f8eb65 /db | |
parent | ad14c1bf85f716ed698e8802161de74f462a106c (diff) | |
parent | 72229c375fb3efe9dd28c0bf98f0df7696d99fc2 (diff) |
Merge branch 'manual-actions' into 'master'
Add support for manual CI actions
## What does this MR do?
This implements a `when: manual` which allows a jobs to be marked as manual actions.
Manual actions have to be explicitly executed by developers.
## What are the relevant issue numbers?
This is to solve: https://gitlab.com/gitlab-org/gitlab-ce/issues/17010
See merge request !5297
Diffstat (limited to 'db')
-rw-r--r-- | db/fixtures/development/14_builds.rb | 63 |
1 files changed, 48 insertions, 15 deletions
diff --git a/db/fixtures/development/14_builds.rb b/db/fixtures/development/14_builds.rb index 51ff451eb4c..124704cb451 100644 --- a/db/fixtures/development/14_builds.rb +++ b/db/fixtures/development/14_builds.rb @@ -1,13 +1,34 @@ class Gitlab::Seeder::Builds + STAGES = %w[build notify_build test notify_test deploy notify_deploy] + def initialize(project) @project = project end def seed! - ci_commits.each do |ci_commit| + pipelines.each do |pipeline| begin - build_create!(ci_commit, name: 'test build 1') - build_create!(ci_commit, status: 'success', name: 'test build 2') + build_create!(pipeline, name: 'build:linux', stage: 'build') + build_create!(pipeline, name: 'build:osx', stage: 'build') + + build_create!(pipeline, name: 'slack post build', stage: 'notify_build') + + build_create!(pipeline, name: 'rspec:linux', stage: 'test') + build_create!(pipeline, name: 'rspec:windows', stage: 'test') + build_create!(pipeline, name: 'rspec:windows', stage: 'test') + build_create!(pipeline, name: 'rspec:osx', stage: 'test') + build_create!(pipeline, name: 'spinach:linux', stage: 'test') + build_create!(pipeline, name: 'spinach:osx', stage: 'test') + build_create!(pipeline, name: 'cucumber:linux', stage: 'test') + build_create!(pipeline, name: 'cucumber:osx', stage: 'test') + + build_create!(pipeline, name: 'slack post test', stage: 'notify_test') + + build_create!(pipeline, name: 'staging', stage: 'deploy', environment: 'staging') + build_create!(pipeline, name: 'production', stage: 'deploy', environment: 'production', when: 'manual') + + commit_status_create!(pipeline, name: 'jenkins') + print '.' rescue ActiveRecord::RecordInvalid print 'F' @@ -15,8 +36,8 @@ class Gitlab::Seeder::Builds end end - def ci_commits - commits = @project.repository.commits('master', nil, 5) + def pipelines + commits = @project.repository.commits('master', limit: 5) commits_sha = commits.map { |commit| commit.raw.id } commits_sha.map do |sha| @project.ensure_pipeline(sha, 'master') @@ -25,11 +46,11 @@ class Gitlab::Seeder::Builds [] end - def build_create!(ci_commit, opts = {}) - attributes = build_attributes_for(ci_commit).merge(opts) + def build_create!(pipeline, opts = {}) + attributes = build_attributes_for(pipeline, opts) build = Ci::Build.new(attributes) - if %w(success failed).include?(build.status) + if opts[:name].start_with?('build') artifacts_cache_file(artifacts_archive_path) do |file| build.artifacts_file = file end @@ -40,19 +61,28 @@ class Gitlab::Seeder::Builds end build.save! + build.update(status: build_status) if %w(running success failed).include?(build.status) # We need to set build trace after saving a build (id required) build.trace = FFaker::Lorem.paragraphs(6).join("\n\n") end end + + def commit_status_create!(pipeline, opts = {}) + attributes = commit_status_attributes_for(pipeline, opts) + GenericCommitStatus.create(attributes) + end + + def commit_status_attributes_for(pipeline, opts) + { name: 'test build', stage: 'test', stage_idx: stage_index(opts[:stage]), + ref: 'master', user: build_user, project: @project, pipeline: pipeline, + created_at: Time.now, updated_at: Time.now + }.merge(opts) + end - def build_attributes_for(ci_commit) - { name: 'test build', commands: "$ build command", - stage: 'test', stage_idx: 1, ref: 'master', - user_id: build_user, gl_project_id: @project.id, - status: build_status, commit_id: ci_commit.id, - created_at: Time.now, updated_at: Time.now } + def build_attributes_for(pipeline, opts) + commit_status_attributes_for(pipeline, opts).merge(commands: '$ build command') end def build_user @@ -63,13 +93,16 @@ class Gitlab::Seeder::Builds Ci::Build::AVAILABLE_STATUSES.sample end + def stage_index(stage) + STAGES.index(stage) || 0 + end + def artifacts_archive_path Rails.root + 'spec/fixtures/ci_build_artifacts.zip' end def artifacts_metadata_path Rails.root + 'spec/fixtures/ci_build_artifacts_metadata.gz' - end def artifacts_cache_file(file_path) |