Skip to content
Snippets Groups Projects
Commit af86b8c2 authored by Lin Jen-Shin's avatar Lin Jen-Shin
Browse files

Latest success pipelines (rather than builds)

parent 85409a5a
No related branches found
No related tags found
1 merge request!5142Add a download buttons for Build Artifacts
Pipeline #
Loading
Loading
@@ -18,6 +18,14 @@ module Ci
after_touch :update_state
after_save :keep_around_commits
 
scope :latest, -> do
max_id = unscope(:select).
select("max(#{table_name}.id)").
group(:ref)
where(id: max_id)
end
def self.truncate_sha(sha)
sha[0...8]
end
Loading
Loading
Loading
Loading
@@ -18,8 +18,8 @@ class CommitStatus < ActiveRecord::Base
 
scope :latest, -> do
max_id = unscope(:select).
select("max(#{table_name}.id)").
group(:name, :commit_id)
select("max(#{table_name}.id)").
group(:name, :commit_id)
 
where(id: max_id)
end
Loading
Loading
Loading
Loading
@@ -430,12 +430,9 @@ class Project < ActiveRecord::Base
end
 
def latest_success_builds_for(ref = 'HEAD')
builds_for(ref).success.latest
end
def builds_for(ref = 'HEAD')
Ci::Build.joins(:pipeline).
merge(Ci::Pipeline.where(ref: ref, project: self))
merge(pipelines.where(ref: ref).success.latest).
with_artifacts
end
 
def merge_base_commit(first_commit_id, second_commit_id)
Loading
Loading
Loading
Loading
@@ -6,7 +6,8 @@ describe Ci::Build, models: true do
let(:pipeline) do
create(:ci_pipeline, project: project,
sha: project.commit.id,
ref: 'fix')
ref: 'fix',
status: 'success')
end
 
let(:build) { create(:ci_build, pipeline: pipeline) }
Loading
Loading
@@ -694,20 +695,38 @@ describe Ci::Build, models: true do
end
 
describe 'Project#latest_success_builds_for' do
let(:build) do
create(:ci_build, :artifacts, :success, pipeline: pipeline)
end
before do
build.update(status: 'success')
build
end
 
it 'returns builds from ref' do
builds = project.latest_success_builds_for('fix')
context 'with succeed pipeline' do
it 'returns builds from ref' do
builds = project.latest_success_builds_for('fix')
expect(builds).to contain_exactly(build)
end
it 'returns empty relation if the build cannot be found' do
builds = project.latest_success_builds_for('TAIL').all
 
expect(builds).to contain_exactly(build)
expect(builds).to be_empty
end
end
 
it 'returns empty relation if the build cannot be found' do
builds = project.latest_success_builds_for('TAIL').all
context 'with pending pipeline' do
before do
pipeline.update(status: 'pending')
end
 
expect(builds).to be_empty
it 'returns empty relation' do
builds = project.latest_success_builds_for('fix').all
expect(builds).to be_empty
end
end
end
end
Loading
Loading
@@ -25,7 +25,7 @@ shared_examples 'artifacts from ref with 404' do
 
context 'has no such build' do
before do
get path_from_ref(pipeline.sha, 'NOBUILD')
get path_from_ref(pipeline.ref, 'NOBUILD')
end
 
it('gives 404') { verify }
Loading
Loading
@@ -33,6 +33,11 @@ shared_examples 'artifacts from ref with 404' do
end
 
shared_examples 'artifacts from ref successfully' do
def create_new_pipeline(status)
new_pipeline = create(:ci_pipeline, status: 'success')
create(:ci_build, status, :artifacts, pipeline: new_pipeline)
end
context 'with regular branch' do
before do
pipeline.update(ref: 'master',
Loading
Loading
@@ -59,10 +64,10 @@ shared_examples 'artifacts from ref successfully' do
it('gives the file') { verify }
end
 
context 'with latest build' do
context 'with latest pipeline' do
before do
3.times do # creating some old builds
create(:ci_build, :success, :artifacts, pipeline: pipeline)
3.times do # creating some old pipelines
create_new_pipeline(:success)
end
end
 
Loading
Loading
@@ -73,10 +78,10 @@ shared_examples 'artifacts from ref successfully' do
it('gives the file') { verify }
end
 
context 'with success build' do
context 'with success pipeline' do
before do
build # make sure build was old, but still the latest success one
create(:ci_build, :pending, :artifacts, pipeline: pipeline)
build # make sure pipeline was old, but still the latest success one
create_new_pipeline(:pending)
end
 
before do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment