appengine 0.5.0 → 0.6.0
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/CHANGELOG.md +6 -0
- data/lib/appengine/exec.rb +45 -6
- data/lib/appengine/tasks.rb +13 -1
- data/lib/appengine/version.rb +1 -1
- metadata +18 -27
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8985bf9ca824b3567577328e9c844eabcab5691907b0eb8a3385c181c91d2f13
         | 
| 4 | 
            +
              data.tar.gz: 04d8e4d73ee85d186798b69748191ec14423aecabfa1cbc5446d6e79e29b438c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: fa651f55f75abf3d21813891a34c26d9c27ffe0656f7b77e54f440a2bb8d747f751317327cdc250a72fc3e286e4a76b79ac4f44ace1f70f01d8d46d3a27866ec
         | 
| 7 | 
            +
              data.tar.gz: a03743e4a99da424fb1c588f83767389c36b82ddcb5271cba0462a5c7433bd113d3db1b668159dad5520eaa7fcb11ffcb88694133a0f46feb557ac69ada0bab2
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -2,6 +2,12 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            This is the change history for the appengine gem.
         | 
| 4 4 |  | 
| 5 | 
            +
            ## v0.6.0 (2020-12-02)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            *   Fix failure in the appengine:exec cloud_build strategy when App Engine doesn't provide the image
         | 
| 8 | 
            +
            *   Fix exception when appengine:exec is provided a shell command rather than a command array (tpbowden)
         | 
| 9 | 
            +
            *   Update stackdriver dependency to 0.20 and google-cloud-env dependency to 1.4
         | 
| 10 | 
            +
             | 
| 5 11 | 
             
            ## v0.5.0 (2019-07-15)
         | 
| 6 12 |  | 
| 7 13 | 
             
            *   appengine:exec supports the App Engine standard environment.
         | 
    
        data/lib/appengine/exec.rb
    CHANGED
    
    | @@ -15,6 +15,7 @@ | |
| 15 15 | 
             
            # limitations under the License.
         | 
| 16 16 |  | 
| 17 17 |  | 
| 18 | 
            +
            require "date"
         | 
| 18 19 | 
             
            require "erb"
         | 
| 19 20 | 
             
            require "json"
         | 
| 20 21 | 
             
            require "net/http"
         | 
| @@ -175,6 +176,11 @@ module AppEngine | |
| 175 176 | 
             
              # accessed only over a private IP, you should use the `deployment` strategy
         | 
| 176 177 | 
             
              # instead.
         | 
| 177 178 | 
             
              #
         | 
| 179 | 
            +
              # The Cloud Build log is output to the directory specified by
         | 
| 180 | 
            +
              # "CLOUD_BUILD_GCS_LOG_DIR". (ex. "gs://BUCKET-NAME/FOLDER-NAME")
         | 
| 181 | 
            +
              # By default, log directory name is
         | 
| 182 | 
            +
              # "gs://[PROJECT_NUMBER].cloudbuild-logs.googleusercontent.com/".
         | 
| 183 | 
            +
              #
         | 
| 178 184 | 
             
              # ### Specifying the host application
         | 
| 179 185 | 
             
              #
         | 
| 180 186 | 
             
              # The `cloud_build` strategy needs to know exactly which app, service, and
         | 
| @@ -365,11 +371,13 @@ module AppEngine | |
| 365 371 | 
             
                  #     standard). Allowed values are `nil`, `"deployment"` (which is the
         | 
| 366 372 | 
             
                  #     default for Standard), and `"cloud_build"` (which is the default
         | 
| 367 373 | 
             
                  #     for Flexible).
         | 
| 374 | 
            +
                  # @param gcs_log_dir [String,nil] GCS bucket name of the cloud build log
         | 
| 375 | 
            +
                  #     when strategy is "cloud_build". (ex. "gs://BUCKET-NAME/FOLDER-NAME")
         | 
| 368 376 | 
             
                  #
         | 
| 369 377 | 
             
                  def new_rake_task name, args: [], env_args: [],
         | 
| 370 378 | 
             
                                    service: nil, config_path: nil, version: nil,
         | 
| 371 379 | 
             
                                    timeout: nil, project: nil, wrapper_image: nil,
         | 
| 372 | 
            -
                                    strategy: nil
         | 
| 380 | 
            +
                                    strategy: nil, gcs_log_dir: nil
         | 
| 373 381 | 
             
                    escaped_args = args.map do |arg|
         | 
| 374 382 | 
             
                      arg.gsub(/[,\[\]]/) { |m| "\\#{m}" }
         | 
| 375 383 | 
             
                    end
         | 
| @@ -382,7 +390,7 @@ module AppEngine | |
| 382 390 | 
             
                    new ["bundle", "exec", "rake", name_with_args] + env_args,
         | 
| 383 391 | 
             
                        service: service, config_path: config_path, version: version,
         | 
| 384 392 | 
             
                        timeout: timeout, project: project, wrapper_image: wrapper_image,
         | 
| 385 | 
            -
                        strategy: strategy
         | 
| 393 | 
            +
                        strategy: strategy, gcs_log_dir: gcs_log_dir
         | 
| 386 394 | 
             
                  end
         | 
| 387 395 | 
             
                end
         | 
| 388 396 |  | 
| @@ -410,10 +418,12 @@ module AppEngine | |
| 410 418 | 
             
                #     standard). Allowed values are `nil`, `"deployment"` (which is the
         | 
| 411 419 | 
             
                #     default for Standard), and `"cloud_build"` (which is the default for
         | 
| 412 420 | 
             
                #     Flexible).
         | 
| 421 | 
            +
                # @param gcs_log_dir [String,nil] GCS bucket name of the cloud build log
         | 
| 422 | 
            +
                #     when strategy is "cloud_build". (ex. "gs://BUCKET-NAME/FOLDER-NAME")
         | 
| 413 423 | 
             
                #
         | 
| 414 424 | 
             
                def initialize command,
         | 
| 415 425 | 
             
                               project: nil, service: nil, config_path: nil, version: nil,
         | 
| 416 | 
            -
                               timeout: nil, wrapper_image: nil, strategy: nil
         | 
| 426 | 
            +
                               timeout: nil, wrapper_image: nil, strategy: nil, gcs_log_dir: nil
         | 
| 417 427 | 
             
                  @command = command
         | 
| 418 428 | 
             
                  @service = service
         | 
| 419 429 | 
             
                  @config_path = config_path
         | 
| @@ -422,6 +432,7 @@ module AppEngine | |
| 422 432 | 
             
                  @project = project
         | 
| 423 433 | 
             
                  @wrapper_image = wrapper_image
         | 
| 424 434 | 
             
                  @strategy = strategy
         | 
| 435 | 
            +
                  @gcs_log_dir = gcs_log_dir
         | 
| 425 436 |  | 
| 426 437 | 
             
                  yield self if block_given?
         | 
| 427 438 | 
             
                end
         | 
| @@ -502,7 +513,7 @@ module AppEngine | |
| 502 513 | 
             
                #
         | 
| 503 514 | 
             
                def resolve_parameters
         | 
| 504 515 | 
             
                  @timestamp_suffix = ::Time.now.strftime "%Y%m%d%H%M%S"
         | 
| 505 | 
            -
                  @command = ::Shellwords. | 
| 516 | 
            +
                  @command = ::Shellwords.split @command.to_s unless @command.is_a? Array
         | 
| 506 517 | 
             
                  @project ||= default_project
         | 
| 507 518 | 
             
                  @service ||= service_from_config || Exec.default_service
         | 
| 508 519 | 
             
                  @version ||= latest_version @service
         | 
| @@ -751,7 +762,8 @@ module AppEngine | |
| 751 762 | 
             
                  env_variables = app_info["envVariables"] || {}
         | 
| 752 763 | 
             
                  beta_settings = app_info["betaSettings"] || {}
         | 
| 753 764 | 
             
                  cloud_sql_instances = beta_settings["cloud_sql_instances"] || []
         | 
| 754 | 
            -
                   | 
| 765 | 
            +
                  container = app_info["deployment"]["container"]
         | 
| 766 | 
            +
                  image = container ? container["image"] : image_from_build(app_info)
         | 
| 755 767 |  | 
| 756 768 | 
             
                  describe_build_strategy
         | 
| 757 769 |  | 
| @@ -760,18 +772,45 @@ module AppEngine | |
| 760 772 | 
             
                  begin
         | 
| 761 773 | 
             
                    ::JSON.dump config, file
         | 
| 762 774 | 
             
                    file.flush
         | 
| 763 | 
            -
                     | 
| 775 | 
            +
                    execute_command = [
         | 
| 764 776 | 
             
                      "builds", "submit",
         | 
| 765 777 | 
             
                      "--project", @project,
         | 
| 766 778 | 
             
                      "--no-source",
         | 
| 767 779 | 
             
                      "--config", file.path,
         | 
| 768 780 | 
             
                      "--timeout", @timeout
         | 
| 769 781 | 
             
                    ]
         | 
| 782 | 
            +
                    execute_command.concat ["--gcs-log-dir", @gcs_log_dir] unless @gcs_log_dir.nil?
         | 
| 783 | 
            +
                    Util::Gcloud.execute execute_command
         | 
| 770 784 | 
             
                  ensure
         | 
| 771 785 | 
             
                    file.close!
         | 
| 772 786 | 
             
                  end
         | 
| 773 787 | 
             
                end
         | 
| 774 788 |  | 
| 789 | 
            +
                ##
         | 
| 790 | 
            +
                # @private
         | 
| 791 | 
            +
                # Workaround for https://github.com/GoogleCloudPlatform/appengine-ruby/issues/33
         | 
| 792 | 
            +
                # Determines the image by looking it up in Cloud Build
         | 
| 793 | 
            +
                #
         | 
| 794 | 
            +
                def image_from_build app_info
         | 
| 795 | 
            +
                  create_time = ::DateTime.parse(app_info["createTime"]).to_time.utc
         | 
| 796 | 
            +
                  after_time = (create_time - 3600).strftime "%Y-%m-%dT%H:%M:%SZ"
         | 
| 797 | 
            +
                  before_time = (create_time + 3600).strftime "%Y-%m-%dT%H:%M:%SZ"
         | 
| 798 | 
            +
                  partial_uri = "gcr.io/#{@project}/appengine/#{@service}.#{@version}"
         | 
| 799 | 
            +
                  filter = "createTime>#{after_time} createTime<#{before_time} images[]:#{partial_uri}"
         | 
| 800 | 
            +
                  result = Util::Gcloud.execute \
         | 
| 801 | 
            +
                    [
         | 
| 802 | 
            +
                      "builds", "list",
         | 
| 803 | 
            +
                      "--project", @project,
         | 
| 804 | 
            +
                      "--filter", filter,
         | 
| 805 | 
            +
                      "--format", "json"
         | 
| 806 | 
            +
                    ],
         | 
| 807 | 
            +
                    capture: true, assert: false
         | 
| 808 | 
            +
                  result.strip!
         | 
| 809 | 
            +
                  raise NoSuchVersion.new(@service, @version) if result.empty?
         | 
| 810 | 
            +
                  build_info = ::JSON.parse(result).first
         | 
| 811 | 
            +
                  build_info["images"].first
         | 
| 812 | 
            +
                end
         | 
| 813 | 
            +
             | 
| 775 814 | 
             
                def describe_build_strategy
         | 
| 776 815 | 
             
                  puts "\nUsing the `cloud_build` strategy for appengine:exec"
         | 
| 777 816 | 
             
                  puts "(i.e. running your app image in Cloud Build)"
         | 
    
        data/lib/appengine/tasks.rb
    CHANGED
    
    | @@ -113,6 +113,10 @@ module AppEngine | |
| 113 113 | 
             
              # the "cloud_build" strategy, and applies only to that strategy.) Normally,
         | 
| 114 114 | 
             
              # you should not override this unless you are testing a new wrapper.
         | 
| 115 115 | 
             
              #
         | 
| 116 | 
            +
              # #### CLOUD_BUILD_GCS_LOG_DIR
         | 
| 117 | 
            +
              #
         | 
| 118 | 
            +
              # GCS bucket name of the cloud build log when GAE_STRATEGY is "cloud_build".
         | 
| 119 | 
            +
              # (ex. "gs://BUCKET-NAME/FOLDER-NAME")
         | 
| 116 120 | 
             
              module Tasks
         | 
| 117 121 | 
             
                ## @private
         | 
| 118 122 | 
             
                PROJECT_ENV = "GAE_PROJECT"
         | 
| @@ -128,6 +132,8 @@ module AppEngine | |
| 128 132 | 
             
                TIMEOUT_ENV = "GAE_TIMEOUT"
         | 
| 129 133 | 
             
                ## @private
         | 
| 130 134 | 
             
                WRAPPER_IMAGE_ENV = "GAE_EXEC_WRAPPER_IMAGE"
         | 
| 135 | 
            +
                ## @private
         | 
| 136 | 
            +
                GCS_LOG_DIR = "CLOUD_BUILD_GCS_LOG_DIR"
         | 
| 131 137 |  | 
| 132 138 | 
             
                @defined = false
         | 
| 133 139 |  | 
| @@ -161,7 +167,8 @@ module AppEngine | |
| 161 167 | 
             
                                          version:       ::ENV[VERSION_ENV],
         | 
| 162 168 | 
             
                                          timeout:       ::ENV[TIMEOUT_ENV],
         | 
| 163 169 | 
             
                                          wrapper_image: ::ENV[WRAPPER_IMAGE_ENV],
         | 
| 164 | 
            -
                                          strategy:      ::ENV[STRATEGY_ENV]
         | 
| 170 | 
            +
                                          strategy:      ::ENV[STRATEGY_ENV],
         | 
| 171 | 
            +
                                          gcs_log_dir:   ::ENV[GCS_LOG_DIR]
         | 
| 165 172 | 
             
                      start_and_report_errors app_exec
         | 
| 166 173 | 
             
                      exit
         | 
| 167 174 | 
             
                    end
         | 
| @@ -274,6 +281,11 @@ module AppEngine | |
| 274 281 | 
             
                        the "cloud_build" strategy, and applies only to that strategy.) Normally,
         | 
| 275 282 | 
             
                        you should not override this unless you are testing a new wrapper.
         | 
| 276 283 |  | 
| 284 | 
            +
                      CLOUD_BUILD_GCS_LOG_DIR
         | 
| 285 | 
            +
             | 
| 286 | 
            +
                        GCS bucket name of the cloud build log when GAE_STRATEGY is "cloud_build".
         | 
| 287 | 
            +
                        (ex. "gs://BUCKET-NAME/FOLDER-NAME")
         | 
| 288 | 
            +
             | 
| 277 289 | 
             
                      This rake task is provided by the "appengine" gem. To make these tasks
         | 
| 278 290 | 
             
                      available, add the following line to your Rakefile:
         | 
| 279 291 |  | 
    
        data/lib/appengine/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: appengine
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Daniel Azuma
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2020-12-02 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: google-cloud-env
         | 
| @@ -16,28 +16,34 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '1. | 
| 19 | 
            +
                    version: '1.4'
         | 
| 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: '1. | 
| 26 | 
            +
                    version: '1.4'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: stackdriver
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: '0. | 
| 33 | 
            +
                    version: '0.20'
         | 
| 34 | 
            +
                - - ">="
         | 
| 35 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 36 | 
            +
                    version: 0.20.1
         | 
| 34 37 | 
             
              type: :runtime
         | 
| 35 38 | 
             
              prerelease: false
         | 
| 36 39 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 40 | 
             
                requirements:
         | 
| 38 41 | 
             
                - - "~>"
         | 
| 39 42 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: '0. | 
| 43 | 
            +
                    version: '0.20'
         | 
| 44 | 
            +
                - - ">="
         | 
| 45 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 46 | 
            +
                    version: 0.20.1
         | 
| 41 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 48 | 
             
              name: bundler
         | 
| 43 49 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -58,14 +64,14 @@ dependencies: | |
| 58 64 | 
             
                requirements:
         | 
| 59 65 | 
             
                - - "~>"
         | 
| 60 66 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version:  | 
| 67 | 
            +
                    version: 1.24.0
         | 
| 62 68 | 
             
              type: :development
         | 
| 63 69 | 
             
              prerelease: false
         | 
| 64 70 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 71 | 
             
                requirements:
         | 
| 66 72 | 
             
                - - "~>"
         | 
| 67 73 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version:  | 
| 74 | 
            +
                    version: 1.24.0
         | 
| 69 75 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 76 | 
             
              name: minitest
         | 
| 71 77 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -150,34 +156,20 @@ dependencies: | |
| 150 156 | 
             
                - - "~>"
         | 
| 151 157 | 
             
                  - !ruby/object:Gem::Version
         | 
| 152 158 | 
             
                    version: '3.4'
         | 
| 153 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 154 | 
            -
              name: rubocop
         | 
| 155 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 156 | 
            -
                requirements:
         | 
| 157 | 
            -
                - - "~>"
         | 
| 158 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 159 | 
            -
                    version: 0.64.0
         | 
| 160 | 
            -
              type: :development
         | 
| 161 | 
            -
              prerelease: false
         | 
| 162 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 163 | 
            -
                requirements:
         | 
| 164 | 
            -
                - - "~>"
         | 
| 165 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 166 | 
            -
                    version: 0.64.0
         | 
| 167 159 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 168 160 | 
             
              name: toys
         | 
| 169 161 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 170 162 | 
             
                requirements:
         | 
| 171 163 | 
             
                - - "~>"
         | 
| 172 164 | 
             
                  - !ruby/object:Gem::Version
         | 
| 173 | 
            -
                    version: '0. | 
| 165 | 
            +
                    version: '0.11'
         | 
| 174 166 | 
             
              type: :development
         | 
| 175 167 | 
             
              prerelease: false
         | 
| 176 168 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 177 169 | 
             
                requirements:
         | 
| 178 170 | 
             
                - - "~>"
         | 
| 179 171 | 
             
                  - !ruby/object:Gem::Version
         | 
| 180 | 
            -
                    version: '0. | 
| 172 | 
            +
                    version: '0.11'
         | 
| 181 173 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 182 174 | 
             
              name: yard
         | 
| 183 175 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -229,15 +221,14 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 229 221 | 
             
              requirements:
         | 
| 230 222 | 
             
              - - ">="
         | 
| 231 223 | 
             
                - !ruby/object:Gem::Version
         | 
| 232 | 
            -
                  version: 2. | 
| 224 | 
            +
                  version: 2.4.0
         | 
| 233 225 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 234 226 | 
             
              requirements:
         | 
| 235 227 | 
             
              - - ">="
         | 
| 236 228 | 
             
                - !ruby/object:Gem::Version
         | 
| 237 229 | 
             
                  version: '0'
         | 
| 238 230 | 
             
            requirements: []
         | 
| 239 | 
            -
             | 
| 240 | 
            -
            rubygems_version: 2.7.6.2
         | 
| 231 | 
            +
            rubygems_version: 3.0.3
         | 
| 241 232 | 
             
            signing_key: 
         | 
| 242 233 | 
             
            specification_version: 4
         | 
| 243 234 | 
             
            summary: Google App Engine integration tools
         |