mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-10 05:06:46 +10:00
- It delegates name, path, gitlab_url, ssh_url_to_repo - Remove ability to set this parameters using CI API This fixes GitLab project rename, namespace change, repository rename, etc.
196 lines
6.0 KiB
Ruby
196 lines
6.0 KiB
Ruby
module Ci
|
|
module API
|
|
# Projects API
|
|
class Projects < Grape::API
|
|
before { authenticate! }
|
|
|
|
resource :projects do
|
|
# Register new webhook for project
|
|
#
|
|
# Parameters
|
|
# project_id (required) - The ID of a project
|
|
# web_hook (required) - WebHook URL
|
|
# Example Request
|
|
# POST /projects/:project_id/webhooks
|
|
post ":project_id/webhooks" do
|
|
required_attributes! [:web_hook]
|
|
|
|
project = Ci::Project.find(params[:project_id])
|
|
|
|
unauthorized! unless can?(current_user, :admin_project, project.gl_project)
|
|
|
|
web_hook = project.web_hooks.new({ url: params[:web_hook] })
|
|
|
|
if web_hook.save
|
|
present web_hook, with: Entities::WebHook
|
|
else
|
|
errors = web_hook.errors.full_messages.join(", ")
|
|
render_api_error!(errors, 400)
|
|
end
|
|
end
|
|
|
|
# Retrieve all Gitlab CI projects that the user has access to
|
|
#
|
|
# Example Request:
|
|
# GET /projects
|
|
get do
|
|
gitlab_projects = current_user.authorized_projects
|
|
gitlab_projects = filter_projects(gitlab_projects)
|
|
gitlab_projects = paginate gitlab_projects
|
|
|
|
ids = gitlab_projects.map { |project| project.id }
|
|
|
|
projects = Ci::Project.where("gitlab_id IN (?)", ids).load
|
|
present projects, with: Entities::Project
|
|
end
|
|
|
|
# Retrieve all Gitlab CI projects that the user owns
|
|
#
|
|
# Example Request:
|
|
# GET /projects/owned
|
|
get "owned" do
|
|
gitlab_projects = current_user.owned_projects
|
|
gitlab_projects = filter_projects(gitlab_projects)
|
|
gitlab_projects = paginate gitlab_projects
|
|
|
|
ids = gitlab_projects.map { |project| project.id }
|
|
|
|
projects = Ci::Project.where("gitlab_id IN (?)", ids).load
|
|
present projects, with: Entities::Project
|
|
end
|
|
|
|
# Retrieve info for a Gitlab CI project
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a project
|
|
# Example Request:
|
|
# GET /projects/:id
|
|
get ":id" do
|
|
project = Ci::Project.find(params[:id])
|
|
unauthorized! unless can?(current_user, :read_project, project.gl_project)
|
|
|
|
present project, with: Entities::Project
|
|
end
|
|
|
|
# Create Gitlab CI project using Gitlab project info
|
|
#
|
|
# Parameters:
|
|
# gitlab_id (required) - The gitlab id of the project
|
|
# default_ref - The branch to run against (defaults to `master`)
|
|
# Example Request:
|
|
# POST /projects
|
|
post do
|
|
required_attributes! [:gitlab_id]
|
|
|
|
filtered_params = {
|
|
gitlab_id: params[:gitlab_id],
|
|
# we accept gitlab_url for backward compatibility for a while (added to 7.11)
|
|
default_ref: params[:default_ref] || 'master'
|
|
}
|
|
|
|
project = Ci::Project.new(filtered_params)
|
|
project.build_missing_services
|
|
|
|
if project.save
|
|
present project, with: Entities::Project
|
|
else
|
|
errors = project.errors.full_messages.join(", ")
|
|
render_api_error!(errors, 400)
|
|
end
|
|
end
|
|
|
|
# Update a Gitlab CI project
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a project
|
|
# default_ref - The branch to run against (defaults to `master`)
|
|
# Example Request:
|
|
# PUT /projects/:id
|
|
put ":id" do
|
|
project = Ci::Project.find(params[:id])
|
|
|
|
unauthorized! unless can?(current_user, :admin_project, project.gl_project)
|
|
|
|
attrs = attributes_for_keys [:default_ref]
|
|
|
|
if project.update_attributes(attrs)
|
|
present project, with: Entities::Project
|
|
else
|
|
errors = project.errors.full_messages.join(", ")
|
|
render_api_error!(errors, 400)
|
|
end
|
|
end
|
|
|
|
# Remove a Gitlab CI project
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a project
|
|
# Example Request:
|
|
# DELETE /projects/:id
|
|
delete ":id" do
|
|
project = Ci::Project.find(params[:id])
|
|
|
|
unauthorized! unless can?(current_user, :admin_project, project.gl_project)
|
|
|
|
project.destroy
|
|
end
|
|
|
|
# Link a Gitlab CI project to a runner
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a CI project
|
|
# runner_id (required) - The ID of a runner
|
|
# Example Request:
|
|
# POST /projects/:id/runners/:runner_id
|
|
post ":id/runners/:runner_id" do
|
|
project = Ci::Project.find(params[:id])
|
|
runner = Ci::Runner.find(params[:runner_id])
|
|
|
|
unauthorized! unless can?(current_user, :admin_project, project.gl_project)
|
|
|
|
options = {
|
|
project_id: project.id,
|
|
runner_id: runner.id
|
|
}
|
|
|
|
runner_project = Ci::RunnerProject.new(options)
|
|
|
|
if runner_project.save
|
|
present runner_project, with: Entities::RunnerProject
|
|
else
|
|
errors = project.errors.full_messages.join(", ")
|
|
render_api_error!(errors, 400)
|
|
end
|
|
end
|
|
|
|
# Remove a Gitlab CI project from a runner
|
|
#
|
|
# Parameters:
|
|
# id (required) - The ID of a CI project
|
|
# runner_id (required) - The ID of a runner
|
|
# Example Request:
|
|
# DELETE /projects/:id/runners/:runner_id
|
|
delete ":id/runners/:runner_id" do
|
|
project = Ci::Project.find(params[:id])
|
|
runner = Ci::Runner.find(params[:runner_id])
|
|
|
|
unauthorized! unless can?(current_user, :admin_project, project.gl_project)
|
|
|
|
options = {
|
|
project_id: project.id,
|
|
runner_id: runner.id
|
|
}
|
|
|
|
runner_project = Ci::RunnerProject.find_by(options)
|
|
|
|
if runner_project.present?
|
|
runner_project.destroy
|
|
else
|
|
not_found!
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|