class Shiplane::CheckoutArtifact

Attributes

sha[RW]

Public Class Methods

checkout!(sha) click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 118
def self.checkout!(sha)
  new(sha).checkout!
end
new(sha) click to toggle source
# 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

Public Instance Methods

app_directory() click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 34
def app_directory
  @app_directory ||= File.join(Dir.pwd, 'docker_builds', appname)
end
appname() click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 18
def appname
  @appname ||= project_config['appname']
end
build_directory() click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 38
def build_directory
  @build_directory ||= File.join(app_directory, "#{appname}-#{sha}")
end
checkout!() click to toggle source
# 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_files() click to toggle source
# 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) click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 100
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_files() click to toggle source
# 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.mkdir_p File.join(build_directory, File.dirname(filepath))
          FileUtils.cp filepath, File.join(build_directory, filepath)
        end
      end
    end
  end
  puts "Configuration Files Copied"
end
git_url() click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 30
def git_url
  "https://#{github_token ? "#{github_token}@" : ''}github.com/#{project_config['origin']}"
end
github_token() click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 26
def github_token
  @github_token ||= ENV['GITHUB_TOKEN']
end
make_directories() click to toggle source
# 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_directory() click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 42
def make_directory
  FileUtils.mkdir_p build_directory
end
required_directories() click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 114
def required_directories
  ['vendor']
end
shiplane_config() click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 22
def shiplane_config
  @shiplane_config ||= Shiplane::Configuration.new
end
tasks() click to toggle source
# 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_directories() click to toggle source
# File lib/shiplane/checkout_artifact.rb, line 104
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