Class: Shiplane::CheckoutArtifact
- Inherits:
-
Object
- Object
- Shiplane::CheckoutArtifact
- Extended by:
- Forwardable
- Defined in:
- lib/shiplane/checkout_artifact.rb
Instance Attribute Summary collapse
-
#sha ⇒ Object
Returns the value of attribute sha.
Class Method Summary collapse
Instance Method Summary collapse
- #app_directory ⇒ Object
- #appname ⇒ Object
- #build_directory ⇒ Object
- #checkout! ⇒ Object
- #copy_env_files ⇒ Object
- #copy_erb_file(filepath) ⇒ Object
- #copy_insert_on_build_files ⇒ Object
- #git_url ⇒ Object
- #github_token ⇒ Object
-
#initialize(sha) ⇒ CheckoutArtifact
constructor
A new instance of CheckoutArtifact.
- #make_directories ⇒ Object
- #make_directory ⇒ Object
- #required_directories ⇒ Object
- #shiplane_config ⇒ Object
- #tasks ⇒ Object
- #unignore_required_directories ⇒ Object
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
#sha ⇒ Object
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_directory ⇒ Object
34 35 36 |
# File 'lib/shiplane/checkout_artifact.rb', line 34 def app_directory @app_directory ||= File.join(Dir.pwd, 'docker_builds', appname) end |
#appname ⇒ Object
18 19 20 |
# File 'lib/shiplane/checkout_artifact.rb', line 18 def appname @appname ||= project_config['appname'] end |
#build_directory ⇒ Object
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_files ⇒ Object
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_files ⇒ Object
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_url ⇒ Object
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_token ⇒ Object
26 27 28 |
# File 'lib/shiplane/checkout_artifact.rb', line 26 def github_token @github_token ||= ENV['GITHUB_TOKEN'] end |
#make_directories ⇒ Object
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_directory ⇒ Object
42 43 44 |
# File 'lib/shiplane/checkout_artifact.rb', line 42 def make_directory FileUtils.mkdir_p build_directory end |
#required_directories ⇒ Object
113 114 115 |
# File 'lib/shiplane/checkout_artifact.rb', line 113 def required_directories ['vendor'] end |
#shiplane_config ⇒ Object
22 23 24 |
# File 'lib/shiplane/checkout_artifact.rb', line 22 def shiplane_config @shiplane_config ||= Shiplane::Configuration.new end |
#tasks ⇒ Object
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_directories ⇒ Object
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 |