1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
# frozen_string_literal: true
class Projects::BuildArtifactsController < Projects::ApplicationController
include ExtractsPath
before_action :authorize_read_build!
before_action :extract_ref_name_and_path
before_action :validate_artifacts!, except: [:download]
feature_category :job_artifacts
def download
redirect_to download_project_job_artifacts_path(project, job, params: request.query_parameters)
end
def browse
redirect_to browse_project_job_artifacts_path(project, job, path: params[:path])
end
def file
redirect_to file_project_job_artifacts_path(project, job, path: params[:path])
end
def raw
redirect_to raw_project_job_artifacts_path(project, job, path: params[:path])
end
def latest_succeeded
redirect_to latest_succeeded_project_artifacts_path(
project,
job,
ref_name_and_path: params[:ref_name_and_path],
job: params[:job]
)
end
private
def validate_artifacts!
render_404 unless job && job.artifacts?
end
def extract_ref_name_and_path
return unless params[:ref_name_and_path]
ref_extractor = ExtractsRef::RefExtractor.new(@project, {})
@ref_name, @path = ref_extractor.extract_ref(params[:ref_name_and_path])
end
def job
@job ||= job_from_id || job_from_ref
end
def job_from_id
project.builds.find_by_id(params[:build_id]) if params[:build_id]
end
def job_from_ref
return unless @ref_name
project.latest_successful_build_for_ref(params[:job], @ref_name)
end
end
|