Class: Shiplane::CheckoutArtifact

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/shiplane/checkout_artifact.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sha) ⇒ CheckoutArtifact

Returns a new instance of CheckoutArtifact.



10
11
12
13
14
15
16
# File 'lib/shiplane/checkout_artifact.rb', line 10

def initialize(sha)
  @sha = sha

  # call this before changing directories.
  # This prevents race conditions where the config file is accessed before being downloaded
  shiplane_config
end

Instance Attribute Details

#shaObject

Returns the value of attribute sha.



6
7
8
# File 'lib/shiplane/checkout_artifact.rb', line 6

def sha
  @sha
end

Class Method Details

.checkout!(sha) ⇒ Object



117
118
119
# File 'lib/shiplane/checkout_artifact.rb', line 117

def self.checkout!(sha)
  new(sha).checkout!
end

Instance Method Details

#app_directoryObject



34
35
36
# File 'lib/shiplane/checkout_artifact.rb', line 34

def app_directory
  @app_directory ||= File.join(Dir.pwd, 'docker_builds', appname)
end

#appnameObject



18
19
20
# File 'lib/shiplane/checkout_artifact.rb', line 18

def appname
  @appname ||= project_config['appname']
end

#build_directoryObject



38
39
40
# File 'lib/shiplane/checkout_artifact.rb', line 38

def build_directory
  @build_directory ||= File.join(app_directory, "#{appname}-#{sha}")
end

#checkout!Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/shiplane/checkout_artifact.rb', line 46

def checkout!
  return if File.exist?(File.join(build_directory, Shiplane::SHIPLANE_CONFIG_FILENAME))

  puts "Checking out Application #{appname}[#{sha}]..."
  make_directory

  success = true
  FileUtils.cd app_directory do
    success = success && system("echo 'Downloading #{git_url}/archive/#{sha}.tar.gz --output #{appname}-#{sha}.tar.gz'")
    success = success && system("curl -L #{git_url}/archive/#{sha}.tar.gz --output #{appname}-#{sha}.tar.gz")
    success = success && system("tar -xzf #{appname}-#{sha}.tar.gz -C .")
  end

  raise "Errors encountered while downloading archive" unless success
  puts "Finished checking out Application"
  tasks.each(&method(:send))
end

#copy_env_filesObject



76
77
78
79
80
# File 'lib/shiplane/checkout_artifact.rb', line 76

def copy_env_files
  puts "Copying in environment files..."
  FileUtils.cp File.join(Dir.pwd, build_config.fetch('environment_file', '.env')), File.join(build_directory, '.env')
  puts "Environment Files Copied"
end

#copy_erb_file(filepath) ⇒ Object



99
100
101
# File 'lib/shiplane/checkout_artifact.rb', line 99

def copy_erb_file(filepath)
  File.write(File.join(build_directory, filepath.gsub(".erb","")), ERB.new(File.read(filepath)).result, mode: 'w')
end

#copy_insert_on_build_filesObject



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/shiplane/checkout_artifact.rb', line 82

def copy_insert_on_build_files
  puts "Copying application configuration files..."

  if Dir.exist? File.join(build_config.fetch('settings_folder', '.shiplane'), "insert_on_build")
    FileUtils.cd File.join(build_config.fetch('settings_folder', '.shiplane'), "insert_on_build") do
      Dir["*/**"].each do |filepath|
        if File.extname(filepath) == ".erb"
          copy_erb_file(filepath)
        else
          FileUtils.cp filepath, File.join(build_directory, filepath)
        end
      end
    end
  end
  puts "Configuration Files Copied"
end

#git_urlObject



30
31
32
# File 'lib/shiplane/checkout_artifact.rb', line 30

def git_url
  "https://#{github_token ? "#{github_token}@" : ''}github.com/#{project_config['origin']}"
end

#github_tokenObject



26
27
28
# File 'lib/shiplane/checkout_artifact.rb', line 26

def github_token
  @github_token ||= ENV['GITHUB_TOKEN']
end

#make_directoriesObject



68
69
70
71
72
73
74
# File 'lib/shiplane/checkout_artifact.rb', line 68

def make_directories
  FileUtils.cd build_directory do
    required_directories.each do |directory|
      FileUtils.mkdir_p directory
    end
  end
end

#make_directoryObject



42
43
44
# File 'lib/shiplane/checkout_artifact.rb', line 42

def make_directory
  FileUtils.mkdir_p build_directory
end

#required_directoriesObject



113
114
115
# File 'lib/shiplane/checkout_artifact.rb', line 113

def required_directories
  ['vendor']
end

#shiplane_configObject



22
23
24
# File 'lib/shiplane/checkout_artifact.rb', line 22

def shiplane_config
  @shiplane_config ||= Shiplane::Configuration.new
end

#tasksObject



64
65
66
# File 'lib/shiplane/checkout_artifact.rb', line 64

def tasks
  [:make_directories, :copy_env_files, :copy_insert_on_build_files, :unignore_required_directories]
end

#unignore_required_directoriesObject



103
104
105
106
107
108
109
110
111
# File 'lib/shiplane/checkout_artifact.rb', line 103

def unignore_required_directories
  puts "Adding Required Directories as explicit inclusions in ignore file..."
  File.open(File.join(build_directory, '.dockerignore'), 'a') do |file|
    required_directories.each do |directory|
      file.puts "!#{directory}/*"
    end
  end
  puts "Finished including required directories..."
end