Read about our upcoming Code of Conduct on this issue

This instance will be upgraded to Heptapod 0.28.1 on 2022-01-26 at 16:00 UTC+1 (a few minutes of down time)

project.rb 9.52 KB
Newer Older
1
2
3
4
5
require 'constraints/project_url_constrainer'

resources :projects, only: [:index, :new, :create]

draw :git_http
6

7
8
9
10
11
12
constraints(ProjectUrlConstrainer.new) do
  scope(path: '*namespace_id', as: :namespace) do
    scope(path: ':project_id',
          constraints: { project_id: Gitlab::Regex.project_route_regex },
          module: :projects,
          as: :project) do
13

14
15
16
17
18
19
20
21
22
23
24
25
      resources :autocomplete_sources, only: [] do
        collection do
          get 'emojis'
          get 'members'
          get 'issues'
          get 'merge_requests'
          get 'labels'
          get 'milestones'
          get 'commands'
        end
      end

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
65
66
67
68
69
70
71
72
73
74
75
      #
      # Templates
      #
      get '/templates/:template_type/:key' => 'templates#show', as: :template

      resource  :avatar, only: [:show, :destroy]
      resources :commit, only: [:show], constraints: { id: /\h{7,40}/ } do
        member do
          get :branches
          get :pipelines
          post :revert
          post :cherry_pick
          get :diff_for_path
        end
      end

      resources :compare, only: [:index, :create] do
        collection do
          get :diff_for_path
        end
      end

      get '/compare/:from...:to', to: 'compare#show', as: 'compare', constraints: { from: /.+/, to: /.+/ }

      # Don't use format parameter as file extension (old 3.0.x behavior)
      # See http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments
      scope format: false do
        resources :network, only: [:show], constraints: { id: Gitlab::Regex.git_reference_regex }

        resources :graphs, only: [:show], constraints: { id: Gitlab::Regex.git_reference_regex } do
          member do
            get :commits
            get :ci
            get :languages
          end
        end
      end

      resources :snippets, concerns: :awardable, constraints: { id: /\d+/ } do
        member do
          get 'raw'
        end
      end

      resources :services, constraints: { id: /[^\/]+/ }, only: [:index, :edit, :update] do
        member do
          get :test
        end
      end

Kamil Trzcinski's avatar
Kamil Trzcinski committed
76
      resource :mattermost, only: [:new, :create]
Z.J. van de Weg's avatar
Z.J. van de Weg committed
77

78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
      resources :deploy_keys, constraints: { id: /\d+/ }, only: [:index, :new, :create] do
        member do
          put :enable
          put :disable
        end
      end

      resources :forks, only: [:index, :new, :create]
      resource :import, only: [:new, :create, :show]

      resources :merge_requests, concerns: :awardable, constraints: { id: /\d+/ } do
        member do
          get :commits
          get :diffs
          get :conflicts
93
          get :conflict_for_path
94
95
96
          get :pipelines
          get :merge_check
          post :merge
97
          get :merge_widget_refresh
98
99
          post :cancel_merge_when_build_succeeds
          get :ci_status
100
          get :ci_environments_status
101
102
103
104
          post :toggle_subscription
          post :remove_wip
          get :diff_for_path
          post :resolve_conflicts
105
          post :assign_related_issues
106
107
108
109
110
111
112
113
        end

        collection do
          get :branch_from
          get :branch_to
          get :update_branches
          get :diff_for_path
          post :bulk_update
114
          get :new_diffs, path: 'new/diffs'
115
116
117
118
119
120
121
122
123
124
125
        end

        resources :discussions, only: [], constraints: { id: /\h{40}/ } do
          member do
            post :resolve
            delete :resolve, action: :unresolve
          end
        end
      end

      resources :branches, only: [:index, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }
126
      delete :merged_branches, controller: 'branches', action: :destroy_all_merged
127
128
129
130
131
132
133
134
135
136
137
138
139
140
      resources :tags, only: [:index, :show, :new, :create, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex } do
        resource :release, only: [:edit, :update]
      end

      resources :protected_branches, only: [:index, :show, :create, :update, :destroy], constraints: { id: Gitlab::Regex.git_reference_regex }
      resources :variables, only: [:index, :show, :update, :create, :destroy]
      resources :triggers, only: [:index, :create, :destroy]

      resources :pipelines, only: [:index, :new, :create, :show] do
        collection do
          resource :pipelines_settings, path: 'settings', only: [:show, :update]
        end

        member do
141
          get :stage
142
143
          post :cancel
          post :retry
Filipa Lacerda's avatar
Filipa Lacerda committed
144
          get :builds
145
146
147
        end
      end

148
      resources :environments, except: [:destroy] do
149
150
        member do
          post :stop
151
152
          get :terminal
          get '/terminal.ws/authorize', to: 'environments#terminal_websocket_authorize', constraints: { format: nil }
153
154
        end
      end
155
156
157

      resource :cycle_analytics, only: [:show]

158
      namespace :cycle_analytics do
159
        scope :events, controller: 'events' do
160
161
162
163
164
165
166
          get :issue
          get :plan
          get :code
          get :test
          get :review
          get :staging
          get :production
167
168
169
        end
      end

170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
      resources :builds, only: [:index, :show], constraints: { id: /\d+/ } do
        collection do
          post :cancel_all

          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 :retry
          post :play
          post :erase
          get :trace
          get :raw
        end

        resource :artifacts, only: [] do
          get :download
          get :browse, path: 'browse(/*path)', format: false
          get :file, path: 'file/*path', format: false
          post :keep
        end
      end

      resources :hooks, only: [:index, :create, :destroy], constraints: { id: /\d+/ } do
        member do
          get :test
        end
      end

      resources :container_registry, only: [:index, :destroy], constraints: { id: Gitlab::Regex.container_registry_reference_regex }

      resources :milestones, constraints: { id: /\d+/ } do
        member do
          put :sort_issues
          put :sort_merge_requests
        end
      end

      resources :labels, except: [:show], constraints: { id: /\d+/ } do
        collection do
          post :generate
          post :set_priorities
        end

        member do
223
          post :promote
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
          post :toggle_subscription
          delete :remove_priority
        end
      end

      resources :issues, concerns: :awardable, constraints: { id: /\d+/ } do
        member do
          post :toggle_subscription
          post :mark_as_spam
          get :referenced_merge_requests
          get :related_branches
          get :can_create_branch
        end
        collection do
          post  :bulk_update
        end
      end

      resources :project_members, except: [:show, :new, :edit], constraints: { id: /[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

257
      resources :group_links, only: [:index, :create, :update, :destroy], constraints: { id: /\d+/ }
258
259
260
261
262
263
264
265
266

      resources :notes, only: [:index, :create, :destroy, :update], concerns: :awardable, constraints: { id: /\d+/ } do
        member do
          delete :delete_attachment
          post :resolve
          delete :resolve, action: :unresolve
        end
      end

267
      resources :boards, only: [:index, :show] do
268
269
270
271
272
273
274
275
        scope module: :boards do
          resources :issues, only: [:update]

          resources :lists, only: [:index, :create, :update, :destroy] do
            collection do
              post :generate
            end

276
            resources :issues, only: [:index, :create]
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
          end
        end
      end

      resources :todos, only: [:create]

      resources :uploads, only: [:create] do
        collection do
          get ":secret/:filename", action: :show, as: :show, constraints: { filename: /[^\/]+/ }
        end
      end

      resources :runners, only: [:index, :edit, :update, :destroy, :show] do
        member do
          get :resume
          get :pause
        end

        collection do
          post :toggle_shared_runners
        end
      end

      resources :runner_projects, only: [:create, :destroy]
      resources :badges, only: [:index] do
        collection do
          scope '*ref', constraints: { ref: Gitlab::Regex.git_reference_regex } do
            constraints format: /svg/ do
              get :build
              get :coverage
            end
          end
        end
      end
311
312
      namespace :settings do
        resource :members, only: [:show]
313
        resource :integrations, only: [:show]
314
315
      end

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
316
317
318
319
      # Since both wiki and repository routing contains wildcard characters
      # its preferable to keep it below all other project routes
      draw :wiki
      draw :repository
320
    end
321
322
323
324
325
326
327
328
329
330
331

    resources(:projects,
              path: '/',
              constraints: { id: Gitlab::Regex.project_route_regex },
              only: [:edit, :show, :update, :destroy]) do
      member do
        put :transfer
        delete :remove_fork
        post :archive
        post :unarchive
        post :housekeeping
Kamil Trzcinski's avatar
Kamil Trzcinski committed
332
        post :remove_pages
333
334
335
336
337
338
339
340
341
342
343
        post :toggle_star
        post :preview_markdown
        post :export
        post :remove_export
        post :generate_new_export
        get :download_export
        get :activity
        get :refs
        put :new_issue_address
      end
    end
344
345
  end
end