debian-mirror-gitlab/config/routes/project.rb

549 lines
19 KiB
Ruby
Raw Normal View History

2020-01-01 13:55:28 +05:30
# frozen_string_literal: true
2017-08-17 22:00:37 +05:30
2018-05-09 12:01:36 +05:30
constraints(::Constraints::ProjectUrlConstrainer.new) do
2017-08-17 22:00:37 +05:30
# If the route has a wildcard segment, the segment has a regex constraint,
# the segment is potentially followed by _another_ wildcard segment, and
# the `format` option is not set to false, we need to specify that
# regex constraint _outside_ of `constraints: {}`.
#
# Otherwise, Rails will overwrite the constraint with `/.+?/`,
# which breaks some of our wildcard routes like `/blob/*id`
# and `/tree/*id` that depend on the negative lookahead inside
2017-09-10 17:25:29 +05:30
# `Gitlab::PathRegex.full_namespace_route_regex`, which helps the router
2017-08-17 22:00:37 +05:30
# determine whether a certain path segment is part of `*namespace_id`,
# `:project_id`, or `*id`.
#
# See https://github.com/rails/rails/blob/v4.2.8/actionpack/lib/action_dispatch/routing/mapper.rb#L155
scope(path: '*namespace_id',
as: :namespace,
2017-09-10 17:25:29 +05:30
namespace_id: Gitlab::PathRegex.full_namespace_route_regex) do
2017-08-17 22:00:37 +05:30
scope(path: ':project_id',
2017-09-10 17:25:29 +05:30
constraints: { project_id: Gitlab::PathRegex.project_route_regex },
2017-08-17 22:00:37 +05:30
module: :projects,
as: :project) do
2019-09-04 21:01:54 +05:30
# Begin of the /-/ scope.
# Use this scope for all new project routes.
scope '-' do
get 'archive/*id', constraints: { format: Gitlab::PathRegex.archive_formats_regex, id: /.+?/ }, to: 'repositories#archive', as: 'archive'
2020-07-28 23:09:34 +05:30
get 'metrics(/:dashboard_path)', constraints: { dashboard_path: /.+\.yml/ },
to: 'metrics_dashboard#show', as: :metrics_dashboard, format: false
2019-09-04 21:01:54 +05:30
2019-12-21 20:55:43 +05:30
resources :artifacts, only: [:index, :destroy]
2019-09-04 21:01:54 +05:30
resources :jobs, only: [:index, :show], constraints: { id: /\d+/ } do
collection do
resources :artifacts, only: [] do
collection do
get :latest_succeeded,
path: '*ref_name_and_path',
format: false
end
end
end
member do
get :status
post :cancel
post :unschedule
post :retry
post :play
post :erase
get :trace, defaults: { format: 'json' }
get :raw
get :terminal
2020-06-23 00:09:42 +05:30
get :proxy
2020-03-13 15:44:24 +05:30
2020-06-23 00:09:42 +05:30
# These routes are also defined in gitlab-workhorse. Make sure to update accordingly.
2020-01-01 13:55:28 +05:30
get '/terminal.ws/authorize', to: 'jobs#terminal_websocket_authorize', format: false
2020-06-23 00:09:42 +05:30
get '/proxy.ws/authorize', to: 'jobs#proxy_websocket_authorize', format: false
2019-09-04 21:01:54 +05:30
end
resource :artifacts, only: [] do
get :download
get :browse, path: 'browse(/*path)', format: false
get :file, path: 'file/*path', format: false
get :raw, path: 'raw/*path', format: false
post :keep
end
end
namespace :ci do
resource :lint, only: [:show, :create]
2020-06-23 00:09:42 +05:30
resources :daily_build_group_report_results, only: [:index], constraints: { format: /(csv|json)/ }
2016-11-03 12:29:30 +05:30
end
2019-09-04 21:01:54 +05:30
namespace :settings do
resource :ci_cd, only: [:show, :update], controller: 'ci_cd' do
post :reset_cache
put :reset_registration_token
2020-04-25 10:58:03 +05:30
post :create_deploy_token, path: 'deploy_token/create', to: 'repository#create_deploy_token'
2020-04-22 19:07:51 +05:30
end
resource :operations, only: [:show, :update] do
member do
post :reset_alerting_token
2020-07-28 23:09:34 +05:30
post :reset_pagerduty_token
2020-04-22 19:07:51 +05:30
end
2019-09-04 21:01:54 +05:30
end
resource :integrations, only: [:show]
resource :repository, only: [:show], controller: :repository do
2020-04-22 19:07:51 +05:30
# TODO: Removed this "create_deploy_token" route after change was made in app/helpers/ci_variables_helper.rb:14
# See MR comment for more detail: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27059#note_311585356
2020-04-25 10:58:03 +05:30
post :create_deploy_token, path: 'deploy_token/create'
2019-09-04 21:01:54 +05:30
post :cleanup
end
2020-05-24 23:13:21 +05:30
resources :access_tokens, only: [:index, :create] do
member do
put :revoke
end
end
2019-09-04 21:01:54 +05:30
end
resources :autocomplete_sources, only: [] do
collection do
get 'members'
get 'issues'
get 'merge_requests'
get 'labels'
get 'milestones'
get 'commands'
get 'snippets'
end
end
resources :project_members, except: [:show, :new, :edit], constraints: { id: %r{[a-zA-Z./0-9_\-#%+]+} }, concerns: :access_requestable do
collection do
delete :leave
# Used for import team
# from another project
get :import
post :apply_import
end
member do
post :resend_invite
end
end
resources :deploy_keys, constraints: { id: /\d+/ }, only: [:index, :new, :create, :edit, :update] do
member do
put :enable
put :disable
end
end
resources :deploy_tokens, constraints: { id: /\d+/ }, only: [] do
member do
put :revoke
end
end
resources :milestones, constraints: { id: /\d+/ } do
member do
post :promote
put :sort_issues
put :sort_merge_requests
get :merge_requests
get :participants
get :labels
end
end
resources :labels, except: [:show], constraints: { id: /\d+/ } do
collection do
post :generate
post :set_priorities
end
member do
post :promote
post :toggle_subscription
delete :remove_priority
end
end
resources :services, constraints: { id: %r{[^/]+} }, only: [:edit, :update] do
member do
put :test
end
2020-01-01 13:55:28 +05:30
resources :hook_logs, only: [:show], controller: :service_hook_logs do
member do
post :retry
end
end
2019-09-04 21:01:54 +05:30
end
2019-09-30 21:07:59 +05:30
resources :boards, only: [:index, :show, :create, :update, :destroy], constraints: { id: /\d+/ } do
collection do
get :recent
end
end
2019-10-12 21:52:04 +05:30
2020-07-28 23:09:34 +05:30
resources :releases, only: [:index, :new, :show, :edit], param: :tag, constraints: { tag: %r{[^/]+} } do
2020-01-01 13:55:28 +05:30
member do
2020-04-08 14:13:33 +05:30
get :downloads, path: 'downloads/*filepath', format: false
2020-04-22 19:07:51 +05:30
scope module: :releases do
resources :evidences, only: [:show]
end
2020-04-08 14:13:33 +05:30
end
end
resources :logs, only: [:index] do
collection do
get :k8s
get :elasticsearch
2020-01-01 13:55:28 +05:30
end
end
2019-10-12 21:52:04 +05:30
resources :starrers, only: [:index]
2019-09-04 21:01:54 +05:30
resources :forks, only: [:index, :new, :create]
2020-06-23 00:09:42 +05:30
resources :group_links, only: [:create, :update, :destroy], constraints: { id: /\d+/ }
2019-09-04 21:01:54 +05:30
resource :import, only: [:new, :create, :show]
resource :avatar, only: [:show, :destroy]
2019-12-21 20:55:43 +05:30
2019-12-26 22:10:19 +05:30
scope :grafana, as: :grafana_api do
get 'proxy/:datasource_id/*proxy_path', to: 'grafana_api#proxy'
get :metrics_dashboard, to: 'grafana_api#metrics_dashboard'
end
resource :mattermost, only: [:new, :create]
resource :variables, only: [:show, :update]
resources :triggers, only: [:index, :create, :edit, :update, :destroy]
resource :mirror, only: [:show, :update] do
member do
get :ssh_host_keys, constraints: { format: :json }
post :update_now
end
end
2020-03-13 15:44:24 +05:30
resource :cycle_analytics, only: :show, path: 'value_stream_analytics'
scope module: :cycle_analytics, as: 'cycle_analytics', path: 'value_stream_analytics' do
2019-12-26 22:10:19 +05:30
scope :events, controller: 'events' do
get :issue
get :plan
get :code
get :test
get :review
get :staging
get :production
end
end
2020-03-13 15:44:24 +05:30
get '/cycle_analytics', to: redirect('%{namespace_id}/%{project_id}/-/value_stream_analytics')
2020-01-01 13:55:28 +05:30
concerns :clusterable
namespace :serverless do
scope :functions do
get '/:environment_id/:id', to: 'functions#show'
get '/:environment_id/:id/metrics', to: 'functions#metrics', as: :metrics
end
resources :functions, only: [:index]
end
resources :environments, except: [:destroy] do
member do
post :stop
post :cancel_auto_stop
get :terminal
get :metrics
get :additional_metrics
get :metrics_dashboard
2020-03-13 15:44:24 +05:30
# This route is also defined in gitlab-workhorse. Make sure to update accordingly.
2020-01-01 13:55:28 +05:30
get '/terminal.ws/authorize', to: 'environments#terminal_websocket_authorize', format: false
2020-07-28 23:09:34 +05:30
get '/prometheus/api/v1/*proxy_path', to: 'environments/prometheus_api#prometheus_proxy', as: :prometheus_api
2020-01-01 13:55:28 +05:30
2020-03-13 15:44:24 +05:30
get '/sample_metrics', to: 'environments/sample_metrics#query'
2020-01-01 13:55:28 +05:30
end
collection do
get :metrics, action: :metrics_redirect
get :folder, path: 'folders/*id', constraints: { format: /(html|json)/ }
get :search
end
resources :deployments, only: [:index] do
member do
get :metrics
get :additional_metrics
end
end
end
2020-03-13 15:44:24 +05:30
namespace :performance_monitoring do
2020-04-08 14:13:33 +05:30
resources :dashboards, only: [:create] do
collection do
put '/:file_name', to: 'dashboards#update', constraints: { file_name: /.+\.yml/ }
end
end
2020-03-13 15:44:24 +05:30
end
2020-05-24 23:13:21 +05:30
resources :alert_management, only: [:index] do
get 'details', on: :member
end
2020-03-13 15:44:24 +05:30
namespace :error_tracking do
resources :projects, only: :index
end
2020-01-01 13:55:28 +05:30
resources :error_tracking, only: [:index], controller: :error_tracking do
collection do
get ':issue_id/details',
to: 'error_tracking#details',
as: 'details'
get ':issue_id/stack_trace',
2020-03-13 15:44:24 +05:30
to: 'error_tracking/stack_traces#index',
2020-01-01 13:55:28 +05:30
as: 'stack_trace'
2020-03-13 15:44:24 +05:30
put ':issue_id',
to: 'error_tracking#update',
as: 'update'
2020-01-01 13:55:28 +05:30
end
end
2020-05-24 23:13:21 +05:30
namespace :design_management do
namespace :designs, path: 'designs/:design_id(/:sha)', constraints: -> (params) { params[:sha].nil? || Gitlab::Git.commit_id?(params[:sha]) } do
resource :raw_image, only: :show
resources :resized_image, only: :show, constraints: -> (params) { DesignManagement::DESIGN_IMAGE_SIZES.include?(params[:id]) }
end
end
2020-07-28 23:09:34 +05:30
get '/snippets/:snippet_id/raw/:ref/*path',
to: 'snippets/blobs#raw',
format: false,
as: :snippet_blob_raw,
constraints: { snippet_id: /\d+/ }
2020-04-08 14:13:33 +05:30
draw :issues
2020-03-13 15:44:24 +05:30
draw :merge_requests
2020-06-23 00:09:42 +05:30
draw :pipelines
2020-03-13 15:44:24 +05:30
# The wiki and repository routing contains wildcard characters so
2020-01-01 13:55:28 +05:30
# its preferable to keep it below all other project routes
2020-03-13 15:44:24 +05:30
draw :repository_scoped
draw :repository
2020-01-01 13:55:28 +05:30
draw :wiki
2020-04-08 14:13:33 +05:30
namespace :import do
2020-06-23 00:09:42 +05:30
resource :jira, only: [:show], controller: :jira
2020-04-08 14:13:33 +05:30
end
2016-11-03 12:29:30 +05:30
end
2019-09-04 21:01:54 +05:30
# End of the /-/ scope.
2016-11-03 12:29:30 +05:30
2020-01-01 13:55:28 +05:30
# All new routes should go under /-/ scope.
# Look for scope '-' at the top of the file.
2020-07-28 23:09:34 +05:30
#
# Service Desk
#
get '/service_desk' => 'service_desk#show', as: :service_desk
put '/service_desk' => 'service_desk#update', as: :service_desk_refresh
2016-11-03 12:29:30 +05:30
#
# Templates
#
2019-07-07 11:18:12 +05:30
get '/templates/:template_type/:key' => 'templates#show',
as: :template,
defaults: { format: 'json' },
2019-07-31 22:56:46 +05:30
constraints: { key: %r{[^/]+}, template_type: %r{issue|merge_request}, format: 'json' }
2016-11-03 12:29:30 +05:30
2019-12-21 20:55:43 +05:30
get '/description_templates/names/:template_type',
to: 'templates#names',
as: :template_names,
defaults: { format: 'json' },
constraints: { template_type: %r{issue|merge_request}, format: 'json' }
2020-05-24 23:13:21 +05:30
resource :pages, only: [:show, :update, :destroy] do # rubocop: disable Cop/PutProjectRoutesUnderScope
resources :domains, except: :index, controller: 'pages_domains', constraints: { id: %r{[^/]+} } do # rubocop: disable Cop/PutProjectRoutesUnderScope
2018-03-17 18:26:18 +05:30
member do
post :verify
2020-04-22 19:07:51 +05:30
post :retry_auto_ssl
2019-12-26 22:10:19 +05:30
delete :clean_certificate
2018-03-17 18:26:18 +05:30
end
end
2016-11-03 12:29:30 +05:30
end
2020-05-24 23:13:21 +05:30
resources :snippets, concerns: :awardable, constraints: { id: /\d+/ } do # rubocop: disable Cop/PutProjectRoutesUnderScope
2016-11-03 12:29:30 +05:30
member do
2017-08-17 22:00:37 +05:30
get :raw
post :mark_as_spam
2016-11-03 12:29:30 +05:30
end
end
2020-07-28 23:09:34 +05:30
# Serve snippet routes under /-/snippets.
# To ensure an old unscoped routing is used for the UI we need to
# add prefix 'as' to the scope routing and place it below original routing.
# Issue https://gitlab.com/gitlab-org/gitlab/-/issues/29572
scope '-', as: :scoped do
resources :snippets, concerns: :awardable, constraints: { id: /\d+/ } do # rubocop: disable Cop/PutProjectRoutesUnderScope
member do
get :raw
post :mark_as_spam
end
end
end
2017-09-10 17:25:29 +05:30
namespace :prometheus do
2020-05-24 23:13:21 +05:30
resources :alerts, constraints: { id: /\d+/ }, only: [:index, :create, :show, :update, :destroy] do # rubocop: disable Cop/PutProjectRoutesUnderScope
2020-04-22 19:07:51 +05:30
post :notify, on: :collection
member do
get :metrics_dashboard
end
end
2020-05-24 23:13:21 +05:30
resources :metrics, constraints: { id: %r{[^\/]+} }, only: [:index, :new, :create, :edit, :update, :destroy] do # rubocop: disable Cop/PutProjectRoutesUnderScope
2018-03-27 19:54:05 +05:30
get :active_common, on: :collection
2020-04-22 19:07:51 +05:30
post :validate_query, on: :collection
2018-03-27 19:54:05 +05:30
end
2017-09-10 17:25:29 +05:30
end
2020-03-13 15:44:24 +05:30
post 'alerts/notify', to: 'alerting/notifications#create'
2017-09-10 17:25:29 +05:30
2020-07-28 23:09:34 +05:30
post 'incidents/pagerduty', to: 'incident_management/pager_duty_incidents#create'
2017-09-10 17:25:29 +05:30
draw :legacy_builds
2020-05-24 23:13:21 +05:30
resources :hooks, only: [:index, :create, :edit, :update, :destroy], constraints: { id: /\d+/ } do # rubocop: disable Cop/PutProjectRoutesUnderScope
2016-11-03 12:29:30 +05:30
member do
2018-10-15 14:42:47 +05:30
post :test
2016-11-03 12:29:30 +05:30
end
2017-09-10 17:25:29 +05:30
2020-05-24 23:13:21 +05:30
resources :hook_logs, only: [:show] do # rubocop: disable Cop/PutProjectRoutesUnderScope
2017-09-10 17:25:29 +05:30
member do
2018-11-08 19:23:39 +05:30
post :retry
2017-09-10 17:25:29 +05:30
end
end
2016-11-03 12:29:30 +05:30
end
2020-05-24 23:13:21 +05:30
resources :container_registry, only: [:index, :destroy, :show], # rubocop: disable Cop/PutProjectRoutesUnderScope
2017-08-17 22:00:37 +05:30
controller: 'registry/repositories'
namespace :registry do
2020-05-24 23:13:21 +05:30
resources :repository, only: [] do # rubocop: disable Cop/PutProjectRoutesUnderScope
2018-03-17 18:26:18 +05:30
# We default to JSON format in the controller to avoid ambiguity.
# `latest.json` could either be a request for a tag named `latest`
# in JSON format, or a request for tag named `latest.json`.
scope format: false do
2020-05-24 23:13:21 +05:30
resources :tags, only: [:index, :destroy], # rubocop: disable Cop/PutProjectRoutesUnderScope
2019-10-12 21:52:04 +05:30
constraints: { id: Gitlab::Regex.container_registry_tag_regex } do
collection do
delete :bulk_destroy
end
end
2018-03-17 18:26:18 +05:30
end
2017-08-17 22:00:37 +05:30
end
end
2016-11-03 12:29:30 +05:30
2020-05-24 23:13:21 +05:30
resources :notes, only: [:create, :destroy, :update], concerns: :awardable, constraints: { id: /\d+/ } do # rubocop: disable Cop/PutProjectRoutesUnderScope
2016-11-03 12:29:30 +05:30
member do
delete :delete_attachment
post :resolve
delete :resolve, action: :unresolve
end
end
2017-08-17 22:00:37 +05:30
get 'noteable/:target_type/:target_id/notes' => 'notes#index', as: 'noteable_notes'
2020-05-24 23:13:21 +05:30
resources :todos, only: [:create] # rubocop: disable Cop/PutProjectRoutesUnderScope
2016-11-03 12:29:30 +05:30
2020-05-24 23:13:21 +05:30
resources :uploads, only: [:create] do # rubocop: disable Cop/PutProjectRoutesUnderScope
2016-11-03 12:29:30 +05:30
collection do
2020-03-13 15:44:24 +05:30
get ":secret/:filename", action: :show, as: :show, constraints: { filename: %r{[^/]+} }, format: false, defaults: { format: nil }
2018-11-08 19:23:39 +05:30
post :authorize
2016-11-03 12:29:30 +05:30
end
end
2020-05-24 23:13:21 +05:30
resources :runners, only: [:index, :edit, :update, :destroy, :show] do # rubocop: disable Cop/PutProjectRoutesUnderScope
2016-11-03 12:29:30 +05:30
member do
2018-03-17 18:26:18 +05:30
post :resume
post :pause
2016-11-03 12:29:30 +05:30
end
collection do
post :toggle_shared_runners
2018-10-15 14:42:47 +05:30
post :toggle_group_runners
2016-11-03 12:29:30 +05:30
end
end
2020-05-24 23:13:21 +05:30
resources :runner_projects, only: [:create, :destroy] # rubocop: disable Cop/PutProjectRoutesUnderScope
resources :badges, only: [:index] do # rubocop: disable Cop/PutProjectRoutesUnderScope
2016-11-03 12:29:30 +05:30
collection do
2017-09-10 17:25:29 +05:30
scope '*ref', constraints: { ref: Gitlab::PathRegex.git_reference_regex } do
2016-11-03 12:29:30 +05:30
constraints format: /svg/ do
2017-09-10 17:25:29 +05:30
get :pipeline
2016-11-03 12:29:30 +05:30
get :coverage
end
end
end
end
2017-08-17 22:00:37 +05:30
2019-12-26 22:10:19 +05:30
scope :usage_ping, controller: :usage_ping do
post :web_ide_clientside_preview
2020-05-24 23:13:21 +05:30
post :web_ide_pipelines_count
2019-12-26 22:10:19 +05:30
end
2020-06-23 00:09:42 +05:30
resources :web_ide_terminals, path: :ide_terminals, only: [:create, :show], constraints: { id: /\d+/, format: :json } do # rubocop: disable Cop/PutProjectRoutesUnderScope
member do
post :cancel
post :retry
end
collection do
post :check_config
end
end
2020-03-13 15:44:24 +05:30
# Deprecated unscoped routing.
# Issue https://gitlab.com/gitlab-org/gitlab/issues/118849
scope as: 'deprecated' do
2020-06-23 00:09:42 +05:30
draw :pipelines
2020-03-13 15:44:24 +05:30
draw :repository
end
2019-09-30 21:07:59 +05:30
2020-01-01 13:55:28 +05:30
# All new routes should go under /-/ scope.
# Look for scope '-' at the top of the file.
# Legacy routes.
# Introduced in 12.0.
# Should be removed with https://gitlab.com/gitlab-org/gitlab/issues/28848.
2020-05-24 23:13:21 +05:30
Gitlab::Routing.redirect_legacy_paths(self, :mirror, :tags,
2020-01-01 13:55:28 +05:30
:cycle_analytics, :mattermost, :variables, :triggers,
2020-05-24 23:13:21 +05:30
:environments, :protected_environments, :error_tracking, :alert_management,
2020-03-13 15:44:24 +05:30
:serverless, :clusters, :audit_events, :wikis, :merge_requests,
2020-05-24 23:13:21 +05:30
:vulnerability_feedback, :security, :dependencies, :issues)
2017-08-17 22:00:37 +05:30
end
2020-01-01 13:55:28 +05:30
# rubocop: disable Cop/PutProjectRoutesUnderScope
2017-08-17 22:00:37 +05:30
resources(:projects,
path: '/',
2017-09-10 17:25:29 +05:30
constraints: { id: Gitlab::PathRegex.project_route_regex },
2017-08-17 22:00:37 +05:30
only: [:edit, :show, :update, :destroy]) do
member do
put :transfer
delete :remove_fork
post :archive
post :unarchive
post :housekeeping
post :toggle_star
post :preview_markdown
post :export
post :remove_export
post :generate_new_export
get :download_export
get :activity
get :refs
2018-03-17 18:26:18 +05:30
put :new_issuable_address
2017-08-17 22:00:37 +05:30
end
2016-11-03 12:29:30 +05:30
end
2020-01-01 13:55:28 +05:30
# rubocop: enable Cop/PutProjectRoutesUnderScope
2019-09-04 21:01:54 +05:30
end
2016-11-03 12:29:30 +05:30
end