Commit 64bfd9d7 authored by Kamil Trzcinski's avatar Kamil Trzcinski

Remove ci_ prefix from all ci related things

parent 8cdd54cc
......@@ -2,8 +2,8 @@ class Admin::RunnerProjectsController < Admin::ApplicationController
before_action :project, only: [:create]
def index
@runner_projects = project.ci_runner_projects.all
@runner_project = project.ci_runner_projects.new
@runner_projects = project.runner_projects.all
@runner_project = project.runner_projects.new
end
def create
......
......@@ -8,7 +8,7 @@ class Projects::BuildsController < Projects::ApplicationController
def index
@scope = params[:scope]
@all_builds = project.ci_builds
@all_builds = project.builds
@builds = @all_builds.order('created_at DESC')
@builds =
case @scope
......@@ -23,7 +23,7 @@ class Projects::BuildsController < Projects::ApplicationController
end
def cancel_all
@project.ci_builds.running_or_pending.each(&:cancel)
@project.builds.running_or_pending.each(&:cancel)
redirect_to namespace_project_builds_path(project.namespace, project)
end
......@@ -76,7 +76,7 @@ class Projects::BuildsController < Projects::ApplicationController
private
def build
@build ||= project.ci_builds.unscoped.find_by!(id: params[:id])
@build ||= project.builds.unscoped.find_by!(id: params[:id])
end
def artifacts_file
......
......@@ -18,7 +18,7 @@ class Projects::RunnerProjectsController < Projects::ApplicationController
end
def destroy
runner_project = project.ci_runner_projects.find(params[:id])
runner_project = project.runner_projects.find(params[:id])
runner_project.destroy
redirect_to runners_path(project)
......
......@@ -5,9 +5,9 @@ class Projects::RunnersController < Projects::ApplicationController
layout 'project_settings'
def index
@runners = project.ci_runners.ordered
@runners = project.runners.ordered
@specific_runners = current_user.ci_authorized_runners.
where.not(id: project.ci_runners).
where.not(id: project.runners).
ordered.page(params[:page]).per(20)
@shared_runners = Ci::Runner.shared.active
@shared_runners_count = @shared_runners.count(:all)
......@@ -60,7 +60,7 @@ class Projects::RunnersController < Projects::ApplicationController
protected
def set_runner
@runner ||= project.ci_runners.find(params[:id])
@runner ||= project.runners.find(params[:id])
end
def runner_params
......
......@@ -4,18 +4,18 @@ class Projects::TriggersController < Projects::ApplicationController
layout 'project_settings'
def index
@triggers = project.ci_triggers
@triggers = project.triggers
@trigger = Ci::Trigger.new
end
def create
@trigger = project.ci_triggers.new
@trigger = project.triggers.new
@trigger.save
if @trigger.valid?
redirect_to namespace_project_triggers_path(@project.namespace, @project)
else
@triggers = project.ci_triggers.select(&:persisted?)
@triggers = project.triggers.select(&:persisted?)
render :index
end
end
......@@ -29,6 +29,6 @@ class Projects::TriggersController < Projects::ApplicationController
private
def trigger
@trigger ||= project.ci_triggers.find(params[:id])
@trigger ||= project.triggers.find(params[:id])
end
end
......@@ -17,6 +17,6 @@ class Projects::VariablesController < Projects::ApplicationController
private
def project_params
params.require(:project).permit({ ci_variables_attributes: [:id, :key, :value, :_destroy] })
params.require(:project).permit({ variables_attributes: [:id, :key, :value, :_destroy] })
end
end
......@@ -65,7 +65,7 @@ module CiStatusHelper
end
def no_runners_for_project?(project)
project.ci_runners.blank? &&
project.runners.blank? &&
Ci::Runner.shared.blank?
end
end
......@@ -287,7 +287,7 @@ module Ci
end
def project_variables
project.ci_variables.map do |variable|
project.variables.map do |variable|
{ key: variable.key, value: variable.value, public: false }
end
end
......
......@@ -52,7 +52,7 @@ module Ci
def assign_to(project, current_user = nil)
self.is_shared = false if shared?
self.save
project.ci_runner_projects.create!(runner_id: self.id)
project.runner_projects.create!(runner_id: self.id)
end
def display_name
......
......@@ -128,15 +128,15 @@ class Project < ActiveRecord::Base
has_one :import_data, dependent: :destroy, class_name: "ProjectImportData"
has_many :commit_statuses, dependent: :destroy, class_name: 'CommitStatus', foreign_key: :gl_project_id
has_many :ci_commits, dependent: :destroy, class_name: 'Ci::Commit', foreign_key: :gl_project_id
has_many :ci_statuses, dependent: :destroy, class_name: 'CommitStatus', foreign_key: :gl_project_id
has_many :ci_builds, class_name: 'Ci::Build', foreign_key: :gl_project_id # the builds are created from the ci_statuses
has_many :ci_runner_projects, dependent: :destroy, class_name: 'Ci::RunnerProject', foreign_key: :gl_project_id
has_many :ci_runners, through: :ci_runner_projects, source: :runner, class_name: 'Ci::Runner'
has_many :ci_variables, dependent: :destroy, class_name: 'Ci::Variable', foreign_key: :gl_project_id
has_many :ci_triggers, dependent: :destroy, class_name: 'Ci::Trigger', foreign_key: :gl_project_id
has_many :builds, class_name: 'Ci::Build', foreign_key: :gl_project_id # the builds are created from the commit_statuses
has_many :runner_projects, dependent: :destroy, class_name: 'Ci::RunnerProject', foreign_key: :gl_project_id
has_many :runners, through: :runner_projects, source: :runner, class_name: 'Ci::Runner'
has_many :variables, dependent: :destroy, class_name: 'Ci::Variable', foreign_key: :gl_project_id
has_many :triggers, dependent: :destroy, class_name: 'Ci::Trigger', foreign_key: :gl_project_id
accepts_nested_attributes_for :ci_variables, allow_destroy: true
accepts_nested_attributes_for :variables, allow_destroy: true
delegate :name, to: :owner, allow_nil: true, prefix: true
delegate :members, to: :team, prefix: true
......@@ -822,7 +822,7 @@ class Project < ActiveRecord::Base
end
def any_runners?(&block)
if ci_runners.active.any?(&block)
if runners.active.any?(&block)
return true
end
......
......@@ -134,7 +134,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'
has_many :builds, dependent: :nullify, class_name: 'Ci::Build'
#
......
module Ci
class CreateCommitService
def execute(project, user, params)
sha = params[:checkout_sha] || params[:after]
origin_ref = params[:ref]
unless origin_ref && sha.present?
return false
end
ref = origin_ref.gsub(/\Arefs\/(tags|heads)\//, '')
# Skip branch removal
if sha == Ci::Git::BLANK_SHA
return false
end
tag = origin_ref.start_with?('refs/tags/')
commit = project.ensure_ci_commit(sha)
unless commit.skip_ci?
commit.update_committed!
commit.create_builds(ref, tag, user)
end
commit
end
end
end
class CreateCommitBuildsService
def execute(project, user, params)
return false unless project.builds_enabled?
sha = params[:checkout_sha] || params[:after]
origin_ref = params[:ref]
unless origin_ref && sha.present?
return false
end
ref = origin_ref.gsub(/\Arefs\/(tags|heads)\//, '')
# Skip branch removal
if sha == Ci::Git::BLANK_SHA
return false
end
tag = origin_ref.start_with?('refs/tags/')
commit = project.ensure_ci_commit(sha)
unless commit.skip_ci?
commit.update_committed!
commit.create_builds(ref, tag, user)
end
commit
end
end
......@@ -61,6 +61,7 @@ class GitPushService
EventCreateService.new.push(project, user, @push_data)
project.execute_hooks(@push_data.dup, :push_hooks)
project.execute_services(@push_data.dup, :push_hooks)
CreateCommitBuildsService.new.execute(project, @user, @push_data)
ProjectCacheWorker.perform_async(project.id)
end
......
......@@ -10,6 +10,7 @@ class GitTagPushService
EventCreateService.new.push(project, user, @push_data)
project.execute_hooks(@push_data.dup, :tag_push_hooks)
project.execute_services(@push_data.dup, :tag_push_hooks)
CreateCommitBuildsService.new.execute(project, @user, @push_data)
ProjectCacheWorker.perform_async(project.id)
true
......
......@@ -82,7 +82,7 @@
= project.name_with_namespace
%td
.pull-right
= form_for [:admin, project.namespace, project, project.ci_runner_projects.new] do |f|
= form_for [:admin, project.namespace, project, project.runner_projects.new] do |f|
= f.hidden_field :runner_id, value: @runner.id
= f.submit 'Enable', class: 'btn btn-xs'
= paginate @projects
......
......@@ -44,7 +44,7 @@
= icon('cubes fw')
%span
Builds
%span.count.builds_counter= @project.ci_builds.running_or_pending.count(:all)
%span.count.builds_counter= @project.builds.running_or_pending.count(:all)
- if project_nav_tab? :graphs
= nav_link(controller: %w(graphs)) do
......
......@@ -2,17 +2,17 @@
%ul
%li
Total:
%strong= pluralize @project.ci_builds.count(:all), 'build'
%strong= pluralize @project.builds.count(:all), 'build'
%li
Successful:
%strong= pluralize @project.ci_builds.success.count(:all), 'build'
%strong= pluralize @project.builds.success.count(:all), 'build'
%li
Failed:
%strong= pluralize @project.ci_builds.failed.count(:all), 'build'
%strong= pluralize @project.builds.failed.count(:all), 'build'
%li
Success ratio:
%strong
#{success_ratio(@project.ci_builds.success, @project.ci_builds.failed)}%
#{success_ratio(@project.builds.success, @project.builds.failed)}%
%li
Commits covered:
%strong
......
......@@ -15,10 +15,10 @@
- if runner.belongs_to_one_project?
= link_to 'Remove runner', runner_path(runner), data: { confirm: "Are you sure?" }, method: :delete, class: 'btn btn-danger btn-sm'
- else
- runner_project = @project.ci_runner_projects.find_by(runner_id: runner)
- runner_project = @project.runner_projects.find_by(runner_id: runner)
= link_to 'Disable for this project', namespace_project_runner_project_path(@project.namespace, @project, runner_project), data: { confirm: "Are you sure?" }, method: :delete, class: 'btn btn-danger btn-sm'
- elsif runner.specific?
= form_for [@project.namespace, @project, @project.ci_runner_projects.new] do |f|
= form_for [@project.namespace, @project, @project.runner_projects.new] do |f|
= f.hidden_field :runner_id, value: runner.id
= f.submit 'Enable for this project', class: 'btn btn-sm'
.pull-right
......
......@@ -19,7 +19,7 @@
- @project.errors.full_messages.each do |msg|
%li= msg
= f.fields_for :ci_variables do |variable_form|
= f.fields_for :variables do |variable_form|
.form-group
= variable_form.label :key, 'Key', class: 'control-label'
.col-sm-10
......@@ -34,7 +34,7 @@
%hr
%p
.clearfix
= f.link_to_add "Add a variable", :ci_variables, class: 'btn btn-success pull-right'
= f.link_to_add "Add a variable", :variables, class: 'btn btn-success pull-right'
.form-actions
= f.submit 'Save changes', class: 'btn btn-save', return_to: request.original_url
......@@ -38,7 +38,7 @@ module Ci
)
elsif project = Project.find_by(runners_token: params[:token])
# Create a specific runner for project.
project.ci_runners.create(
project.runners.create(
description: params[:description],
tag_list: params[:tag_list]
)
......
......@@ -16,10 +16,10 @@ module Ci
def push(from, to, format)
@labels << from.strftime(format)
@total << project.ci_builds.
@total << project.builds.
where("? > #{Ci::Build.table_name}.created_at AND #{Ci::Build.table_name}.created_at > ?", to, from).
count(:all)
@success << project.ci_builds.
@success << project.builds.
where("? > #{Ci::Build.table_name}.created_at AND #{Ci::Build.table_name}.created_at > ?", to, from).
success.count(:all)
end
......
......@@ -37,7 +37,7 @@ describe "Builds" do
context "All builds" do
before do
@project.ci_builds.running_or_pending.each(&:success)
@project.builds.running_or_pending.each(&:success)
visit namespace_project_builds_path(@project.namespace, @project, scope: :all)
end
......
......@@ -21,9 +21,9 @@ describe "Runners" do
@specific_runner = FactoryGirl.create :ci_specific_runner
@specific_runner2 = FactoryGirl.create :ci_specific_runner
@specific_runner3 = FactoryGirl.create :ci_specific_runner
@project.ci_runners << @specific_runner
@project2.ci_runners << @specific_runner2
@project3.ci_runners << @specific_runner3
@project.runners << @specific_runner
@project2.runners << @specific_runner2
@project3.runners << @specific_runner3
visit runners_path(@project)
end
......@@ -48,7 +48,7 @@ describe "Runners" do
end
it "disables specific runner for project" do
@project2.ci_runners << @specific_runner
@project2.runners << @specific_runner
visit runners_path(@project)
within ".activated-specific-runners" do
......@@ -85,7 +85,7 @@ describe "Runners" do
@project = FactoryGirl.create :empty_project
@project.team << [user, :master]
@specific_runner = FactoryGirl.create :ci_specific_runner
@project.ci_runners << @specific_runner
@project.runners << @specific_runner
end
it "shows runner information" do
......
......@@ -13,16 +13,16 @@ describe 'Triggers' do
context 'create a trigger' do
before do
click_on 'Add Trigger'
expect(@project.ci_triggers.count).to eq(1)
expect(@project.triggers.count).to eq(1)
end
it 'contains trigger token' do
expect(page).to have_content(@project.ci_triggers.first.token)
expect(page).to have_content(@project.triggers.first.token)
end
it 'revokes the trigger' do
click_on 'Revoke'
expect(@project.ci_triggers.count).to eq(0)
expect(@project.triggers.count).to eq(0)
end
end
end
......@@ -18,7 +18,7 @@ describe "Variables" do
click_on "Save changes"
expect(page).to have_content("Variables were successfully updated.")
expect(@project.ci_variables.count).to eq(1)
expect(@project.variables.count).to eq(1)
end
end
end
......@@ -232,7 +232,7 @@ describe Ci::Build, models: true do
end
before do
build.project.ci_variables << Ci::Variable.new(key: 'SECRET_KEY', value: 'secret_value')
build.project.variables << Ci::Variable.new(key: 'SECRET_KEY', value: 'secret_value')
end
it { is_expected.to eq(predefined_variables + yaml_variables + secure_variables) }
......@@ -264,7 +264,7 @@ describe Ci::Build, models: true do
describe :can_be_served? do
let(:runner) { FactoryGirl.create :ci_specific_runner }
before { build.project.ci_runners << runner }
before { build.project.runners << runner }
context 'runner without tags' do
it 'can handle builds without tags' do
......@@ -307,7 +307,7 @@ describe Ci::Build, models: true do
let(:runner) { FactoryGirl.create :ci_specific_runner }
before do
build.project.ci_runners << runner
build.project.runners << runner
runner.update_attributes(contacted_at: 1.second.ago)
end
......@@ -344,7 +344,7 @@ describe Ci::Build, models: true do
let(:runner) { FactoryGirl.create :ci_specific_runner, contacted_at: 1.second.ago }
before do
build.project.ci_runners << runner
build.project.runners << runner
runner.save
end
......
......@@ -118,8 +118,8 @@ describe Ci::Runner, models: true do
runner = FactoryGirl.create(:ci_specific_runner)
project = FactoryGirl.create(:empty_project)
project1 = FactoryGirl.create(:empty_project)
project.ci_runners << runner
project1.ci_runners << runner
project.runners << runner
project1.runners << runner
expect(runner.belongs_to_one_project?).to be_falsey
end
......@@ -127,7 +127,7 @@ describe Ci::Runner, models: true do
it "returns true" do
runner = FactoryGirl.create(:ci_specific_runner)
project = FactoryGirl.create(:empty_project)
project.ci_runners << runner
project.runners << runner
expect(runner.belongs_to_one_project?).to be_truthy
end
......
......@@ -54,13 +54,13 @@ describe Project, models: true do
it { is_expected.to have_one(:slack_service).dependent(:destroy) }
it { is_expected.to have_one(:pushover_service).dependent(:destroy) }
it { is_expected.to have_one(:asana_service).dependent(:destroy) }
it { is_expected.to have_many(:ci_commits) }
it { is_expected.to have_many(:commit_statuses) }
it { is_expected.to have_many(:ci_builds) }
it { is_expected.to have_many(:ci_runner_projects) }
it { is_expected.to have_many(:ci_runners) }
it { is_expected.to have_many(:ci_variables) }
it { is_expected.to have_many(:ci_triggers) }
it { is_expected.to have_many(:ci_commits) }
it { is_expected.to have_many(:builds) }
it { is_expected.to have_many(:runner_projects) }
it { is_expected.to have_many(:runners) }
it { is_expected.to have_many(:variables) }
it { is_expected.to have_many(:triggers) }
end
describe 'modules' do
......@@ -519,7 +519,7 @@ describe Project, models: true do
end
it 'there is a specific runner' do
project.ci_runners << specific_runner
project.runners << specific_runner
expect(project.any_runners?).to be_truthy
end
......@@ -529,7 +529,7 @@ describe Project, models: true do
end
it 'checks the presence of specific runner' do
project.ci_runners << specific_runner
project.runners << specific_runner
expect(project.any_runners? { |runner| runner == specific_runner }).to be_truthy
end
end
......
......@@ -68,7 +68,7 @@ describe Ci::API::API do
it "returns variables" do
commit = FactoryGirl.create(:ci_commit, project: project)
commit.create_builds('master', false, nil)
project.ci_variables << Ci::Variable.new(key: "SECRET_KEY", value: "secret_value")
project.variables << Ci::Variable.new(key: "SECRET_KEY", value: "secret_value")
post ci_api("/builds/register"), token: runner.token, info: { platform: :darwin }
......@@ -87,7 +87,7 @@ describe Ci::API::API do
trigger_request = FactoryGirl.create(:ci_trigger_request_with_variables, commit: commit, trigger: trigger)
commit.create_builds('master', false, nil, trigger_request)
project.ci_variables << Ci::Variable.new(key: "SECRET_KEY", value: "secret_value")
project.variables << Ci::Variable.new(key: "SECRET_KEY", value: "secret_value")
post ci_api("/builds/register"), token: runner.token, info: { platform: :darwin }
......
......@@ -34,7 +34,7 @@ describe Ci::API::API do
before { post ci_api("/runners/register"), token: project.token }
it { expect(response.status).to eq(201) }
it { expect(project.ci_runners.size).to eq(1) }
it { expect(project.runners.size).to eq(1) }
end
it "should return 403 error if token is invalid" do
......
require 'spec_helper'
module Ci
describe CreateCommitService, services: true do
let(:service) { CreateCommitService.new }
let(:project) { FactoryGirl.create(:empty_project) }
let(:user) { nil }
before do
stub_ci_commit_to_return_yaml_file
end
describe :execute do
context 'valid params' do
let(:commit) do
service.execute(project, user,
ref: 'refs/heads/master',
before: '00000000',
after: '31das312',
commits: [ { message: "Message" } ]
)
end
it { expect(commit).to be_kind_of(Commit) }
it { expect(commit).to be_valid }
it { expect(commit).to be_persisted }
it { expect(commit).to eq(project.ci_commits.last) }
it { expect(commit.builds.first).to be_kind_of(Build) }
end
context "skip tag if there is no build for it" do
it "creates commit if there is appropriate job" do
result = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: [ { message: "Message" } ]
)
expect(result).to be_persisted
end
it "creates commit if there is no appropriate job but deploy job has right ref setting" do
config = YAML.dump({ deploy: { deploy: "ls", only: ["0_1"] } })
stub_ci_commit_yaml_file(config)
result = service.execute(project, user,
ref: 'refs/heads/0_1',
before: '00000000',
after: '31das312',
commits: [ { message: "Message" } ]
)
expect(result).to be_persisted
end
end
it 'skips commits without .gitlab-ci.yml' do
stub_ci_commit_yaml_file(nil)
result = service.execute(project, user,
ref: 'refs/heads/0_1',
before: '00000000',
after: '31das312',
commits: [ { message: 'Message' } ]
)
expect(result).to be_persisted
expect(result.builds.any?).to be_falsey
expect(result.status).to eq('skipped')
expect(result.yaml_errors).to be_nil
end
it 'skips commits if yaml is invalid' do
message = 'message'
allow_any_instance_of(Ci::Commit).to receive(:git_commit_message) { message }
stub_ci_commit_yaml_file('invalid: file: file')
commits = [{ message: message }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.any?).to be false
expect(commit.status).to eq('failed')
expect(commit.yaml_errors).to_not be_nil
end
describe :ci_skip? do
let(:message) { "some message[ci skip]" }
before do
allow_any_instance_of(Ci::Commit).to receive(:git_commit_message) { message }
end
it "skips builds creation if there is [ci skip] tag in commit message" do
commits = [{ message: message }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.any?).to be false
expect(commit.status).to eq("skipped")
end
it "does not skips builds creation if there is no [ci skip] tag in commit message" do
allow_any_instance_of(Ci::Commit).to receive(:git_commit_message) { "some message" }
commits = [{ message: "some message" }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.first.name).to eq("staging")
end
it "skips builds creation if there is [ci skip] tag in commit message and yaml is invalid" do
stub_ci_commit_yaml_file('invalid: file: fiile')
commits = [{ message: message }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.any?).to be false
expect(commit.status).to eq("skipped")
expect(commit.yaml_errors).to be_nil
end
end
it "skips build creation if there are already builds" do
allow_any_instance_of(Ci::Commit).to receive(:ci_yaml_file) { gitlab_ci_yaml }
commits = [{ message: "message" }]
commit = service.execute(project, user,
ref: 'refs/heads/master',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.count(:all)).to eq(2)
commit = service.execute(project, user,
ref: 'refs/heads/master',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.count(:all)).to eq(2)
end
it "creates commit with failed status if yaml is invalid" do
stub_ci_commit_yaml_file('invalid: file')
commits = [{ message: "some message" }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.status).to eq("failed")
expect(commit.builds.any?).to be false
end
end
end
end
require 'spec_helper'
describe CreateCommitBuildsService, services: true do
let(:service) { CreateCommitBuildsService.new }
let(:project) { FactoryGirl.create(:empty_project) }
let(:user) { nil }
before do
stub_ci_commit_to_return_yaml_file
end
describe :execute do
context 'valid params' do
let(:commit) do
service.execute(project, user,
ref: 'refs/heads/master',
before: '00000000',
after: '31das312',
commits: [{ message: "Message" }]
)
end
it { expect(commit).to be_kind_of(Commit) }
it { expect(commit).to be_valid }
it { expect(commit).to be_persisted }
it { expect(commit).to eq(project.ci_commits.last) }
it { expect(commit.builds.first).to be_kind_of(Build) }
end
context "skip tag if there is no build for it" do
it "creates commit if there is appropriate job" do
result = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: [{ message: "Message" }]
)
expect(result).to be_persisted
end
it "creates commit if there is no appropriate job but deploy job has right ref setting" do
config = YAML.dump({ deploy: { deploy: "ls", only: ["0_1"] } })
stub_ci_commit_yaml_file(config)
result = service.execute(project, user,
ref: 'refs/heads/0_1',
before: '00000000',
after: '31das312',
commits: [{ message: "Message" }]
)
expect(result).to be_persisted
end
end
it 'skips commits without .gitlab-ci.yml' do
stub_ci_commit_yaml_file(nil)
result = service.execute(project, user,
ref: 'refs/heads/0_1',
before: '00000000',
after: '31das312',
commits: [{ message: 'Message' }]
)
expect(result).to be_persisted
expect(result.builds.any?).to be_falsey
expect(result.status).to eq('skipped')
expect(result.yaml_errors).to be_nil
end
it 'skips commits if yaml is invalid' do
message = 'message'
allow_any_instance_of(Ci::Commit).to receive(:git_commit_message) { message }
stub_ci_commit_yaml_file('invalid: file: file')
commits = [{ message: message }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.any?).to be false
expect(commit.status).to eq('failed')
expect(commit.yaml_errors).to_not be_nil
end
describe :ci_skip? do
let(:message) { "some message[ci skip]" }
before do
allow_any_instance_of(Ci::Commit).to receive(:git_commit_message) { message }
end
it "skips builds creation if there is [ci skip] tag in commit message" do
commits = [{ message: message }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.any?).to be false
expect(commit.status).to eq("skipped")
end
it "does not skips builds creation if there is no [ci skip] tag in commit message" do
allow_any_instance_of(Ci::Commit).to receive(:git_commit_message) { "some message" }
commits = [{ message: "some message" }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.first.name).to eq("staging")
end
it "skips builds creation if there is [ci skip] tag in commit message and yaml is invalid" do
stub_ci_commit_yaml_file('invalid: file: fiile')
commits = [{ message: message }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.any?).to be false
expect(commit.status).to eq("skipped")
expect(commit.yaml_errors).to be_nil
end
end
it "skips build creation if there are already builds" do
allow_any_instance_of(Ci::Commit).to receive(:ci_yaml_file) { gitlab_ci_yaml }
commits = [{ message: "message" }]
commit = service.execute(project, user,
ref: 'refs/heads/master',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.count(:all)).to eq(2)
commit = service.execute(project, user,
ref: 'refs/heads/master',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.builds.count(:all)).to eq(2)
end
it "creates commit with failed status if yaml is invalid" do
stub_ci_commit_yaml_file('invalid: file')
commits = [{ message: "some message" }]
commit = service.execute(project, user,
ref: 'refs/tags/0_1',
before: '00000000',
after: '31das312',
commits: commits
)
expect(commit.status).to eq("failed")
expect(commit.builds.any?).to be false
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment