summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzegorz@gitlab.com>2015-12-14 17:16:29 +0000
committerGrzegorz Bizon <grzegorz@gitlab.com>2015-12-14 17:16:29 +0000
commit4526515704855278b2971522ed013ff007c0e40a (patch)
tree5ad7ce08ffb5e22d4459cf0ec0df53c1a635caff
parent3fb89a36cb2c8bead62f4985ebdda1e05f8114df (diff)
parent0a81a681585bf699a7a41a449a2c0c21e2e335c6 (diff)
downloadgitlab-ce-4526515704855278b2971522ed013ff007c0e40a.tar.gz
Merge branch 'ux/suppress-ci-yml-warning' into 'master'
Suppress warning about missing `.gitlab-ci.yml` if builds are disabled When user disables GitLab Ci Service in project's settings then warning about missing `.gitlab-ci.yml` file should be supressed. This a matter of user experience as stated in #3761 (closes #3761). cc @ayufan See merge request !2014
-rw-r--r--CHANGELOG3
-rw-r--r--app/helpers/ci_status_helper.rb2
-rw-r--r--app/models/ci/commit.rb10
-rw-r--r--app/views/projects/commit/_commit_box.html.haml2
-rw-r--r--app/views/projects/commits/_commit.html.haml4
-rw-r--r--features/project/commits/commits.feature3
-rw-r--r--features/steps/project/commits/commits.rb4
-rw-r--r--spec/features/commits_spec.rb111
-rw-r--r--spec/support/stub_gitlab_calls.rb4
9 files changed, 104 insertions, 39 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 365b9e973fc..6ff06091f61 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -51,6 +51,9 @@ v 8.3.0 (unreleased)
- Display referenced merge request statuses in the issue description (Greg Smethells)
- Implement new sidebar for issue and merge request pages
- Emoji picker improvements
+ - Suppress warning about missing `.gitlab-ci.yml` if builds are disabled
+ - Do not show build status unless builds are enabled and `.gitlab-ci.yml` is present
+ - Persist runners registration token in database
v 8.2.3
- Fix application settings cache not expiring after changes (Stan Hu)
diff --git a/app/helpers/ci_status_helper.rb b/app/helpers/ci_status_helper.rb
index 4fad35fd2fe..8554074d619 100644
--- a/app/helpers/ci_status_helper.rb
+++ b/app/helpers/ci_status_helper.rb
@@ -57,7 +57,7 @@ module CiStatusHelper
def render_ci_status(ci_commit)
link_to ci_status_path(ci_commit),
- class: "c#{ci_status_color(ci_commit)}",
+ class: "ci-status-link c#{ci_status_color(ci_commit)}",
title: "Build #{ci_status_label(ci_commit)}",
data: { toggle: 'tooltip', placement: 'left' } do
ci_status_icon(ci_commit)
diff --git a/app/models/ci/commit.rb b/app/models/ci/commit.rb
index d2a29236942..6bf596e5d3e 100644
--- a/app/models/ci/commit.rb
+++ b/app/models/ci/commit.rb
@@ -218,6 +218,16 @@ module Ci
update!(committed_at: DateTime.now)
end
+ ##
+ # This method checks if build status should be displayed.
+ #
+ # Build status should be available only if builds are enabled
+ # on project level and `.gitlab-ci.yml` file is present.
+ #
+ def show_build_status?
+ project.builds_enabled? && ci_yaml_file
+ end
+
private
def save_yaml_error(error)
diff --git a/app/views/projects/commit/_commit_box.html.haml b/app/views/projects/commit/_commit_box.html.haml
index 132cdc35c94..634924db247 100644
--- a/app/views/projects/commit/_commit_box.html.haml
+++ b/app/views/projects/commit/_commit_box.html.haml
@@ -40,7 +40,7 @@
- @commit.parents.each do |parent|
= link_to parent.short_id, namespace_project_commit_path(@project.namespace, @project, parent), class: "monospace"
-- if @ci_commit
+- if @ci_commit && @ci_commit.show_build_status?
.pull-right
= link_to ci_status_path(@ci_commit), class: "ci-status ci-#{@ci_commit.status}" do
= ci_status_icon(@ci_commit)
diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml
index 0d64486164e..1303b27c4f3 100644
--- a/app/views/projects/commits/_commit.html.haml
+++ b/app/views/projects/commits/_commit.html.haml
@@ -9,7 +9,7 @@
- cache_key.push(ci_commit.status) if ci_commit
= cache(cache_key) do
- %li.commit.js-toggle-container
+ %li.commit.js-toggle-container{ id: "commit-#{commit.short_id}" }
.commit-row-title
%strong.str-truncated
= link_to_gfm commit.title, namespace_project_commit_path(project.namespace, project, commit.id), class: "commit-row-message"
@@ -17,7 +17,7 @@
%a.text-expander.js-toggle-button ...
.pull-right
- - if ci_commit
+ - if ci_commit && ci_commit.show_build_status?
= render_ci_status(ci_commit)
&nbsp;
= clipboard_button(clipboard_text: commit.id)
diff --git a/features/project/commits/commits.feature b/features/project/commits/commits.feature
index 21367fd76a0..5bb2d0e976b 100644
--- a/features/project/commits/commits.feature
+++ b/features/project/commits/commits.feature
@@ -19,7 +19,8 @@ Feature: Project Commits
Scenario: I browse commit with ci from list
Given commit has ci status
- And I click on commit link
+ And repository contains ".gitlab-ci.yml" file
+ When I click on commit link
Then I see commit ci info
And I click status link
Then I see builds list
diff --git a/features/steps/project/commits/commits.rb b/features/steps/project/commits/commits.rb
index 101eb408ba1..a3141fe3be1 100644
--- a/features/steps/project/commits/commits.rb
+++ b/features/steps/project/commits/commits.rb
@@ -108,6 +108,10 @@ class Spinach::Features::ProjectCommits < Spinach::FeatureSteps
create :ci_build, commit: ci_commit
end
+ step 'repository contains ".gitlab-ci.yml" file' do
+ allow_any_instance_of(Ci::Commit).to receive(:ci_yaml_file).and_return(String.new)
+ end
+
step 'I see commit ci info' do
expect(page).to have_content "build: pending"
end
diff --git a/spec/features/commits_spec.rb b/spec/features/commits_spec.rb
index cc0d4c150fe..ecc85376ffc 100644
--- a/spec/features/commits_spec.rb
+++ b/spec/features/commits_spec.rb
@@ -1,73 +1,116 @@
require 'spec_helper'
-describe "Commits" do
+describe 'Commits' do
include CiStatusHelper
let(:project) { create(:project) }
- describe "CI" do
+ describe 'CI' do
before do
login_as :user
project.team << [@user, :master]
- @commit = FactoryGirl.create :ci_commit, project: project, sha: project.commit.sha
- @build = FactoryGirl.create :ci_build, commit: @commit
- @generic_status = FactoryGirl.create :generic_commit_status, commit: @commit
+ stub_ci_commit_to_return_yaml_file
end
- before do
- stub_ci_commit_to_return_yaml_file
+ let!(:commit) do
+ FactoryGirl.create :ci_commit, project: project, sha: project.commit.sha
+ end
+
+ let!(:build) { FactoryGirl.create :ci_build, commit: commit }
+
+ describe 'Project commits' do
+ context 'builds enabled' do
+ context '.gitlab-ci.yml found' do
+ before do
+ visit namespace_project_commits_path(project.namespace, project, :master)
+ end
+
+ it 'should show build status' do
+ page.within("//li[@id='commit-#{commit.short_sha}']") do
+ expect(page).to have_css(".ci-status-link")
+ end
+ end
+ end
+
+ context 'no .gitlab-ci.yml found' do
+ before do
+ stub_ci_commit_yaml_file(nil)
+ visit namespace_project_commits_path(project.namespace, project, :master)
+ end
+
+ it 'should not show build status' do
+ page.within("//li[@id='commit-#{commit.short_sha}']") do
+ expect(page).to have_no_css(".ci-status-link")
+ end
+ end
+ end
+ end
end
- describe "GET /:project/commits/:sha/ci" do
+ describe 'Commit builds' do
before do
- visit ci_status_path(@commit)
+ visit ci_status_path(commit)
end
- it { expect(page).to have_content @commit.sha[0..7] }
- it { expect(page).to have_content @commit.git_commit_message }
- it { expect(page).to have_content @commit.git_author_name }
+ it { expect(page).to have_content commit.sha[0..7] }
+ it { expect(page).to have_content commit.git_commit_message }
+ it { expect(page).to have_content commit.git_author_name }
end
- context "Download artifacts" do
+ context 'Download artifacts' do
let(:artifacts_file) { fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') }
before do
- @build.update_attributes(artifacts_file: artifacts_file)
+ build.update_attributes(artifacts_file: artifacts_file)
end
it do
- visit ci_status_path(@commit)
- click_on "Download artifacts"
+ visit ci_status_path(commit)
+ click_on 'Download artifacts'
expect(page.response_headers['Content-Type']).to eq(artifacts_file.content_type)
end
end
- describe "Cancel all builds" do
- it "cancels commit" do
- visit ci_status_path(@commit)
- click_on "Cancel running"
- expect(page).to have_content "canceled"
+ describe 'Cancel all builds' do
+ it 'cancels commit' do
+ visit ci_status_path(commit)
+ click_on 'Cancel running'
+ expect(page).to have_content 'canceled'
end
end
- describe "Cancel build" do
- it "cancels build" do
- visit ci_status_path(@commit)
- click_on "Cancel"
- expect(page).to have_content "canceled"
+ describe 'Cancel build' do
+ it 'cancels build' do
+ visit ci_status_path(commit)
+ click_on 'Cancel'
+ expect(page).to have_content 'canceled'
end
end
- describe ".gitlab-ci.yml not found warning" do
- it "does not show warning" do
- visit ci_status_path(@commit)
- expect(page).not_to have_content ".gitlab-ci.yml not found in this commit"
+ describe '.gitlab-ci.yml not found warning' do
+ context 'ci builds enabled' do
+ it "does not show warning" do
+ visit ci_status_path(commit)
+ expect(page).not_to have_content '.gitlab-ci.yml not found in this commit'
+ end
+
+ it 'shows warning' do
+ stub_ci_commit_yaml_file(nil)
+ visit ci_status_path(commit)
+ expect(page).to have_content '.gitlab-ci.yml not found in this commit'
+ end
end
- it "shows warning" do
- stub_ci_commit_yaml_file(nil)
- visit ci_status_path(@commit)
- expect(page).to have_content ".gitlab-ci.yml not found in this commit"
+ context 'ci builds disabled' do
+ before do
+ stub_ci_builds_disabled
+ stub_ci_commit_yaml_file(nil)
+ visit ci_status_path(commit)
+ end
+
+ it 'does not show warning' do
+ expect(page).not_to have_content '.gitlab-ci.yml not found in this commit'
+ end
end
end
end
diff --git a/spec/support/stub_gitlab_calls.rb b/spec/support/stub_gitlab_calls.rb
index 5b3eb1bfc5f..eec2e681117 100644
--- a/spec/support/stub_gitlab_calls.rb
+++ b/spec/support/stub_gitlab_calls.rb
@@ -21,6 +21,10 @@ module StubGitlabCalls
allow_any_instance_of(Ci::Commit).to receive(:ci_yaml_file) { ci_yaml }
end
+ def stub_ci_builds_disabled
+ allow_any_instance_of(Project).to receive(:builds_enabled?).and_return(false)
+ end
+
private
def gitlab_url