Skip to content
This repository has been archived by the owner on May 12, 2018. It is now read-only.

Commit

Permalink
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ci
Browse files Browse the repository at this point in the history
  • Loading branch information
dzaporozhets committed Jun 3, 2015
2 parents 123c8e0 + c2c9236 commit c26af87
Show file tree
Hide file tree
Showing 70 changed files with 822 additions and 1,147 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Expand Up @@ -4,6 +4,7 @@ v7.12.0
- Fix pagination on dashboard
- Remove ID column from runners list in the admin area
- Increase default timeout for builds to 60 minutes
- Using .gitlab-ci.yml file instead of jobs

v7.11.0
- Deploy Jobs API calls
Expand Down
20 changes: 0 additions & 20 deletions app/controllers/jobs_controller.rb

This file was deleted.

19 changes: 12 additions & 7 deletions app/controllers/projects_controller.rb
Expand Up @@ -3,9 +3,9 @@ class ProjectsController < ApplicationController

before_filter :authenticate_user!, except: [:build, :badge, :index, :show]
before_filter :authenticate_public_page!, only: :show
before_filter :project, only: [:build, :integration, :show, :badge, :edit, :update, :destroy, :toggle_shared_runners]
before_filter :project, only: [:build, :integration, :show, :badge, :edit, :update, :destroy, :toggle_shared_runners, :dumped_yaml]
before_filter :authorize_access_project!, except: [:build, :gitlab, :badge, :index, :show, :new, :create]
before_filter :authorize_manage_project!, only: [:edit, :integration, :update, :destroy, :toggle_shared_runners]
before_filter :authorize_manage_project!, only: [:edit, :integration, :update, :destroy, :toggle_shared_runners, :dumped_yaml]
before_filter :authenticate_token!, only: [:build]
before_filter :no_cache, only: [:badge]
protect_from_forgery except: :build
Expand Down Expand Up @@ -49,11 +49,13 @@ def integration
end

def create
unless current_user.can_manage_project?(YAML.load(params["project"])[:id])
project_data = OpenStruct.new(JSON.parse(params["project"]))

unless current_user.can_manage_project?(project_data.id)
return redirect_to root_path, alert: 'You have to have at least master role to enable CI for this project'
end

@project = CreateProjectService.new.execute(current_user, params[:project], project_url(":project_id"))
@project = CreateProjectService.new.execute(current_user, project_data, project_url(":project_id"))

if @project.persisted?
redirect_to project_path(@project, show_guide: true), notice: 'Project was successfully created.'
Expand Down Expand Up @@ -107,6 +109,10 @@ def toggle_shared_runners
redirect_to :back
end

def dumped_yaml
send_data @project.generated_yaml_config, filename: '.gitlab-ci.yml'
end

protected

def project
Expand All @@ -121,8 +127,7 @@ def no_cache

def project_params
params.require(:project).permit(:path, :timeout, :timeout_in_minutes, :default_ref, :always_build,
:polling_interval, :public, :ssh_url_to_repo, :allow_git_fetch, :skip_refs, :email_recipients,
:email_add_pusher, :email_only_broken_builds, :coverage_regex, :shared_runners_enabled, :token,
{ jobs_attributes: [:id, :name, :build_branches, :build_tags, :tag_list, :commands, :refs, :_destroy, :job_type] })
:polling_interval, :public, :ssh_url_to_repo, :allow_git_fetch, :email_recipients,
:email_add_pusher, :email_only_broken_builds, :coverage_regex, :shared_runners_enabled, :token)
end
end
31 changes: 4 additions & 27 deletions app/models/build.rb
Expand Up @@ -14,7 +14,6 @@
# commit_id :integer
# coverage :float
# commands :text
# job_id :integer
#

class Build < ActiveRecord::Base
Expand All @@ -23,7 +22,6 @@ class Build < ActiveRecord::Base
belongs_to :commit
belongs_to :project
belongs_to :runner
belongs_to :job, -> { with_deleted }

validates :commit, presence: true
validates :status, presence: true
Expand Down Expand Up @@ -64,15 +62,8 @@ def create_from(build)

def retry(build)
new_build = Build.new(status: :pending)

if build.job
new_build.commands = build.job.commands
new_build.tag_list = build.job.tag_list
else
new_build.commands = build.commands
end

new_build.job_id = build.job_id
new_build.commands = build.commands
new_build.tag_list = build.tag_list
new_build.commit_id = build.commit_id
new_build.project_id = build.project_id
new_build.save
Expand Down Expand Up @@ -109,8 +100,8 @@ def retry(build)
WebHookService.new.build_end(build)
end

if build.commit.success? && !(build.job && build.job.deploy?)
build.commit.create_deploy_builds(build.ref)
if build.commit.success? && !build.deploy?
build.commit.create_deploy_builds
end

project.execute_services(build)
Expand Down Expand Up @@ -206,18 +197,4 @@ def extract_coverage(text, regex)
# so we just silentrly ignore error for now
end
end

def job_name
if job
job.name
end
end

def for_tag?
if job && job.build_tags
true
else
false
end
end
end
39 changes: 14 additions & 25 deletions app/models/commit.rb
Expand Up @@ -15,7 +15,6 @@
class Commit < ActiveRecord::Base
belongs_to :project
has_many :builds, dependent: :destroy
has_many :jobs, through: :builds

serialize :push_data

Expand Down Expand Up @@ -93,31 +92,19 @@ def project_recipients
end

def create_builds
project.jobs.where(build_branches: true).active.parallel.map do |job|
create_build_from_job(job)
end
end

def create_builds_for_tag(ref = '')
project.jobs.where(build_tags: true).active.parallel.map do |job|
create_build_from_job(job, ref)
filter_param = tag? ? :tags : :branches
config_processor.builds.each do |build_attrs|
if build_attrs[filter_param]
builds.create!({ project: project }.merge(build_attrs.extract!(:name, :commands, :tag_list)))
end
end
end

def create_build_from_job(job, ref = '')
build = builds.new(commands: job.commands)
build.tag_list = job.tag_list
build.project_id = project_id
build.job = job
build.save
build
end

def builds_without_retry
@builds_without_retry ||=
begin
grouped_builds = builds.group_by(&:job)
grouped_builds.map do |job, builds|
grouped_builds = builds.group_by(&:name)
grouped_builds.map do |name, builds|
builds.sort_by(&:id).last
end
end
Expand All @@ -127,11 +114,9 @@ def retried_builds
@retried_builds ||= (builds - builds_without_retry)
end

def create_deploy_builds(ref)
project.jobs.deploy.active.each do |job|
if job.run_for_ref?(ref)
create_build_from_job(job)
end
def create_deploy_builds
config_processor.deploy_builds_for_ref(ref).each do |build_attrs|
builds.create!({ project: project }.merge(build_attrs))
end
end

Expand Down Expand Up @@ -194,4 +179,8 @@ def coverage
def matrix?
builds_without_retry.size > 1
end

def config_processor
@config_processor ||= GitlabCiYamlProcessor.new(push_data[:ci_yaml_file])
end
end
49 changes: 0 additions & 49 deletions app/models/job.rb

This file was deleted.

42 changes: 1 addition & 41 deletions app/models/project.rb
Expand Up @@ -32,7 +32,6 @@ class Project < ActiveRecord::Base
has_many :runner_projects, dependent: :destroy
has_many :runners, through: :runner_projects
has_many :web_hooks, dependent: :destroy
has_many :jobs, dependent: :destroy
has_many :events, dependent: :destroy

# Project services
Expand All @@ -41,8 +40,6 @@ class Project < ActiveRecord::Base
has_one :slack_service, dependent: :destroy
has_one :mail_service, dependent: :destroy

accepts_nested_attributes_for :jobs, allow_destroy: true

#
# Validations
#
Expand All @@ -55,8 +52,6 @@ class Project < ActiveRecord::Base
presence: true,
if: ->(project) { project.always_build.present? }

validate :validate_jobs

scope :public_only, ->() { where(public: true) }

before_validation :set_default_values
Expand All @@ -69,13 +64,7 @@ def base_build_script
eos
end

def parse(project_params)
project = if project_params.is_a?(String)
YAML.load(project_params)
else
project_params
end

def parse(project)
params = {
name: project.name_with_namespace,
gitlab_id: project.id,
Expand Down Expand Up @@ -171,39 +160,10 @@ def timeout_in_minutes=(value)
self.timeout = value.to_i * 60
end

def skip_ref?(ref_name)
if skip_refs.present?
skip_refs.delete(" ").split(",").each do |ref|
return true if File.fnmatch(ref, ref_name)
end

false
else
false
end
end

def create_commit_for_tag?(tag)
jobs.where(build_tags: true).active.parallel.any? ||
jobs.active.deploy.any?{ |job| job.run_for_ref?(tag)}
end

def coverage_enabled?
coverage_regex.present?
end

def build_default_job
jobs.build(commands: Project.base_build_script)
end

def validate_jobs
remaining_jobs = jobs.reject(&:marked_for_destruction?)

if remaining_jobs.empty?
errors.add(:jobs, "At least one foo")
end
end

# Build a clone-able repo url
# using http and basic auth
def repo_url_with_auth
Expand Down
4 changes: 3 additions & 1 deletion app/models/project_services/hip_chat_message.rb
Expand Up @@ -8,12 +8,14 @@ def initialize(build)
def to_s
lines = Array.new
lines.push("<a href=\"#{RoutesHelper.project_url(project)}\">#{project.name}</a> - ")

if commit.matrix?
lines.push("<a href=\"#{RoutesHelper.project_ref_commit_url(project, commit.ref, commit.sha)}\">Commit ##{commit.id}</a></br>")
else
first_build = commit.builds_without_retry.first
lines.push("<a href=\"#{RoutesHelper.project_build_url(project, first_build)}\">Build '#{first_build.job_name}' ##{first_build.id}</a></br>")
lines.push("<a href=\"#{RoutesHelper.project_build_url(project, first_build)}\">Build '#{first_build.name}' ##{first_build.id}</a></br>")
end

lines.push("#{commit.short_sha} #{commit.git_author_name} - #{commit.git_commit_message}</br>")
lines.push("#{humanized_status(commit_status)} in #{commit.duration} second(s).")
lines.join('')
Expand Down
2 changes: 1 addition & 1 deletion app/models/project_services/slack_message.rb
Expand Up @@ -24,7 +24,7 @@ def attachments
commit.builds_without_retry.each do |build|
next unless build.failed?
fields << {
title: build.job_name,
title: build.name,
value: "Build <#{RoutesHelper.project_build_url(project, build)}|\##{build.id}> failed in #{build.duration.to_i} second(s)."
}
end
Expand Down

0 comments on commit c26af87

Please sign in to comment.