Move keep to ArtifactsController

This commit is contained in:
Kamil Trzcinski 2016-06-08 17:18:54 +02:00 committed by Phil Hughes
parent aea4041ce9
commit ffe8dbde9b
7 changed files with 27 additions and 20 deletions

View file

@ -34,6 +34,11 @@ class Projects::ArtifactsController < Projects::ApplicationController
end end
end end
def keep
build.keep_artifacts!
redirect_to namespace_project_build_path(project.namespace, project, build)
end
private private
def build def build

View file

@ -12,7 +12,7 @@ module Ci
scope :unstarted, ->() { where(runner_id: nil) } scope :unstarted, ->() { where(runner_id: nil) }
scope :ignore_failures, ->() { where(allow_failure: false) } scope :ignore_failures, ->() { where(allow_failure: false) }
scope :with_artifacts, ->() { where.not(artifacts_file: nil) } scope :with_artifacts, ->() { where.not(artifacts_file: nil) }
scope :with_artifacts_expired, ->() { with_artifacts.where('artifacts_expire_at < ?', Time.now) } scope :with_expired_artifacts, ->() { with_artifacts.where('artifacts_expire_at < ?', Time.now) }
mount_uploader :artifacts_file, ArtifactUploader mount_uploader :artifacts_file, ArtifactUploader
mount_uploader :artifacts_metadata, ArtifactUploader mount_uploader :artifacts_metadata, ArtifactUploader
@ -352,10 +352,10 @@ module Ci
end end
def artifacts_expired? def artifacts_expired?
self.artifacts_expire_at < Time.now && !artifacts? !artifacts? && artifacts_expire_at && artifacts_expire_at < Time.now
end end
def keep_artifacts def keep_artifacts!
self.update(artifacts_expire_at: nil) self.update(artifacts_expire_at: nil)
end end
@ -366,7 +366,7 @@ module Ci
end end
def update_erased!(user = nil) def update_erased!(user = nil)
self.update(erased_by: user, erased_at: Time.now) self.update(erased_by: user, erased_at: Time.now, artifacts_expire_at: nil)
end end
def yaml_variables def yaml_variables

View file

@ -44,14 +44,15 @@
%p.build-detail-row %p.build-detail-row
%span.build-light-text Erased: %span.build-light-text Erased:
#{time_ago_with_tooltip(@build.erased_at)} #{time_ago_with_tooltip(@build.erased_at)}
- elsif @build.artifacts_expired? - else
%p.build-detail-row.artifacts-expired.alert.alert-warning - if @build.artifacts_expired?
.artifacts-expired.alert.alert-warning
The artifacts were removed #{time_ago_with_tooltip(@build.artifacts_expire_at)} The artifacts were removed #{time_ago_with_tooltip(@build.artifacts_expire_at)}
- elsif @build.artifacts_expire_at - elsif @build.artifacts_expire_at
%p.build-detail-row.artifacts-expired.alert.alert-info .artifacts-expired.alert.alert-warning
The artifacts will be removed at #{time_ago_with_tooltip(@build.artifacts_expire_at)} The artifacts will be removed in #{duration_in_words(@build.artifacts_expire_at, Time.now)}
.pull-right .pull-right
= link_to keep_artifacts_namespace_project_build_artifacts_path(@project.namespace, @project, @build), class: 'btn btn-sm btn-primary' do = link_to keep_namespace_project_build_artifacts_path(@project.namespace, @project, @build), class: 'btn btn-xs btn-primary', method: :post do
Keep Keep
%p.build-detail-row %p.build-detail-row
%span.build-light-text Runner: %span.build-light-text Runner:

View file

@ -4,8 +4,9 @@ class ExpireBuildArtifacts
def perform def perform
Rails.logger.info 'Cleaning old build artifacts' Rails.logger.info 'Cleaning old build artifacts'
builds = Ci::Build.with_artifacts_expired builds = Ci::Build.with_expired_artifacts
builds.find_each(batch_size: 50).each do |build| builds.find_each(batch_size: 50).each do |build|
Rails.logger.debug "Removing artifacts build #{build.id}..."
build.erase_artifacts! build.erase_artifacts!
end end
end end

View file

@ -164,8 +164,8 @@ production: &base
# Flag stuck CI builds as failed # Flag stuck CI builds as failed
stuck_ci_builds_worker: stuck_ci_builds_worker:
cron: "0 0 * * *" cron: "0 0 * * *"
# Remove old artifacts # Remove expired build artifacts
expire_build_artifacts: expire_build_artifacts_worker:
cron: "50 * * * *" cron: "50 * * * *"
# Periodically run 'git fsck' on all repositories. If started more than # Periodically run 'git fsck' on all repositories. If started more than
# once per hour you will have concurrent 'git fsck' jobs. # once per hour you will have concurrent 'git fsck' jobs.

View file

@ -279,9 +279,9 @@ Settings['cron_jobs'] ||= Settingslogic.new({})
Settings.cron_jobs['stuck_ci_builds_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['stuck_ci_builds_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['stuck_ci_builds_worker']['cron'] ||= '0 0 * * *' Settings.cron_jobs['stuck_ci_builds_worker']['cron'] ||= '0 0 * * *'
Settings.cron_jobs['stuck_ci_builds_worker']['job_class'] = 'StuckCiBuildsWorker' Settings.cron_jobs['stuck_ci_builds_worker']['job_class'] = 'StuckCiBuildsWorker'
Settings.cron_jobs['expire_build_artifacts'] ||= Settingslogic.new({}) Settings.cron_jobs['expire_build_artifacts_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['expire_build_artifacts']['cron'] ||= '0 0 * * *' Settings.cron_jobs['expire_build_artifacts_worker']['cron'] ||= '0 0 * * *'
Settings.cron_jobs['expire_build_artifacts']['job_class'] = 'ExpireBuildArtifacts' Settings.cron_jobs['expire_build_artifacts_worker']['job_class'] = 'ExpireBuildArtifactsWorker'
Settings.cron_jobs['repository_check_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['repository_check_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['repository_check_worker']['cron'] ||= '20 * * * *' Settings.cron_jobs['repository_check_worker']['cron'] ||= '20 * * * *'
Settings.cron_jobs['repository_check_worker']['job_class'] = 'RepositoryCheck::BatchWorker' Settings.cron_jobs['repository_check_worker']['job_class'] = 'RepositoryCheck::BatchWorker'

View file

@ -714,7 +714,6 @@ Rails.application.routes.draw do
post :cancel post :cancel
post :retry post :retry
post :erase post :erase
post :keep_artifacts
get :trace get :trace
get :raw get :raw
end end
@ -723,6 +722,7 @@ Rails.application.routes.draw do
get :download get :download
get :browse, path: 'browse(/*path)', format: false get :browse, path: 'browse(/*path)', format: false
get :file, path: 'file/*path', format: false get :file, path: 'file/*path', format: false
post :keep
end end
end end