envirobly 0.5.0 → 0.5.2
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/envirobly/config.rb +19 -20
 - data/lib/envirobly/deployment.rb +1 -1
 - data/lib/envirobly/git/commit.rb +20 -17
 - data/lib/envirobly/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 7cbc25ee0033c84e86fd94e67a3be65ee43c8fbcfd86cd962ecf9e5f616bf042
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e07002a42e3490bd841f6538ab7cd565990bf55e159fe8d7ce033cff62f6c38d
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: eb490ba6309b3775f548522596c6a5d42504ba2ca878ef8c74b530af12733b9a9ac1ce016ece2afdb7d6c616f4121ca418a49ef3037e06790a9e3da3b916ba93
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 7abc4689844be2617b74bb425c0ba8136b793d5c0c36600d58defdeadf8a84e9b31715442467c1e912b8988ee1c708c61eedb0192a2af3eadf9fc0b54bf0a327
         
     | 
    
        data/lib/envirobly/config.rb
    CHANGED
    
    | 
         @@ -35,7 +35,7 @@ class Envirobly::Config 
     | 
|
| 
       35 
35 
     | 
    
         
             
              def to_deployment_params
         
     | 
| 
       36 
36 
     | 
    
         
             
                {
         
     | 
| 
       37 
37 
     | 
    
         
             
                  environ: {
         
     | 
| 
       38 
     | 
    
         
            -
                     
     | 
| 
      
 38 
     | 
    
         
            +
                    name: @environment,
         
     | 
| 
       39 
39 
     | 
    
         
             
                    project_url: @project_url
         
     | 
| 
       40 
40 
     | 
    
         
             
                  },
         
     | 
| 
       41 
41 
     | 
    
         
             
                  commit: {
         
     | 
| 
         @@ -57,17 +57,17 @@ class Envirobly::Config 
     | 
|
| 
       57 
57 
     | 
    
         
             
                end
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
       59 
59 
     | 
    
         
             
                def set_project_url
         
     | 
| 
       60 
     | 
    
         
            -
                  @project_url = dig : 
     | 
| 
      
 60 
     | 
    
         
            +
                  @project_url = dig :project
         
     | 
| 
       61 
61 
     | 
    
         
             
                  if @project_url.blank?
         
     | 
| 
       62 
     | 
    
         
            -
                    @errors << "Missing  
     | 
| 
      
 62 
     | 
    
         
            +
                    @errors << "Missing `project: <url>` top level attribute."
         
     | 
| 
       63 
63 
     | 
    
         
             
                  end
         
     | 
| 
       64 
64 
     | 
    
         
             
                end
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
       66 
66 
     | 
    
         
             
                def transform_env_var_values!
         
     | 
| 
       67 
     | 
    
         
            -
                  @project.fetch(:services, {}).each do | 
     | 
| 
      
 67 
     | 
    
         
            +
                  @project.fetch(:services, {}).each do |name, service|
         
     | 
| 
       68 
68 
     | 
    
         
             
                    service.fetch(:env, {}).each do |key, value|
         
     | 
| 
       69 
69 
     | 
    
         
             
                      if value.is_a?(Hash) && value.has_key?(:file)
         
     | 
| 
       70 
     | 
    
         
            -
                        @project[:services][ 
     | 
| 
      
 70 
     | 
    
         
            +
                        @project[:services][name][:env][key] = @commit.file_content(value.fetch(:file)).strip
         
     | 
| 
       71 
71 
     | 
    
         
             
                      end
         
     | 
| 
       72 
72 
     | 
    
         
             
                    end
         
     | 
| 
       73 
73 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -75,39 +75,38 @@ class Envirobly::Config 
     | 
|
| 
       75 
75 
     | 
    
         | 
| 
       76 
76 
     | 
    
         
             
                NON_BUILDABLE_TYPES = %w[ postgres mysql valkey ]
         
     | 
| 
       77 
77 
     | 
    
         
             
                BUILD_DEFAULTS = {
         
     | 
| 
       78 
     | 
    
         
            -
                  dockerfile: "Dockerfile",
         
     | 
| 
       79 
     | 
    
         
            -
                  build_context: "."
         
     | 
| 
      
 78 
     | 
    
         
            +
                  dockerfile: [ "Dockerfile", :file_exists? ],
         
     | 
| 
      
 79 
     | 
    
         
            +
                  build_context: [ ".", :dir_exists? ]
         
     | 
| 
       80 
80 
     | 
    
         
             
                }
         
     | 
| 
       81 
81 
     | 
    
         
             
                def append_image_tags!
         
     | 
| 
       82 
     | 
    
         
            -
                  @project.fetch(:services, {}).each do | 
     | 
| 
      
 82 
     | 
    
         
            +
                  @project.fetch(:services, {}).each do |name, service|
         
     | 
| 
       83 
83 
     | 
    
         
             
                    next if NON_BUILDABLE_TYPES.include?(service[:type]) || service[:image].present?
         
     | 
| 
       84 
84 
     | 
    
         
             
                    checksums = []
         
     | 
| 
       85 
85 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
                    BUILD_DEFAULTS.each do |attribute,  
     | 
| 
       87 
     | 
    
         
            -
                      value = service.fetch(attribute,  
     | 
| 
       88 
     | 
    
         
            -
                       
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
                        @errors << "Service `#{logical_id}` specifies `#{attribute}` as `#{value}` which doesn't exist in this commit."
         
     | 
| 
      
 86 
     | 
    
         
            +
                    BUILD_DEFAULTS.each do |attribute, options|
         
     | 
| 
      
 87 
     | 
    
         
            +
                      value = service.fetch(attribute, options.first)
         
     | 
| 
      
 88 
     | 
    
         
            +
                      unless @commit.public_send(options.second, value)
         
     | 
| 
      
 89 
     | 
    
         
            +
                        @errors << "Service `#{name}` specifies `#{attribute}` as `#{value}` which doesn't exist in this commit."
         
     | 
| 
       91 
90 
     | 
    
         
             
                      else
         
     | 
| 
       92 
     | 
    
         
            -
                        checksums <<  
     | 
| 
      
 91 
     | 
    
         
            +
                        checksums << @commit.objects_with_checksum_at(value)
         
     | 
| 
       93 
92 
     | 
    
         
             
                      end
         
     | 
| 
       94 
93 
     | 
    
         
             
                    end
         
     | 
| 
       95 
94 
     | 
    
         | 
| 
       96 
95 
     | 
    
         
             
                    if checksums.size == 2
         
     | 
| 
       97 
     | 
    
         
            -
                      @project[:services][ 
     | 
| 
      
 96 
     | 
    
         
            +
                      @project[:services][name][:image_tag] = Digest::SHA1.hexdigest checksums.to_json
         
     | 
| 
       98 
97 
     | 
    
         
             
                    end
         
     | 
| 
       99 
98 
     | 
    
         
             
                  end
         
     | 
| 
       100 
99 
     | 
    
         
             
                end
         
     | 
| 
       101 
100 
     | 
    
         | 
| 
       102 
101 
     | 
    
         
             
                def merge_environment_overrides!
         
     | 
| 
       103 
102 
     | 
    
         
             
                  return unless services = @project.dig(:environments, @environment.to_sym)
         
     | 
| 
       104 
     | 
    
         
            -
                  services.each do | 
     | 
| 
      
 103 
     | 
    
         
            +
                  services.each do |name, service|
         
     | 
| 
       105 
104 
     | 
    
         
             
                    service.each do |attribute, value|
         
     | 
| 
       106 
     | 
    
         
            -
                      if value.is_a?(Hash) && @project[:services][ 
     | 
| 
       107 
     | 
    
         
            -
                        @project[:services][ 
     | 
| 
       108 
     | 
    
         
            -
                        @project[:services][ 
     | 
| 
      
 105 
     | 
    
         
            +
                      if value.is_a?(Hash) && @project[:services][name][attribute].is_a?(Hash)
         
     | 
| 
      
 106 
     | 
    
         
            +
                        @project[:services][name][attribute].merge! value
         
     | 
| 
      
 107 
     | 
    
         
            +
                        @project[:services][name][attribute].compact!
         
     | 
| 
       109 
108 
     | 
    
         
             
                      else
         
     | 
| 
       110 
     | 
    
         
            -
                        @project[:services][ 
     | 
| 
      
 109 
     | 
    
         
            +
                        @project[:services][name][attribute] = value
         
     | 
| 
       111 
110 
     | 
    
         
             
                      end
         
     | 
| 
       112 
111 
     | 
    
         
             
                    end
         
     | 
| 
       113 
112 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/envirobly/deployment.rb
    CHANGED
    
    | 
         @@ -36,7 +36,7 @@ class Envirobly::Deployment 
     | 
|
| 
       36 
36 
     | 
    
         
             
                bucket = response.object.fetch("bucket")
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                puts "Uploading build context, please wait..."
         
     | 
| 
       39 
     | 
    
         
            -
                unless commit.archive_and_upload(bucket:, credentials:)
         
     | 
| 
      
 39 
     | 
    
         
            +
                unless commit.archive_and_upload(bucket:, credentials:).success?
         
     | 
| 
       40 
40 
     | 
    
         
             
                  $stderr.puts "Error exporting build context. Aborting."
         
     | 
| 
       41 
41 
     | 
    
         
             
                  exit 1
         
     | 
| 
       42 
42 
     | 
    
         
             
                end
         
     | 
    
        data/lib/envirobly/git/commit.rb
    CHANGED
    
    | 
         @@ -8,47 +8,50 @@ class Envirobly::Git::Commit 
     | 
|
| 
       8 
8 
     | 
    
         
             
              end
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              def exists?
         
     | 
| 
       11 
     | 
    
         
            -
                 
     | 
| 
      
 11 
     | 
    
         
            +
                git(%(cat-file -t #{@ref})).stdout.strip == "commit"
         
     | 
| 
       12 
12 
     | 
    
         
             
              end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
              def ref
         
     | 
| 
       15 
     | 
    
         
            -
                @normalized_ref ||=  
     | 
| 
      
 15 
     | 
    
         
            +
                @normalized_ref ||= git(%(rev-parse #{@ref})).stdout.strip
         
     | 
| 
       16 
16 
     | 
    
         
             
              end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
              def message
         
     | 
| 
       19 
     | 
    
         
            -
                 
     | 
| 
      
 19 
     | 
    
         
            +
                git(%(log #{@ref} -n1 --pretty=%B)).stdout.strip
         
     | 
| 
       20 
20 
     | 
    
         
             
              end
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
              def time
         
     | 
| 
       23 
     | 
    
         
            -
                Time.parse  
     | 
| 
      
 23 
     | 
    
         
            +
                Time.parse git(%(log #{@ref} -n1 --date=iso --pretty=format:"%ad")).stdout
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def file_exists?(path)
         
     | 
| 
      
 27 
     | 
    
         
            +
                git(%(cat-file -t #{@ref}:#{path})).stdout.strip == "blob"
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def dir_exists?(path)
         
     | 
| 
      
 31 
     | 
    
         
            +
                suffix = path.end_with?("/") ? nil : "/"
         
     | 
| 
      
 32 
     | 
    
         
            +
                git(%(cat-file -t #{@ref}:#{path}#{suffix})).stdout.strip == "tree"
         
     | 
| 
       24 
33 
     | 
    
         
             
              end
         
     | 
| 
       25 
34 
     | 
    
         | 
| 
       26 
35 
     | 
    
         
             
              def file_content(path)
         
     | 
| 
       27 
     | 
    
         
            -
                 
     | 
| 
      
 36 
     | 
    
         
            +
                git(%(show #{@ref}:#{path})).stdout
         
     | 
| 
       28 
37 
     | 
    
         
             
              end
         
     | 
| 
       29 
38 
     | 
    
         | 
| 
       30 
39 
     | 
    
         
             
              def objects_with_checksum_at(path)
         
     | 
| 
       31 
     | 
    
         
            -
                 
     | 
| 
      
 40 
     | 
    
         
            +
                git(%{ls-tree #{@ref} --format='%(objectname) %(path)' #{path}}).stdout.lines.map(&:chomp).
         
     | 
| 
       32 
41 
     | 
    
         
             
                  reject { _1.split(" ").last == Envirobly::Config::DIR }
         
     | 
| 
       33 
42 
     | 
    
         
             
              end
         
     | 
| 
       34 
43 
     | 
    
         | 
| 
       35 
44 
     | 
    
         
             
              def archive_and_upload(bucket:, credentials:)
         
     | 
| 
       36 
     | 
    
         
            -
                 
     | 
| 
       37 
     | 
    
         
            -
                $?.success?
         
     | 
| 
      
 45 
     | 
    
         
            +
                git(%(archive --format=tar.gz #{ref} | #{credentials.as_inline_env_vars} aws s3 cp - #{archive_uri(bucket)}))
         
     | 
| 
       38 
46 
     | 
    
         
             
              end
         
     | 
| 
       39 
47 
     | 
    
         | 
| 
       40 
48 
     | 
    
         
             
              private
         
     | 
| 
       41 
     | 
    
         
            -
                 
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                   
     | 
| 
       44 
     | 
    
         
            -
                  Open3.popen3(full_cmd) do |stdin, stdout, stderr, thread|
         
     | 
| 
      
 49 
     | 
    
         
            +
                OUTPUT = Struct.new :stdout, :stderr, :exit_code, :success?
         
     | 
| 
      
 50 
     | 
    
         
            +
                def git(cmd)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  Open3.popen3("git #{cmd}", chdir: @working_dir) do |stdin, stdout, stderr, thread|
         
     | 
| 
       45 
52 
     | 
    
         
             
                    stdin.close
         
     | 
| 
       46 
     | 
    
         
            -
                     
     | 
| 
       47 
     | 
    
         
            -
                    @stderr = stderr.read
         
     | 
| 
       48 
     | 
    
         
            -
                    @exit_code = thread.value.exitstatus
         
     | 
| 
       49 
     | 
    
         
            -
                    @success = thread.value.success?
         
     | 
| 
      
 53 
     | 
    
         
            +
                    OUTPUT.new stdout.read, stderr.read, thread.value.exitstatus, thread.value.success?
         
     | 
| 
       50 
54 
     | 
    
         
             
                  end
         
     | 
| 
       51 
     | 
    
         
            -
                  @stdout
         
     | 
| 
       52 
55 
     | 
    
         
             
                end
         
     | 
| 
       53 
56 
     | 
    
         | 
| 
       54 
57 
     | 
    
         
             
                def archive_uri(bucket)
         
     | 
    
        data/lib/envirobly/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: envirobly
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.5. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.5.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Robert Starsi
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2024-09- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-09-20 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: thor
         
     |