Class: KamalGitlabReviewApp::CLI::Deploy

Inherits:
Object
  • Object
show all
Defined in:
lib/kamal_gitlab_review_app/cli/deploy.rb

Overview

Deploys (or first-time sets up) the review app for the current MR. Fails loud: any step failure raises and propagates to the caller (no swallowed errors, no exit-0 masking of a broken deploy).

Defined Under Namespace

Classes: Error

Constant Summary collapse

DEFAULT_CONTAINER_LISTER =
lambda do
  ssh_user = ENV.fetch('REVIEW_SSH_USER', 'deploy')
  target_ip = ENV.fetch('REVIEW_TARGET_IP')
  stdout, status = Open3.capture2('ssh', "#{ssh_user}@#{target_ip}", "docker ps --format '{{.Names}}'")
  status.success? ? stdout : ''
rescue StandardError
  ''
end

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(runner: method(:system), container_lister: DEFAULT_CONTAINER_LISTER) ⇒ Deploy

Returns a new instance of Deploy.



27
28
29
30
# File 'lib/kamal_gitlab_review_app/cli/deploy.rb', line 27

def initialize(runner: method(:system), container_lister: DEFAULT_CONTAINER_LISTER)
  @runner = runner
  @container_lister = container_lister
end

Class Method Details

.call(**kwargs) ⇒ Object



23
24
25
# File 'lib/kamal_gitlab_review_app/cli/deploy.rb', line 23

def self.call(**kwargs)
  new(**kwargs).call
end

Instance Method Details

#callObject



32
33
34
35
36
37
# File 'lib/kamal_gitlab_review_app/cli/deploy.rb', line 32

def call
  project_root = ENV.fetch('KAMAL_GITLAB_REVIEW_APP_PROJECT_ROOT', Dir.pwd)
  iid = ENV.fetch('CI_MERGE_REQUEST_IID')

  Dir.chdir(project_root) { deploy(iid:) }
end