diff --git a/app/controllers/projects/artifacts_controller.rb b/app/controllers/projects/artifacts_controller.rb index f11c8321464e1b49876f80cc591311408541b712..c00295cd3b58c81209baea2ea915a6dca4849edb 100644 --- a/app/controllers/projects/artifacts_controller.rb +++ b/app/controllers/projects/artifacts_controller.rb @@ -35,14 +35,34 @@ class Projects::ArtifactsController < Projects::ApplicationController redirect_to namespace_project_build_path(project.namespace, project, build) end + def search + url = namespace_project_build_url(project.namespace, project, build) + + if params[:path] + redirect_to "#{url}/artifacts/#{params[:path]}" + else + render_404 + end + end + private def validate_artifacts! - render_404 unless build.artifacts? + render_404 unless build && build.artifacts? end def build - @build ||= project.builds.find_by!(id: params[:build_id]) + @build ||= build_from_id || build_from_ref + end + + def build_from_id + project.builds.find_by(id: params[:build_id]) if params[:build_id] + end + + def build_from_ref + if params[:ref] + project.builds_for(params[:build_name], params[:ref]).latest.first + end end def artifacts_file diff --git a/config/routes.rb b/config/routes.rb index 1572656b8c5f3eb1d57926e23bfde6c06616dd49..0a4b86092526f101e725620721cc26040f065d8d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -733,6 +733,12 @@ Rails.application.routes.draw do resources :environments, only: [:index, :show, :new, :create, :destroy] + resources :artifacts, only: [] do + collection do + get :search, path: ':ref/:build_name(/*path)', format: false + end + end + resources :builds, only: [:index, :show], constraints: { id: /\d+/ } do collection do post :cancel_all