Welcome to mirror list, hosted at ThFree Co, Russian Federation.

variables.rb « ci « api « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 5a6b5987228ec00bec965d90167b624465f0f80d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# frozen_string_literal: true

module API
  module Ci
    class Variables < ::API::Base
      include PaginationParams

      before { authenticate! }
      before { authorize! :admin_build, user_project }

      feature_category :pipeline_authoring

      helpers ::API::Helpers::VariablesHelpers

      params do
        requires :id, types: [String, Integer], desc: 'The ID of a project or URL-encoded NAMESPACE/PROJECT_NAME of the project owned by the authenticated user'
      end

      resource :projects, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
        desc 'Get project variables' do
          success Entities::Ci::Variable
          tags %w[ci_variables]
        end
        params do
          use :pagination
        end
        get ':id/variables', urgency: :low do
          variables = user_project.variables
          present paginate(variables), with: Entities::Ci::Variable
        end

        desc 'Get the details of a single variable from a project' do
          success Entities::Ci::Variable
          failure [{ code: 404, message: 'Variable Not Found' }]
          tags %w[ci_variables]
        end
        params do
          requires :key, type: String, desc: 'The key of a variable'
          optional :filter, type: Hash, desc: 'Available filters: [environment_scope]. Example: filter[environment_scope]=production' do
            optional :environment_scope, type: String, desc: 'The environment scope of a variable'
          end
        end
        # rubocop: disable CodeReuse/ActiveRecord
        get ':id/variables/:key', urgency: :low do
          variable = find_variable(user_project, params)
          not_found!('Variable') unless variable

          present variable, with: Entities::Ci::Variable
        end
        # rubocop: enable CodeReuse/ActiveRecord

        desc 'Create a new variable in a project' do
          success Entities::Ci::Variable
          failure [{ code: 400, message: '400 Bad Request' }]
          tags %w[ci_variables]
        end
        route_setting :log_safety, { safe: %w[key], unsafe: %w[value] }
        params do
          requires :key, type: String, desc: 'The key of a variable'
          requires :value, type: String, desc: 'The value of a variable'
          optional :protected, type: Boolean, desc: 'Whether the variable is protected'
          optional :masked, type: Boolean, desc: 'Whether the variable is masked'
          optional :raw, type: Boolean, desc: 'Whether the variable will be expanded'
          optional :variable_type, type: String, values: ::Ci::Variable.variable_types.keys, desc: 'The type of the variable. Default: env_var'
          optional :environment_scope, type: String, desc: 'The environment_scope of the variable'
        end
        post ':id/variables' do
          variable = ::Ci::ChangeVariableService.new(
            container: user_project,
            current_user: current_user,
            params: { action: :create, variable_params: declared_params(include_missing: false) }
          ).execute

          if variable.valid?
            present variable, with: Entities::Ci::Variable
          else
            render_validation_error!(variable)
          end
        end

        desc 'Update an existing variable from a project' do
          success Entities::Ci::Variable
          failure [{ code: 404, message: 'Variable Not Found' }]
          tags %w[ci_variables]
        end
        route_setting :log_safety, { safe: %w[key], unsafe: %w[value] }
        params do
          optional :key, type: String, desc: 'The key of a variable'
          optional :value, type: String, desc: 'The value of a variable'
          optional :protected, type: Boolean, desc: 'Whether the variable is protected'
          optional :masked, type: Boolean, desc: 'Whether the variable is masked'
          optional :environment_scope, type: String, desc: 'The environment_scope of a variable'
          optional :raw, type: Boolean, desc: 'Whether the variable will be expanded'
          optional :variable_type, type: String, values: ::Ci::Variable.variable_types.keys, desc: 'The type of the variable. Default: env_var'
          optional :filter, type: Hash, desc: 'Available filters: [environment_scope]. Example: filter[environment_scope]=production' do
            optional :environment_scope, type: String, desc: 'The environment scope of a variable'
          end
        end
        # rubocop: disable CodeReuse/ActiveRecord
        put ':id/variables/:key' do
          variable = find_variable(user_project, params)
          not_found!('Variable') unless variable

          variable = ::Ci::ChangeVariableService.new(
            container: user_project,
            current_user: current_user,
            params: { action: :update, variable: variable, variable_params: declared_params(include_missing: false).except(:key, :filter) }
          ).execute

          if variable.valid?
            present variable, with: Entities::Ci::Variable
          else
            render_validation_error!(variable)
          end
        end
        # rubocop: enable CodeReuse/ActiveRecord

        desc 'Delete an existing variable from a project' do
          success Entities::Ci::Variable
          failure [{ code: 404, message: 'Variable Not Found' }]
          tags %w[ci_variables]
        end
        params do
          requires :key, type: String, desc: 'The key of a variable'
          optional :filter, type: Hash, desc: 'Available filters: [environment_scope]. Example: filter[environment_scope]=production' do
            optional :environment_scope, type: String, desc: 'The environment scope of the variable'
          end
        end
        # rubocop: disable CodeReuse/ActiveRecord
        delete ':id/variables/:key' do
          variable = find_variable(user_project, params)
          not_found!('Variable') unless variable

          ::Ci::ChangeVariableService.new(
            container: user_project,
            current_user: current_user,
            params: { action: :destroy, variable: variable }
          ).execute

          no_content!
        end
        # rubocop: enable CodeReuse/ActiveRecord
      end
    end
  end
end