summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-02-17 12:12:30 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2022-02-17 12:12:30 +0000
commit70c5d7928283b1386ab26a93d68015e9591ae4b7 (patch)
tree2825384d59e566bb61478d76086abd98f230120d /lib
parent5e11fc146aba1344ad95f7fea1a99db82f0f68f2 (diff)
downloadgitlab-ce-70c5d7928283b1386ab26a93d68015e9591ae4b7.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib')
-rw-r--r--lib/api/helpers/integrations_helpers.rb8
-rw-r--r--lib/feature.rb11
-rw-r--r--lib/gitlab/ci/variables/builder.rb35
-rw-r--r--lib/gitlab/ci/variables/builder/project.rb25
4 files changed, 75 insertions, 4 deletions
diff --git a/lib/api/helpers/integrations_helpers.rb b/lib/api/helpers/integrations_helpers.rb
index 72b16a23dd6..86dedc12fca 100644
--- a/lib/api/helpers/integrations_helpers.rb
+++ b/lib/api/helpers/integrations_helpers.rb
@@ -346,7 +346,13 @@ module API
required: false,
name: :datadog_env,
type: String,
- desc: 'For self-managed deployments, set the env tag for all the data sent to Datadog. How do I use tags?'
+ desc: 'For self-managed deployments, set the env tag for all the data sent to Datadog'
+ },
+ {
+ required: false,
+ name: :datadog_tags,
+ type: String,
+ desc: 'Custom tags in Datadog. Specify one tag per line in the format: "key:value\nkey2:value2"'
}
],
'discord' => [
diff --git a/lib/feature.rb b/lib/feature.rb
index 12b4ef07dd6..47fee23c7ea 100644
--- a/lib/feature.rb
+++ b/lib/feature.rb
@@ -245,11 +245,11 @@ class Feature
end
def gate_specified?
- %i(user project group feature_group).any? { |key| params.key?(key) }
+ %i(user project group feature_group namespace).any? { |key| params.key?(key) }
end
def targets
- [feature_group, user, project, group].compact
+ [feature_group, user, project, group, namespace].compact
end
private
@@ -279,6 +279,13 @@ class Feature
Group.find_by_full_path(params[:group])
end
+
+ def namespace
+ return unless params.key?(:namespace)
+
+ # We are interested in Group or UserNamespace
+ Namespace.without_project_namespaces.find_by_full_path(params[:namespace])
+ end
end
end
diff --git a/lib/gitlab/ci/variables/builder.rb b/lib/gitlab/ci/variables/builder.rb
index 90b84803cff..9ef6e7f5fa9 100644
--- a/lib/gitlab/ci/variables/builder.rb
+++ b/lib/gitlab/ci/variables/builder.rb
@@ -9,6 +9,7 @@ module Gitlab
def initialize(pipeline)
@pipeline = pipeline
@instance_variables_builder = Builder::Instance.new
+ @project_variables_builder = Builder::Project.new(project)
end
def scoped_variables(job, environment:, dependencies:)
@@ -77,13 +78,18 @@ module Gitlab
end
def secret_project_variables(environment:, ref:)
- project.ci_variables_for(ref: ref, environment: environment)
+ if memoize_secret_variables?
+ memoized_secret_project_variables(environment: environment)
+ else
+ project.ci_variables_for(ref: ref, environment: environment)
+ end
end
private
attr_reader :pipeline
attr_reader :instance_variables_builder
+ attr_reader :project_variables_builder
delegate :project, to: :pipeline
def predefined_variables(job)
@@ -104,6 +110,15 @@ module Gitlab
end
end
+ def memoized_secret_project_variables(environment:)
+ strong_memoize_with(:secret_project_variables, environment) do
+ project_variables_builder
+ .secret_variables(
+ environment: environment,
+ protected_ref: protected_ref?)
+ end
+ end
+
def ci_node_total_value(job)
parallel = job.options&.dig(:parallel)
parallel = parallel.dig(:total) if parallel.is_a?(Hash)
@@ -115,6 +130,24 @@ module Gitlab
project.protected_for?(pipeline.jobs_git_ref)
end
end
+
+ def memoize_secret_variables?
+ strong_memoize(:memoize_secret_variables) do
+ ::Feature.enabled?(:ci_variables_builder_memoize_secret_variables,
+ project,
+ default_enabled: :yaml)
+ end
+ end
+
+ def strong_memoize_with(name, *args)
+ container = strong_memoize(name) { {} }
+
+ if container.key?(args)
+ container[args]
+ else
+ container[args] = yield
+ end
+ end
end
end
end
diff --git a/lib/gitlab/ci/variables/builder/project.rb b/lib/gitlab/ci/variables/builder/project.rb
new file mode 100644
index 00000000000..832e68ea6a2
--- /dev/null
+++ b/lib/gitlab/ci/variables/builder/project.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Ci
+ module Variables
+ class Builder
+ class Project
+ include Gitlab::Utils::StrongMemoize
+
+ def initialize(project)
+ @project = project
+ end
+
+ def secret_variables(environment:, protected_ref: false)
+ variables = @project.variables
+ variables = variables.unprotected unless protected_ref
+ variables = variables.for_environment(environment)
+
+ Gitlab::Ci::Variables::Collection.new(variables)
+ end
+ end
+ end
+ end
+ end
+end