Skip to content
Snippets Groups Projects
Select Git revision
  • move-gl-dropdown
  • improve-table-pagination-spec
  • move-markdown-preview
  • winh-fix-merge-request-spec
  • master default
  • index-namespaces-lower-name
  • winh-single-karma-test
  • 10-3-stable
  • 36782-replace-team-user-role-with-add_role-user-in-specs
  • winh-modal-internal-state
  • tz-ide-file-icons
  • 38869-milestone-select
  • update-autodevops-template
  • jivl-activate-repo-cookie-preferences
  • qa-add-deploy-key
  • docs-move-article-ldap
  • 40780-choose-file
  • 22643-manual-job-page
  • refactor-cluster-show-page-conservative
  • dm-sidekiq-versioning
  • v10.4.0.pre
  • v10.3.0
  • v10.3.0-rc5
  • v10.3.0-rc4
  • v10.3.0-rc3
  • v10.3.0-rc2
  • v10.2.5
  • v10.3.0-rc1
  • v10.0.7
  • v10.1.5
  • v10.2.4
  • v10.2.3
  • v10.2.2
  • v10.2.1
  • v10.3.0.pre
  • v10.2.0
  • v10.2.0-rc4
  • v10.2.0-rc3
  • v10.1.4
  • v10.2.0-rc2
40 results

triggers.rb

Forked from GitLab.org / GitLab FOSS
28935 commits behind the upstream repository.
  • Kamil Trzcinski's avatar
    055afab5
    Make the CI permission model simpler · 055afab5
    Kamil Trzcinski authored
    This MR simplifies CI permission model:
    - read_build: allows to read a list of builds, artifacts and trace
    - update_build: allows to cancel and retry builds
    - create_build: allows to create builds from gitlab-ci.yml (not yet implemented)
    - admin_build: allows to manage triggers, runners and variables
    - read_commit_status: allows to read a list of commit statuses (including the overall of builds)
    - create_commit_status: allows to create a new commit status using API
    
    Remove all extra methods to manage permission.
    Made all controllers to use explicitly the new permissions.
    055afab5
    History
    Make the CI permission model simpler
    Kamil Trzcinski authored
    This MR simplifies CI permission model:
    - read_build: allows to read a list of builds, artifacts and trace
    - update_build: allows to cancel and retry builds
    - create_build: allows to create builds from gitlab-ci.yml (not yet implemented)
    - admin_build: allows to manage triggers, runners and variables
    - read_commit_status: allows to read a list of commit statuses (including the overall of builds)
    - create_commit_status: allows to create a new commit status using API
    
    Remove all extra methods to manage permission.
    Made all controllers to use explicitly the new permissions.
triggers.rb 3.61 KiB
module API
  # Triggers API
  class Triggers < Grape::API
    resource :projects do
      # Trigger a GitLab project build
      #
      # Parameters:
      #   id (required) - The ID of a CI project
      #   ref (required) - The name of project's branch or tag
      #   token (required) - The uniq token of trigger
      #   variables (optional) - The list of variables to be injected into build
      # Example Request:
      #   POST /projects/:id/trigger/builds
      post ":id/trigger/builds" do
        required_attributes! [:ref, :token]

        project = Project.find_with_namespace(params[:id]) || Project.find_by(id: params[:id])
        trigger = Ci::Trigger.find_by_token(params[:token].to_s)
        not_found! unless project && trigger
        unauthorized! unless trigger.project == project

        # validate variables
        variables = params[:variables]
        if variables
          unless variables.is_a?(Hash)
            render_api_error!('variables needs to be a hash', 400)
          end

          unless variables.all? { |key, value| key.is_a?(String) && value.is_a?(String) }
            render_api_error!('variables needs to be a map of key-valued strings', 400)
          end

          # convert variables from Mash to Hash
          variables = variables.to_h
        end

        # create request and trigger builds
        trigger_request = Ci::CreateTriggerRequestService.new.execute(project, trigger, params[:ref].to_s, variables)
        if trigger_request
          present trigger_request, with: Entities::TriggerRequest
        else
          errors = 'No builds created'
          render_api_error!(errors, 400)
        end
      end

      # Get triggers list
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   page (optional) - The page number for pagination
      #   per_page (optional) - The value of items per page to show
      # Example Request:
      #   GET /projects/:id/triggers
      get ':id/triggers' do
        authenticate!
        authorize! :admin_build, user_project

        triggers = user_project.triggers.includes(:trigger_requests)
        triggers = paginate(triggers)

        present triggers, with: Entities::Trigger
      end

      # Get specific trigger of a project
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   token (required) - The `token` of a trigger
      # Example Request:
      #   GET /projects/:id/triggers/:token
      get ':id/triggers/:token' do
        authenticate!
        authorize! :admin_build, user_project

        trigger = user_project.triggers.find_by(token: params[:token].to_s)
        return not_found!('Trigger') unless trigger

        present trigger, with: Entities::Trigger
      end

      # Create trigger
      #
      # Parameters:
      #   id (required) - The ID of a project
      # Example Request:
      #   POST /projects/:id/triggers
      post ':id/triggers' do
        authenticate!
        authorize! :admin_build, user_project

        trigger = user_project.triggers.create

        present trigger, with: Entities::Trigger
      end

      # Delete trigger
      #
      # Parameters:
      #   id (required) - The ID of a project
      #   token (required) - The `token` of a trigger
      # Example Request:
      #   DELETE /projects/:id/triggers/:token
      delete ':id/triggers/:token' do
        authenticate!
        authorize! :admin_build, user_project

        trigger = user_project.triggers.find_by(token: params[:token].to_s)
        return not_found!('Trigger') unless trigger

        trigger.destroy

        present trigger, with: Entities::Trigger
      end
    end
  end
end