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