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
|
||||
# * First/Last Character is not a hyphen
|
||||
def ref_slug
|
||||
ref.to_s
|
||||
.downcase
|
||||
.gsub(/[^a-z0-9]/, '-')[0..62]
|
||||
.gsub(/(\A-+|-+\z)/, '')
|
||||
Gitlab::Utils.slugify(ref.to_s)
|
||||
end
|
||||
|
||||
# Variables whose value does not depend on environment
|
||||
|
|
|
@ -1283,12 +1283,16 @@ class Project < ActiveRecord::Base
|
|||
status.zero?
|
||||
end
|
||||
|
||||
def full_path_slug
|
||||
Gitlab::Utils.slugify(full_path.to_s)
|
||||
end
|
||||
|
||||
def predefined_variables
|
||||
[
|
||||
{ key: 'CI_PROJECT_ID', value: id.to_s, public: true },
|
||||
{ key: 'CI_PROJECT_NAME', value: 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_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)
|
||||
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)
|
||||
return value if [true, false].include?(value)
|
||||
return true if value =~ /^(true|t|yes|y|1|on)$/i
|
||||
|
|
|
@ -1,7 +1,21 @@
|
|||
require 'spec_helper'
|
||||
|
||||
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
|
||||
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_NAME', value: project.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_URL', value: project.web_url, public: true },
|
||||
{ key: 'CI_PIPELINE_ID', value: pipeline.id.to_s, public: true },
|
||||
|
|
Loading…
Reference in a new issue