File: project_auto_devops.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (51 lines) | stat: -rw-r--r-- 1,510 bytes parent folder | download
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
# frozen_string_literal: true

class ProjectAutoDevops < ApplicationRecord
  belongs_to :project, inverse_of: :auto_devops

  enum deploy_strategy: {
    continuous: 0,
    manual: 1,
    timed_incremental: 2
  }

  scope :enabled, -> { where(enabled: true) }
  scope :disabled, -> { where(enabled: false) }

  after_save :create_gitlab_deploy_token, if: :needs_to_create_deploy_token?

  def predefined_variables
    Gitlab::Ci::Variables::Collection.new.tap do |variables|
      variables.append(key: 'AUTO_DEVOPS_EXPLICITLY_ENABLED', value: '1') if enabled?
      variables.concat(deployment_strategy_default_variables)
    end
  end

  private

  def create_gitlab_deploy_token
    project.deploy_tokens.create!(
      name: DeployToken::GITLAB_DEPLOY_TOKEN_NAME,
      project_id: project_id,
      read_registry: true
    )
  end

  def needs_to_create_deploy_token?
    project.auto_devops_enabled? &&
      !project.public? &&
      !project.deploy_tokens.find_by(name: DeployToken::GITLAB_DEPLOY_TOKEN_NAME).present?
  end

  def deployment_strategy_default_variables
    Gitlab::Ci::Variables::Collection.new.tap do |variables|
      if manual?
        variables.append(key: 'STAGING_ENABLED', value: '1')
        variables.append(key: 'INCREMENTAL_ROLLOUT_ENABLED', value: '1') # deprecated
        variables.append(key: 'INCREMENTAL_ROLLOUT_MODE', value: 'manual')
      elsif timed_incremental?
        variables.append(key: 'INCREMENTAL_ROLLOUT_MODE', value: 'timed')
      end
    end
  end
end