From ad88cf3e1747f1214d6d5de45862cdac98b11504 Mon Sep 17 00:00:00 2001
From: "Luke \"Jared\" Bennett" <lbennett@gitlab.com>
Date: Fri, 10 Feb 2017 10:32:59 +0000
Subject: [PATCH] updated ci skip regex to accept underscores and hyphens

---
 app/services/ci/create_pipeline_service.rb    |  3 +-
 .../ci/create_pipeline_service_spec.rb        | 71 ++++++++-----------
 2 files changed, 31 insertions(+), 43 deletions(-)

diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb
index e3bc9847200..38a85e9fc42 100644
--- a/app/services/ci/create_pipeline_service.rb
+++ b/app/services/ci/create_pipeline_service.rb
@@ -59,7 +59,8 @@ module Ci
     private
 
     def skip_ci?
-      pipeline.git_commit_message =~ /\[(ci skip|skip ci)\]/i if pipeline.git_commit_message
+      return false unless pipeline.git_commit_message
+      pipeline.git_commit_message =~ /\[(ci[ _-]skip|skip[ _-]ci)\]/i
     end
 
     def commit
diff --git a/spec/services/ci/create_pipeline_service_spec.rb b/spec/services/ci/create_pipeline_service_spec.rb
index ceaca96e25b..8459a3d8cfb 100644
--- a/spec/services/ci/create_pipeline_service_spec.rb
+++ b/spec/services/ci/create_pipeline_service_spec.rb
@@ -79,66 +79,53 @@ describe Ci::CreatePipelineService, services: true do
 
     context 'when commit contains a [ci skip] directive' do
       let(:message) { "some message[ci skip]" }
-      let(:messageFlip) { "some message[skip ci]" }
-      let(:capMessage) { "some message[CI SKIP]" }
-      let(:capMessageFlip) { "some message[SKIP CI]" }
+
+      ci_messages = [
+        "some message[ci skip]",
+        "some message[skip ci]",
+        "some message[CI SKIP]",
+        "some message[SKIP CI]",
+        "some message[ci_skip]",
+        "some message[skip_ci]",
+        "some message[ci-skip]",
+        "some message[skip-ci]"
+      ]
 
       before do
         allow_any_instance_of(Ci::Pipeline).to receive(:git_commit_message) { message }
       end
 
-      it "skips builds creation if there is [ci skip] tag in commit message" do
-        commits = [{ message: message }]
-        pipeline = execute(ref: 'refs/heads/master',
-                           before: '00000000',
-                           after: project.commit.id,
-                           commits: commits)
+      ci_messages.each do |ci_message|
+        it "skips builds creation if the commit message is #{ci_message}" do
+          commits = [{ message: ci_message }]
+          pipeline = execute(ref: 'refs/heads/master',
+                             before: '00000000',
+                             after: project.commit.id,
+                             commits: commits)
 
-        expect(pipeline).to be_persisted
-        expect(pipeline.builds.any?).to be false
-        expect(pipeline.status).to eq("skipped")
-      end
-
-      it "skips builds creation if there is [skip ci] tag in commit message" do
-        commits = [{ message: messageFlip }]
-        pipeline = execute(ref: 'refs/heads/master',
-                           before: '00000000',
-                           after: project.commit.id,
-                           commits: commits)
-
-        expect(pipeline).to be_persisted
-        expect(pipeline.builds.any?).to be false
-        expect(pipeline.status).to eq("skipped")
+          expect(pipeline).to be_persisted
+          expect(pipeline.builds.any?).to be false
+          expect(pipeline.status).to eq("skipped")
+        end
       end
 
-      it "skips builds creation if there is [CI SKIP] tag in commit message" do
-        commits = [{ message: capMessage }]
-        pipeline = execute(ref: 'refs/heads/master',
-                           before: '00000000',
-                           after: project.commit.id,
-                           commits: commits)
-
-        expect(pipeline).to be_persisted
-        expect(pipeline.builds.any?).to be false
-        expect(pipeline.status).to eq("skipped")
-      end
+      it "does not skips builds creation if there is no [ci skip] or [skip ci] tag in commit message" do
+        allow_any_instance_of(Ci::Pipeline).to receive(:git_commit_message) { "some message" }
 
-      it "skips builds creation if there is [SKIP CI] tag in commit message" do
-        commits = [{ message: capMessageFlip }]
+        commits = [{ message: "some message" }]
         pipeline = execute(ref: 'refs/heads/master',
                            before: '00000000',
                            after: project.commit.id,
                            commits: commits)
 
         expect(pipeline).to be_persisted
-        expect(pipeline.builds.any?).to be false
-        expect(pipeline.status).to eq("skipped")
+        expect(pipeline.builds.first.name).to eq("rspec")
       end
 
-      it "does not skips builds creation if there is no [ci skip] or [skip ci] tag in commit message" do
-        allow_any_instance_of(Ci::Pipeline).to receive(:git_commit_message) { "some message" }
+      it "does not skip builds creation if the commit message is nil" do
+        allow_any_instance_of(Ci::Pipeline).to receive(:git_commit_message) { nil }
 
-        commits = [{ message: "some message" }]
+        commits = [{ message: nil }]
         pipeline = execute(ref: 'refs/heads/master',
                            before: '00000000',
                            after: project.commit.id,
-- 
GitLab