Implement initial working stages statuses migration
This commit is contained in:
parent
7103c4a707
commit
d60ce6e9f4
2 changed files with 30 additions and 37 deletions
|
@ -48,7 +48,8 @@ class MigrateStagesStatuses < ActiveRecord::Migration
|
|||
canceled = scope_relevant.canceled.select('count(*)').to_sql
|
||||
warnings = scope_warnings.select('count(*) > 0').to_sql
|
||||
|
||||
"(CASE
|
||||
<<-SQL.strip_heredoc
|
||||
(CASE
|
||||
WHEN (#{builds}) = (#{skipped}) AND (#{warnings}) THEN #{STATUSES[:success]}
|
||||
WHEN (#{builds}) = (#{skipped}) THEN #{STATUSES[:skipped]}
|
||||
WHEN (#{builds}) = (#{success}) THEN #{STATUSES[:success]}
|
||||
|
@ -56,26 +57,22 @@ class MigrateStagesStatuses < ActiveRecord::Migration
|
|||
WHEN (#{builds}) = (#{success}) + (#{skipped}) THEN #{STATUSES[:success]}
|
||||
WHEN (#{builds}) = (#{success}) + (#{skipped}) + (#{canceled}) THEN #{STATUSES[:canceled]}
|
||||
WHEN (#{builds}) = (#{created}) + (#{skipped}) + (#{pending}) THEN #{STATUSES[:pending]}
|
||||
WHEN (#{running})+(#{pending})>0 THEN '#{STATUSES[:running]}
|
||||
WHEN (#{running}) + (#{pending}) > 0 THEN #{STATUSES[:running]}
|
||||
WHEN (#{manual}) > 0 THEN #{STATUSES[:manual]}
|
||||
WHEN (#{created}) > 0 THEN #{STATUSES[:running]}
|
||||
ELSE #{STATUSES[:failed]}
|
||||
END)"
|
||||
END)
|
||||
SQL
|
||||
end
|
||||
end
|
||||
|
||||
def up
|
||||
Stage.all.in_batches(of: 10000) do |relation|
|
||||
status_sql = Build
|
||||
.where('ci_builds.commit_id = ci_stages.pipeline_id')
|
||||
.where('ci_builds.stage = ci_stages.name')
|
||||
.status_sql
|
||||
|
||||
execute <<-SQL.strip_heredoc
|
||||
UPDATE ci_stages SET status = #{status_sql}
|
||||
WHERE id = (#{relation.select(:id).to_sql})
|
||||
SQL
|
||||
end
|
||||
update_column_in_batches(:ci_stages, :status, Arel.sql("(#{status_sql})"))
|
||||
end
|
||||
|
||||
def down
|
||||
|
@ -83,7 +80,4 @@ class MigrateStagesStatuses < ActiveRecord::Migration
|
|||
UPDATE ci_stages SET status = null
|
||||
SQL
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
end
|
||||
|
|
|
@ -15,36 +15,35 @@ describe MigrateStagesStatuses, :migration do
|
|||
projects.create!(id: 1, name: 'gitlab1', path: 'gitlab1')
|
||||
projects.create!(id: 2, name: 'gitlab2', path: 'gitlab2')
|
||||
|
||||
pipelines.create!(id: 1, project_id: 123, ref: 'master', sha: 'adf43c3a')
|
||||
pipelines.create!(id: 2, project_id: 456, ref: 'feature', sha: '21a3deb')
|
||||
pipelines.create!(id: 1, project_id: 1, ref: 'master', sha: 'adf43c3a')
|
||||
pipelines.create!(id: 2, project_id: 2, ref: 'feature', sha: '21a3deb')
|
||||
|
||||
create_job(project: 1, pipeline: 1, stage: 'test', status: 'success')
|
||||
create_job(project: 1, pipeline: 1, stage: 'test', status: 'running')
|
||||
create_job(project: 1, pipeline: 1, stage: 'build', status: 'success')
|
||||
create_job(project: 1, pipeline: 1, stage: 'build', status: 'failed')
|
||||
create_job(project: 2, pipeline: 2, stage: 'test', status: 'success')
|
||||
create_job(project: 2, pipeline: 2, stage: 'test', status: 'succcss')
|
||||
create_job(project: 2, pipeline: 2, stage: 'test', status: 'success')
|
||||
|
||||
stages.create!(id: 1, pipeline_id: 1, project_id: 1, status: nil)
|
||||
stages.create!(id: 2, pipeline_id: 1, project_id: 1, status: nil)
|
||||
stages.create!(id: 3, pipeline_id: 2, project_id: 2, status: nil)
|
||||
stages.create!(id: 1, pipeline_id: 1, project_id: 1, name: 'test', status: nil)
|
||||
stages.create!(id: 2, pipeline_id: 1, project_id: 1, name: 'build', status: nil)
|
||||
stages.create!(id: 3, pipeline_id: 2, project_id: 2, name: 'test', status: nil)
|
||||
end
|
||||
|
||||
pending 'correctly migrates stages statuses' do
|
||||
it 'correctly migrates stages statuses' do
|
||||
expect(stages.where(status: nil).count).to eq 3
|
||||
|
||||
migrate!
|
||||
|
||||
expect(stages.where(status: nil)).to be_empty
|
||||
expect(stages.all.order(:id, :asc).pluck(:stage))
|
||||
.to eq %w[running success failed]
|
||||
expect(stages.all.order('id ASC').pluck(:status))
|
||||
.to eq [STATUSES[:running], STATUSES[:failed], STATUSES[:success]]
|
||||
end
|
||||
|
||||
def create_job(project:, pipeline:, stage:, status:)
|
||||
stage_idx = STAGES[stage.to_sym]
|
||||
status_id = STATUSES[status.to_sym]
|
||||
|
||||
jobs.create!(project_id: project, commit_id: pipeline,
|
||||
stage_idx: stage_idx, stage: stage, status: status_id)
|
||||
stage_idx: stage_idx, stage: stage, status: status)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue