shiplane 0.2.19 → 0.2.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/shiplane/build.rb +9 -3
- data/lib/shiplane/checkout_artifact.rb +98 -7
- data/lib/shiplane/compose_hash.rb +1 -1
- data/lib/shiplane/configuration.rb +1 -1
- data/lib/shiplane/host.rb +1 -1
- data/lib/shiplane/version.rb +1 -1
- metadata +6 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1e673d54a2bcd03b638734aa05a26dcba8927e5cd1666a2db72c15af9a9d2c58
         | 
| 4 | 
            +
              data.tar.gz: 0a03a2e3274433448d283f759bfcfc47169f84abaa78461ff326941b51469069
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 0b26b1dd7cf7d5d71b23ed071b8968f81713c45d7109b45e0bdf724e2fadd0b40017cc1641e48cfd721e826c2d100017a84ba9088e804d7146bb6cbc87e627ca
         | 
| 7 | 
            +
              data.tar.gz: 35ef36de90463a85c7793e8156dc6bf4414049c1f821b1356b24322b0238c6f528863bbdecc3485d29eacbeaea5b04aa0819fd81433a5295273d09e14806b0b7
         | 
    
        data/lib/shiplane/build.rb
    CHANGED
    
    | @@ -75,6 +75,8 @@ module Shiplane | |
| 75 75 | 
             
                def build_command(artifact_name)
         | 
| 76 76 | 
             
                  [
         | 
| 77 77 | 
             
                    'docker-compose',
         | 
| 78 | 
            +
                    '-f',
         | 
| 79 | 
            +
                    docker_compose_filepath,
         | 
| 78 80 | 
             
                    '--env-file',
         | 
| 79 81 | 
             
                    build_environment_filepath,
         | 
| 80 82 | 
             
                    'build',
         | 
| @@ -131,8 +133,12 @@ module Shiplane | |
| 131 133 | 
             
                  @shiplane_config ||= Shiplane::Configuration.new(stage: stage)
         | 
| 132 134 | 
             
                end
         | 
| 133 135 |  | 
| 136 | 
            +
                def docker_compose_filepath
         | 
| 137 | 
            +
                  @docker_compose_filepath ||= File.join(project_folder, 'docker-compose.yml')
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
             | 
| 134 140 | 
             
                def docker_config
         | 
| 135 | 
            -
                  @docker_config ||= YAML.load(File.new( | 
| 141 | 
            +
                  @docker_config ||= YAML.load(File.new(docker_compose_filepath), aliases: true)
         | 
| 136 142 | 
             
                end
         | 
| 137 143 |  | 
| 138 144 | 
             
                def buildable_artifacts
         | 
| @@ -201,8 +207,8 @@ module Shiplane | |
| 201 207 | 
             
            end
         | 
| 202 208 |  | 
| 203 209 | 
             
            class StepFailureException < RuntimeError
         | 
| 204 | 
            -
              def initialize(command, artifact_name)
         | 
| 205 | 
            -
                message = "Command [#{command}] failed for artifact: #{artifact_name}" if artifact_name
         | 
| 210 | 
            +
              def initialize(command, artifact_name, error_message: nil)
         | 
| 211 | 
            +
                message = "Command [#{command}] failed for artifact: #{artifact_name}#{error_message ? "\nError Message Received: #{error_message}" : ''}" if artifact_name
         | 
| 206 212 | 
             
                super(message)
         | 
| 207 213 | 
             
              end
         | 
| 208 214 | 
             
            end
         | 
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require 'fileutils'
         | 
| 2 | 
            +
            require 'open3'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Shiplane
         | 
| 4 5 | 
             
              class CheckoutArtifact
         | 
| @@ -21,6 +22,18 @@ module Shiplane | |
| 21 22 | 
             
                  @appname ||= project_config['appname']
         | 
| 22 23 | 
             
                end
         | 
| 23 24 |  | 
| 25 | 
            +
                def current_sha
         | 
| 26 | 
            +
                  stdout, *_ = Open3.capture3("git rev-parse HEAD")
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  stdout
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def current_short_sha
         | 
| 32 | 
            +
                  stdout, *_ = Open3.capture3("git rev-parse --short HEAD")
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  stdout
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 24 37 | 
             
                def bitbucket_origin?
         | 
| 25 38 | 
             
                  project_config['version_control_host'] == 'bitbucket'
         | 
| 26 39 | 
             
                end
         | 
| @@ -34,11 +47,11 @@ module Shiplane | |
| 34 47 | 
             
                end
         | 
| 35 48 |  | 
| 36 49 | 
             
                def bitbucket_token
         | 
| 37 | 
            -
                  @bitbucket_token ||= ENV[' | 
| 50 | 
            +
                  @bitbucket_token ||= ENV['BITBUCKET_TOKEN']
         | 
| 38 51 | 
             
                end
         | 
| 39 52 |  | 
| 40 53 | 
             
                def bitbucket_username
         | 
| 41 | 
            -
                  @bitbucket_username ||= ENV[' | 
| 54 | 
            +
                  @bitbucket_username ||= ENV['BITBUCKET_USERNAME']
         | 
| 42 55 | 
             
                end
         | 
| 43 56 |  | 
| 44 57 | 
             
                def git_url
         | 
| @@ -72,15 +85,25 @@ module Shiplane | |
| 72 85 | 
             
                  puts "Checking out Application #{appname}[#{sha}]..."
         | 
| 73 86 | 
             
                  make_directory
         | 
| 74 87 |  | 
| 75 | 
            -
                  success =  | 
| 76 | 
            -
                  success = success && download_archive
         | 
| 77 | 
            -
                  success = success && unpack_archive
         | 
| 88 | 
            +
                  success = send(checkout_strategy[:method])
         | 
| 78 89 |  | 
| 79 90 | 
             
                  raise "Errors encountered while downloading archive" unless success
         | 
| 80 91 | 
             
                  puts "Finished checking out Application"
         | 
| 81 92 | 
             
                  tasks.each(&method(:send))
         | 
| 82 93 | 
             
                end
         | 
| 83 94 |  | 
| 95 | 
            +
                def checkout_strategies
         | 
| 96 | 
            +
                  @checkout_strategies ||= [
         | 
| 97 | 
            +
                    { method: :archive_and_unpack_commit, conditions: -> { commit_exists? } },
         | 
| 98 | 
            +
                    { method: :download_archive, conditions: -> { !bitbucket_origin? } },
         | 
| 99 | 
            +
                    { method: :checkout_via_git, conditions: -> { true } },
         | 
| 100 | 
            +
                  ]
         | 
| 101 | 
            +
                end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                def checkout_strategy
         | 
| 104 | 
            +
                  @checkout_strategy ||= checkout_strategies.find{|strategy| strategy[:conditions].call }
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
             | 
| 84 107 | 
             
                def archive_filename
         | 
| 85 108 | 
             
                  @archive_filename ||= "#{appname}-#{sha}.tar.gz"
         | 
| 86 109 | 
             
                end
         | 
| @@ -90,12 +113,80 @@ module Shiplane | |
| 90 113 | 
             
                end
         | 
| 91 114 |  | 
| 92 115 | 
             
                def download_archive
         | 
| 93 | 
            -
                   | 
| 116 | 
            +
                  puts "Downloading #{git_url} --output #{archive_filename}"
         | 
| 117 | 
            +
                  puts "Deploying SHA different from current version. Checking out from Git Repository"
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                  success = system("curl -L #{git_url} --output #{archive_path}")
         | 
| 120 | 
            +
                  success && unpack_archive
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                def git_host_url
         | 
| 124 | 
            +
                  return "bitbucket.org" if bitbucket_origin?
         | 
| 125 | 
            +
                  return "github.com" if github_origin?
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                  # TODO
         | 
| 128 | 
            +
                  raise 'Gitlab needs fixing'
         | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                def target_sha_is_current?
         | 
| 132 | 
            +
                  sha == current_short_sha.strip || sha == current_sha.strip
         | 
| 133 | 
            +
                end
         | 
| 94 134 |  | 
| 95 | 
            -
             | 
| 135 | 
            +
                def copy_current_directory
         | 
| 136 | 
            +
                  puts "Current directory is target SHA. Copying for build"
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                  FileUtils.cp_r(".", build_directory)
         | 
| 139 | 
            +
                end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                def archive_and_unpack_commit
         | 
| 142 | 
            +
                  puts "Creating archive from local git repo in #{archive_filename}..."
         | 
| 143 | 
            +
                  success = system("git archive --format=tar.gz -o #{archive_path} #{sha}")
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                  puts "Unpacking archive to #{build_directory}..."
         | 
| 146 | 
            +
                  FileUtils.rm_rf(build_directory) if File.directory?(build_directory)
         | 
| 147 | 
            +
                  FileUtils.mkdir_p build_directory
         | 
| 148 | 
            +
             | 
| 149 | 
            +
                  success && system("(cd #{app_directory} && tar -xzf #{appname}-#{sha}.tar.gz -C #{build_directory})")
         | 
| 150 | 
            +
                end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                def git_clone_url
         | 
| 153 | 
            +
                  "https://#{bitbucket_username}:#{bitbucket_token}@#{git_host_url}/#{project_config['origin']}.git"
         | 
| 154 | 
            +
                end
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                def target_sha_is_current?
         | 
| 157 | 
            +
                  sha == current_short_sha.strip || sha == current_sha.strip
         | 
| 158 | 
            +
                end
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                def commit_exists?
         | 
| 161 | 
            +
                  system("git rev-parse #{sha}")
         | 
| 162 | 
            +
                end
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                def checkout_via_git
         | 
| 165 | 
            +
                  FileUtils.rm_rf(build_directory) if File.directory?(build_directory)
         | 
| 166 | 
            +
                  FileUtils.mkdir_p build_directory
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                  success = true
         | 
| 169 | 
            +
                  puts "Cloning from #{git_clone_url}..."
         | 
| 170 | 
            +
                  success = success && system("git clone --depth=1 #{git_clone_url} #{build_directory}")
         | 
| 171 | 
            +
                  FileUtils.cd build_directory do
         | 
| 172 | 
            +
                    puts "Fetching Single SHA"
         | 
| 173 | 
            +
                    fetch_success = system("git fetch origin #{sha} && git reset --hard FETCH_HEAD")
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                    unless fetch_success
         | 
| 176 | 
            +
                      puts "Unable to fetch single commit. Fetching FULL history"
         | 
| 177 | 
            +
                      fetch_success = system("git fetch --unshallow && git fetch origin #{sha} && git reset --hard #{sha}")
         | 
| 178 | 
            +
                    end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                    success = success && fetch_success
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                    puts "Removing Git folders before building..."
         | 
| 183 | 
            +
                    success = success && FileUtils.rm_rf("#{build_directory}/.git")
         | 
| 184 | 
            +
                  end
         | 
| 185 | 
            +
                  success
         | 
| 96 186 | 
             
                end
         | 
| 97 187 |  | 
| 98 188 | 
             
                def unpack_archive
         | 
| 189 | 
            +
                  puts "Unpacking archive to #{build_directory}..."
         | 
| 99 190 | 
             
                  FileUtils.rm_rf(build_directory) if File.directory?(build_directory)
         | 
| 100 191 | 
             
                  FileUtils.mkdir_p build_directory
         | 
| 101 192 |  | 
    
        data/lib/shiplane/host.rb
    CHANGED
    
    
    
        data/lib/shiplane/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: shiplane
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.20
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - John Epperson
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022-05- | 
| 11 | 
            +
            date: 2022-05-30 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: shiplane_bootstrappers_chef
         | 
| @@ -16,28 +16,28 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - '='
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: 0.2. | 
| 19 | 
            +
                    version: 0.2.20
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - '='
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: 0.2. | 
| 26 | 
            +
                    version: 0.2.20
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: shiplane_deployers_capistrano_docker
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - '='
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 0.2. | 
| 33 | 
            +
                    version: 0.2.20
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - '='
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 0.2. | 
| 40 | 
            +
                    version: 0.2.20
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: dotenv
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         |