Add build eraseable feature implementation
This commit is contained in:
parent
89b181204c
commit
c8102d938b
5 changed files with 90 additions and 11 deletions
|
@ -56,10 +56,10 @@ class Projects::BuildsController < Projects::ApplicationController
|
|||
render json: @build.to_json(only: [:status, :id, :sha, :coverage], methods: :sha)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@build.destroy
|
||||
redirect_to namespace_project_builds_path(project.namespace, project),
|
||||
notice: "Build ##{@build.id} has been sucessfully removed!"
|
||||
def erase
|
||||
@build.erase!
|
||||
redirect_to namespace_project_build_path(project.namespace, project, @build),
|
||||
notice: "Build ##{@build.id} has been sucessfully erased!"
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -4,11 +4,26 @@ module Ci
|
|||
include ActiveSupport::Concern
|
||||
|
||||
def erase!
|
||||
raise NotImplementedError
|
||||
raise StandardError, 'Build not eraseable!' unless eraseable?
|
||||
remove_artifacts_file!
|
||||
remove_artifacts_metadata!
|
||||
erase_trace!
|
||||
end
|
||||
|
||||
def erased?
|
||||
raise NotImpementedError
|
||||
def eraseable?
|
||||
artifacts_file.exists? || File.file?(path_to_trace)
|
||||
end
|
||||
|
||||
def erase_url
|
||||
if eraseable?
|
||||
erase_namespace_project_build_path(project.namespace, project, self)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def erase_trace!
|
||||
File.truncate(path_to_trace, 0) if File.file?(path_to_trace)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -113,10 +113,11 @@
|
|||
- elsif @build.retry_url
|
||||
= link_to "Retry", @build.retry_url, class: 'btn btn-sm btn-primary', method: :post
|
||||
|
||||
= link_to '', class: 'btn btn-sm btn-danger', method: :delete,
|
||||
data: { confirm: 'Are you sure you want to remove this?' } do
|
||||
= icon('remove')
|
||||
Remove
|
||||
- if @build.eraseable?
|
||||
= link_to @build.erase_url, class: 'btn btn-sm btn-warning', method: :put,
|
||||
data: { confirm: 'Are you sure you want to erase this build?' } do
|
||||
= icon('eraser')
|
||||
Erase
|
||||
|
||||
.clearfix
|
||||
- if @build.duration
|
||||
|
|
|
@ -617,6 +617,7 @@ Rails.application.routes.draw do
|
|||
get :status
|
||||
post :cancel
|
||||
post :retry
|
||||
put :erase
|
||||
end
|
||||
|
||||
resource :artifacts, only: [] do
|
||||
|
|
62
spec/models/ci/build/eraseable_spec.rb
Normal file
62
spec/models/ci/build/eraseable_spec.rb
Normal file
|
@ -0,0 +1,62 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Ci::Build::Eraseable, models: true do
|
||||
context 'build is not eraseable' do
|
||||
let!(:build) { create(:ci_build) }
|
||||
|
||||
describe '#erase!' do
|
||||
it { expect { build.erase! }.to raise_error(StandardError, /Build not eraseable!/ )}
|
||||
end
|
||||
|
||||
describe '#eraseable?' do
|
||||
subject { build.eraseable? }
|
||||
it { is_expected.to eq false }
|
||||
end
|
||||
|
||||
describe '#erase_url' do
|
||||
subject { build.erase_url }
|
||||
it { is_expected.to be_falsy }
|
||||
end
|
||||
end
|
||||
|
||||
context 'build is eraseable' do
|
||||
let!(:build) { create(:ci_build_with_trace, :artifacts) }
|
||||
|
||||
describe '#erase!' do
|
||||
before { build.erase! }
|
||||
|
||||
it 'should remove artifact file' do
|
||||
expect(build.artifacts_file.exists?).to be_falsy
|
||||
end
|
||||
|
||||
it 'should remove artifact metadata file' do
|
||||
expect(build.artifacts_metadata.exists?).to be_falsy
|
||||
end
|
||||
|
||||
it 'should erase build trace in trace file' do
|
||||
expect(File.zero?(build.path_to_trace)).to eq true
|
||||
end
|
||||
end
|
||||
|
||||
describe '#eraseable?' do
|
||||
subject { build.eraseable? }
|
||||
it { is_expected.to eq true }
|
||||
end
|
||||
|
||||
describe '#erase_url' do
|
||||
subject { build.erase_url }
|
||||
it { is_expected.to be_truthy }
|
||||
end
|
||||
|
||||
context 'metadata and build trace are not available' do
|
||||
let!(:build) { create(:ci_build, :artifacts) }
|
||||
before { build.remove_artifacts_metadata! }
|
||||
|
||||
describe '#erase!' do
|
||||
it 'should not raise error' do
|
||||
expect { build.erase! }.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue