Sha256: 7e79393dc93eeea190ee0f767d5c3a4343bc4ccb41cc8e8b997d63766d78d2f4

Contents?: true

Size: 1.6 KB

Versions: 20

Compression:

Stored size: 1.6 KB

Contents

# http://docs.gitlab.com/ce/ci/variables/README.html
require "uri"
require "danger/request_sources/gitlab"

module Danger
  # ### CI Setup
  #
  # Install dependencies and add a danger step to your .gitlab-ci.yml:
  # ``` yml
  # before_script:
  #  - bundle install
  # danger:
  #   script:
  #    - bundle exec danger
  # ```
  # ### Token Setup
  #
  # Add the `DANGER_GITLAB_API_TOKEN` to your pipeline env variables.
  class GitLabCI < CI
    attr_reader :project_url

    def self.validates_as_ci?(env)
      env.key? "GITLAB_CI"
    end

    def self.validates_as_pr?(env)
      exists = [
        "GITLAB_CI", "CI_PROJECT_PATH"
      ].all? { |x| env[x] }

      exists && determine_merge_request_id(env).to_i > 0
    end

    def self.determine_merge_request_id(env)
      return env["CI_MERGE_REQUEST_ID"] if env["CI_MERGE_REQUEST_ID"]
      return 0 unless env["CI_COMMIT_SHA"]

      project_path = env["CI_PROJECT_PATH"]
      base_commit = env["CI_COMMIT_SHA"]
      client = RequestSources::GitLab.new(nil, env).client

      merge_requests = client.merge_requests(project_path, state: :opened)
      merge_request = merge_requests.auto_paginate.find do |mr|
        mr.sha == base_commit
      end

      merge_request.nil? ? 0 : merge_request.iid
    end

    def initialize(env)
      @env = env
      @repo_slug = env["CI_PROJECT_PATH"]
      @project_url = env["CI_PROJECT_URL"]
    end

    def supported_request_sources
      @supported_request_sources ||= [Danger::RequestSources::GitLab]
    end

    def pull_request_id
      @pull_request_id ||= self.class.determine_merge_request_id(@env)
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
danger-5.11.1 lib/danger/ci_source/gitlab_ci.rb
danger-5.11.0 lib/danger/ci_source/gitlab_ci.rb
danger-5.10.3 lib/danger/ci_source/gitlab_ci.rb
danger-5.10.2 lib/danger/ci_source/gitlab_ci.rb
danger-5.10.1 lib/danger/ci_source/gitlab_ci.rb
danger-5.10.0 lib/danger/ci_source/gitlab_ci.rb
danger-5.9.1 lib/danger/ci_source/gitlab_ci.rb
danger-5.9.0 lib/danger/ci_source/gitlab_ci.rb
danger-5.8.2 lib/danger/ci_source/gitlab_ci.rb
danger-5.8.1 lib/danger/ci_source/gitlab_ci.rb
danger-5.8.0 lib/danger/ci_source/gitlab_ci.rb
danger-5.7.1 lib/danger/ci_source/gitlab_ci.rb
danger-5.7.0 lib/danger/ci_source/gitlab_ci.rb
danger-5.6.7 lib/danger/ci_source/gitlab_ci.rb
danger-5.6.6 lib/danger/ci_source/gitlab_ci.rb
danger-5.6.5 lib/danger/ci_source/gitlab_ci.rb
danger-5.6.4 lib/danger/ci_source/gitlab_ci.rb
danger-5.6.3 lib/danger/ci_source/gitlab_ci.rb
danger-5.6.2 lib/danger/ci_source/gitlab_ci.rb
danger-5.6.1 lib/danger/ci_source/gitlab_ci.rb