Fix CI_PROJECT_PATH_SLUG slugify
This commit is contained in:
parent
ae81bfd315
commit
e99444bb2d
6 changed files with 39 additions and 7 deletions
|
@ -194,10 +194,7 @@ module Ci
|
||||||
# * Maximum length is 63 bytes
|
# * Maximum length is 63 bytes
|
||||||
# * First/Last Character is not a hyphen
|
# * First/Last Character is not a hyphen
|
||||||
def ref_slug
|
def ref_slug
|
||||||
ref.to_s
|
Gitlab::Utils.slugify(ref.to_s)
|
||||||
.downcase
|
|
||||||
.gsub(/[^a-z0-9]/, '-')[0..62]
|
|
||||||
.gsub(/(\A-+|-+\z)/, '')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Variables whose value does not depend on environment
|
# Variables whose value does not depend on environment
|
||||||
|
|
|
@ -1283,12 +1283,16 @@ class Project < ActiveRecord::Base
|
||||||
status.zero?
|
status.zero?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def full_path_slug
|
||||||
|
Gitlab::Utils.slugify(full_path.to_s)
|
||||||
|
end
|
||||||
|
|
||||||
def predefined_variables
|
def predefined_variables
|
||||||
[
|
[
|
||||||
{ key: 'CI_PROJECT_ID', value: id.to_s, public: true },
|
{ key: 'CI_PROJECT_ID', value: id.to_s, public: true },
|
||||||
{ key: 'CI_PROJECT_NAME', value: path, public: true },
|
{ key: 'CI_PROJECT_NAME', value: path, public: true },
|
||||||
{ key: 'CI_PROJECT_PATH', value: full_path, public: true },
|
{ key: 'CI_PROJECT_PATH', value: full_path, public: true },
|
||||||
{ key: 'CI_PROJECT_PATH_SLUG', value: full_path.parameterize, public: true },
|
{ key: 'CI_PROJECT_PATH_SLUG', value: full_path_slug, public: true },
|
||||||
{ key: 'CI_PROJECT_NAMESPACE', value: namespace.full_path, public: true },
|
{ key: 'CI_PROJECT_NAMESPACE', value: namespace.full_path, public: true },
|
||||||
{ key: 'CI_PROJECT_URL', value: web_url, public: true }
|
{ key: 'CI_PROJECT_URL', value: web_url, public: true }
|
||||||
]
|
]
|
||||||
|
|
4
changelogs/unreleased/34643-fix-project-path-slugify.yml
Normal file
4
changelogs/unreleased/34643-fix-project-path-slugify.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: Fix CI_PROJECT_PATH_SLUG slugify
|
||||||
|
merge_request: 13350
|
||||||
|
author: Ivan Chernov
|
|
@ -14,6 +14,19 @@ module Gitlab
|
||||||
str.force_encoding(Encoding::UTF_8)
|
str.force_encoding(Encoding::UTF_8)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# A slugified version of the string, suitable for inclusion in URLs and
|
||||||
|
# domain names. Rules:
|
||||||
|
#
|
||||||
|
# * Lowercased
|
||||||
|
# * Anything not matching [a-z0-9-] is replaced with a -
|
||||||
|
# * Maximum length is 63 bytes
|
||||||
|
# * First/Last Character is not a hyphen
|
||||||
|
def slugify(str)
|
||||||
|
return str.downcase
|
||||||
|
.gsub(/[^a-z0-9]/, '-')[0..62]
|
||||||
|
.gsub(/(\A-+|-+\z)/, '')
|
||||||
|
end
|
||||||
|
|
||||||
def to_boolean(value)
|
def to_boolean(value)
|
||||||
return value if [true, false].include?(value)
|
return value if [true, false].include?(value)
|
||||||
return true if value =~ /^(true|t|yes|y|1|on)$/i
|
return true if value =~ /^(true|t|yes|y|1|on)$/i
|
||||||
|
|
|
@ -1,7 +1,21 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Gitlab::Utils do
|
describe Gitlab::Utils do
|
||||||
delegate :to_boolean, :boolean_to_yes_no, to: :described_class
|
delegate :to_boolean, :boolean_to_yes_no, :slugify, to: :described_class
|
||||||
|
|
||||||
|
describe '.slugify' do
|
||||||
|
{
|
||||||
|
'TEST' => 'test',
|
||||||
|
'project_with_underscores' => 'project-with-underscores',
|
||||||
|
'namespace/project' => 'namespace-project',
|
||||||
|
'a' * 70 => 'a' * 63,
|
||||||
|
'test_trailing_' => 'test-trailing'
|
||||||
|
}.each do |original, expected|
|
||||||
|
it "slugifies #{original} to #{expected}" do
|
||||||
|
expect(slugify(original)).to eq(expected)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '.to_boolean' do
|
describe '.to_boolean' do
|
||||||
it 'accepts booleans' do
|
it 'accepts booleans' do
|
||||||
|
|
|
@ -1220,7 +1220,7 @@ describe Ci::Build do
|
||||||
{ key: 'CI_PROJECT_ID', value: project.id.to_s, public: true },
|
{ key: 'CI_PROJECT_ID', value: project.id.to_s, public: true },
|
||||||
{ key: 'CI_PROJECT_NAME', value: project.path, public: true },
|
{ key: 'CI_PROJECT_NAME', value: project.path, public: true },
|
||||||
{ key: 'CI_PROJECT_PATH', value: project.full_path, public: true },
|
{ key: 'CI_PROJECT_PATH', value: project.full_path, public: true },
|
||||||
{ key: 'CI_PROJECT_PATH_SLUG', value: project.full_path.parameterize, public: true },
|
{ key: 'CI_PROJECT_PATH_SLUG', value: project.full_path_slug, public: true },
|
||||||
{ key: 'CI_PROJECT_NAMESPACE', value: project.namespace.full_path, public: true },
|
{ key: 'CI_PROJECT_NAMESPACE', value: project.namespace.full_path, public: true },
|
||||||
{ key: 'CI_PROJECT_URL', value: project.web_url, public: true },
|
{ key: 'CI_PROJECT_URL', value: project.web_url, public: true },
|
||||||
{ key: 'CI_PIPELINE_ID', value: pipeline.id.to_s, public: true },
|
{ key: 'CI_PIPELINE_ID', value: pipeline.id.to_s, public: true },
|
||||||
|
|
Loading…
Reference in a new issue