Add user to Ci::Build to have pusher email address
This commit is contained in:
		
							parent
							
								
									546a3c6561
								
							
						
					
					
						commit
						e3d870d7fc
					
				| 
						 | 
				
			
			@ -32,9 +32,9 @@ module Ci
 | 
			
		|||
    belongs_to :commit, class_name: 'Ci::Commit'
 | 
			
		||||
    belongs_to :runner, class_name: 'Ci::Runner'
 | 
			
		||||
    belongs_to :trigger_request, class_name: 'Ci::TriggerRequest'
 | 
			
		||||
    belongs_to :user
 | 
			
		||||
 | 
			
		||||
    serialize :options
 | 
			
		||||
    serialize :push_data
 | 
			
		||||
 | 
			
		||||
    validates :commit, presence: true
 | 
			
		||||
    validates :status, presence: true
 | 
			
		||||
| 
						 | 
				
			
			@ -196,8 +196,8 @@ module Ci
 | 
			
		|||
    def project_recipients
 | 
			
		||||
      recipients = project.email_recipients.split(' ')
 | 
			
		||||
 | 
			
		||||
      if project.email_add_pusher? && push_data[:user_email].present?
 | 
			
		||||
        recipients << push_data[:user_email]
 | 
			
		||||
      if project.email_add_pusher? && user.present? && user.notification_email.present?
 | 
			
		||||
        recipients << user.notification_email
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      recipients.uniq
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -96,10 +96,10 @@ module Ci
 | 
			
		|||
      builds_without_retry.group(:stage_idx).select(:stage).last
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def create_builds(ref, tag, push_data, trigger_request = nil)
 | 
			
		||||
    def create_builds(ref, tag, user, trigger_request = nil)
 | 
			
		||||
      return if skip_ci? && trigger_request.blank?
 | 
			
		||||
      return unless config_processor
 | 
			
		||||
      CreateBuildsService.new.execute(self, config_processor, ref, tag, push_data, trigger_request)
 | 
			
		||||
      CreateBuildsService.new.execute(self, config_processor, ref, tag, user, trigger_request)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def refs
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,7 @@ class GitlabCiService < CiService
 | 
			
		|||
 | 
			
		||||
    ci_project = Ci::Project.find_by(gitlab_id: project.id)
 | 
			
		||||
    if ci_project
 | 
			
		||||
      Ci::CreateCommitService.new.execute(ci_project, data)
 | 
			
		||||
      Ci::CreateCommitService.new.execute(ci_project, data, current_user)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -130,6 +130,7 @@ class User < ActiveRecord::Base
 | 
			
		|||
  has_many :assigned_merge_requests,  dependent: :destroy, foreign_key: :assignee_id, class_name: "MergeRequest"
 | 
			
		||||
  has_many :oauth_applications, class_name: 'Doorkeeper::Application', as: :owner, dependent: :destroy
 | 
			
		||||
  has_one  :abuse_report,             dependent: :destroy
 | 
			
		||||
  has_many :ci_builds,                dependent: :nullify, class_name: 'Ci::Build'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
module Ci
 | 
			
		||||
  class CreateBuildsService
 | 
			
		||||
    def execute(commit, ref, tag, push_data, config_processor, trigger_request)
 | 
			
		||||
    def execute(commit, ref, tag, user, config_processor, trigger_request)
 | 
			
		||||
      config_processor.stages.any? do |stage|
 | 
			
		||||
        builds_attrs = config_processor.builds_for_stage_and_ref(stage, ref, tag)
 | 
			
		||||
        builds_attrs.map do |build_attrs|
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ module Ci
 | 
			
		|||
                             trigger_request: trigger_request,
 | 
			
		||||
                             ref: ref,
 | 
			
		||||
                             tag: tag,
 | 
			
		||||
                             push_data: push_data,
 | 
			
		||||
                             user: user,
 | 
			
		||||
                           })
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
module Ci
 | 
			
		||||
  class CreateCommitService
 | 
			
		||||
    def execute(project, params)
 | 
			
		||||
    def execute(project, params, user)
 | 
			
		||||
      before_sha = params[:before]
 | 
			
		||||
      sha = params[:checkout_sha] || params[:after]
 | 
			
		||||
      origin_ref = params[:ref]
 | 
			
		||||
| 
						 | 
				
			
			@ -17,21 +17,9 @@ module Ci
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
      tag = origin_ref.start_with?('refs/tags/')
 | 
			
		||||
      push_data = {
 | 
			
		||||
        before: before_sha,
 | 
			
		||||
        after: sha,
 | 
			
		||||
        ref: ref,
 | 
			
		||||
        user_name: params[:user_name],
 | 
			
		||||
        user_email: params[:user_email],
 | 
			
		||||
        repository: params[:repository],
 | 
			
		||||
        commits: params[:commits],
 | 
			
		||||
        total_commits_count: params[:total_commits_count],
 | 
			
		||||
        ci_yaml_file: params[:ci_yaml_file]
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      commit = project.gl_project.ensure_ci_commit(sha)
 | 
			
		||||
      commit.update_committed!
 | 
			
		||||
      commit.create_builds(ref, tag, push_data)
 | 
			
		||||
      commit.create_builds(ref, tag, user)
 | 
			
		||||
 | 
			
		||||
      commit
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
class AddIndexForBuildName < ActiveRecord::Migration
 | 
			
		||||
class AddIndexForBuilds < ActiveRecord::Migration
 | 
			
		||||
  def up
 | 
			
		||||
    add_index :ci_builds, [:commit_id, :stage_idx, :created_at]
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
class AddShaAndRefToBuilds < ActiveRecord::Migration
 | 
			
		||||
class AddRefAndTagToBuilds < ActiveRecord::Migration
 | 
			
		||||
  def change
 | 
			
		||||
    add_column :ci_builds, :tag, :boolean
 | 
			
		||||
    add_column :ci_builds, :ref, :string
 | 
			
		||||
    add_column :ci_builds, :push_data, :text
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,6 @@
 | 
			
		|||
class MigrateShaAndRefToBuild < ActiveRecord::Migration
 | 
			
		||||
class MigrateRefAndTagToBuild < ActiveRecord::Migration
 | 
			
		||||
  def change
 | 
			
		||||
    execute('UPDATE ci_builds SET ref=(SELECT ref FROM ci_commits WHERE ci_commits.id = ci_builds.commit_id) WHERE ref IS NULL')
 | 
			
		||||
    execute('UPDATE ci_builds SET push_data=(SELECT push_data FROM ci_commits WHERE ci_commits.id = ci_builds.commit_id) WHERE push_data IS NULL')
 | 
			
		||||
    execute('UPDATE ci_builds SET tag=(SELECT tag FROM ci_commits WHERE ci_commits.id = ci_builds.commit_id) WHERE tag IS NULL')
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
class AddUserIdToBuild < ActiveRecord::Migration
 | 
			
		||||
  def change
 | 
			
		||||
    add_column :ci_builds, :user_id, :integer
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ module Ci
 | 
			
		|||
          required_attributes! [:project_id, :data, :project_token]
 | 
			
		||||
          project = Ci::Project.find(params[:project_id])
 | 
			
		||||
          authenticate_project_token!(project)
 | 
			
		||||
          commit = Ci::CreateCommitService.new.execute(project, params[:data])
 | 
			
		||||
          commit = Ci::CreateCommitService.new.execute(project, params[:data], current_user)
 | 
			
		||||
 | 
			
		||||
          if commit.persisted?
 | 
			
		||||
            present commit, with: Entities::CommitWithBuilds
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,9 +27,10 @@
 | 
			
		|||
 | 
			
		||||
FactoryGirl.define do
 | 
			
		||||
  factory :ci_build, class: Ci::Build do
 | 
			
		||||
    ref 'master'
 | 
			
		||||
    tag false
 | 
			
		||||
    started_at 'Di 29. Okt 09:51:28 CET 2013'
 | 
			
		||||
    finished_at 'Di 29. Okt 09:53:28 CET 2013'
 | 
			
		||||
    commands 'ls -a'
 | 
			
		||||
    options do
 | 
			
		||||
      {
 | 
			
		||||
        image: "ruby:2.1",
 | 
			
		||||
| 
						 | 
				
			
			@ -43,5 +44,9 @@ FactoryGirl.define do
 | 
			
		|||
      started_at nil
 | 
			
		||||
      finished_at nil
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    factory :ci_build_tag do
 | 
			
		||||
      tag true
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,59 +18,25 @@
 | 
			
		|||
# Read about factories at https://github.com/thoughtbot/factory_girl
 | 
			
		||||
FactoryGirl.define do
 | 
			
		||||
  factory :ci_commit, class: Ci::Commit do
 | 
			
		||||
    ref 'master'
 | 
			
		||||
    before_sha '76de212e80737a608d939f648d959671fb0a0142'
 | 
			
		||||
    sha '97de212e80737a608d939f648d959671fb0a0142'
 | 
			
		||||
    push_data do
 | 
			
		||||
      {
 | 
			
		||||
        ref: 'refs/heads/master',
 | 
			
		||||
        before: '76de212e80737a608d939f648d959671fb0a0142',
 | 
			
		||||
        after: '97de212e80737a608d939f648d959671fb0a0142',
 | 
			
		||||
        user_name: 'Git User',
 | 
			
		||||
        user_email: 'git@example.com',
 | 
			
		||||
        repository: {
 | 
			
		||||
          name: 'test-data',
 | 
			
		||||
          url: 'ssh://git@gitlab.com/test/test-data.git',
 | 
			
		||||
          description: '',
 | 
			
		||||
          homepage: 'http://gitlab.com/test/test-data'
 | 
			
		||||
        },
 | 
			
		||||
        commits: [
 | 
			
		||||
          {
 | 
			
		||||
            id: '97de212e80737a608d939f648d959671fb0a0142',
 | 
			
		||||
            message: 'Test commit message',
 | 
			
		||||
            timestamp: '2014-09-23T13:12:25+02:00',
 | 
			
		||||
            url: 'https://gitlab.com/test/test-data/commit/97de212e80737a608d939f648d959671fb0a0142',
 | 
			
		||||
            author: {
 | 
			
		||||
              name: 'Git User',
 | 
			
		||||
              email: 'git@user.com'
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        total_commits_count: 1,
 | 
			
		||||
        ci_yaml_file: File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml'))
 | 
			
		||||
      }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    gl_project factory: :empty_project
 | 
			
		||||
 | 
			
		||||
    factory :ci_commit_without_jobs do
 | 
			
		||||
      after(:create) do |commit, evaluator|
 | 
			
		||||
        commit.push_data[:ci_yaml_file] = YAML.dump({})
 | 
			
		||||
        commit.save
 | 
			
		||||
        allow(commit).to receive(:ci_yaml_file) { YAML.dump({}) }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    factory :ci_commit_with_one_job do
 | 
			
		||||
      after(:create) do |commit, evaluator|
 | 
			
		||||
        commit.push_data[:ci_yaml_file] = YAML.dump({ rspec: { script: "ls" } })
 | 
			
		||||
        commit.save
 | 
			
		||||
        allow(commit).to receive(:ci_yaml_file) { YAML.dump({ rspec: { script: "ls" } }) }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    factory :ci_commit_with_two_jobs do
 | 
			
		||||
      after(:create) do |commit, evaluator|
 | 
			
		||||
        commit.push_data[:ci_yaml_file] = YAML.dump({ rspec: { script: "ls" }, spinach: { script: "ls" } })
 | 
			
		||||
        commit.save
 | 
			
		||||
        allow(commit).to receive(:ci_yaml_file) { YAML.dump({ rspec: { script: "ls" }, spinach: { script: "ls" } }) }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue