cnvrg 2.0.1 → 2.0.15
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/Readme.md +43 -1
- data/lib/cnvrg/api.rb +2 -0
- data/lib/cnvrg/api_v2.rb +1 -0
- data/lib/cnvrg/auth.rb +4 -1
- data/lib/cnvrg/cli/library_cli.rb +2 -2
- data/lib/cnvrg/cli.rb +115 -43
- data/lib/cnvrg/files.rb +5 -1
- data/lib/cnvrg/helpers/executer.rb +2 -2
- data/lib/cnvrg/project.rb +27 -8
- data/lib/cnvrg/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: 4092be1be35506977a7f1b4778b5bb1dfa234a02fc572812e773069f38e3d518
         | 
| 4 | 
            +
              data.tar.gz: f8e954f4bbcbb4b735966c1391c3570c6ab7bf32036c825b7fd6a25460a7d5ef
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 8e80a6d6d66eb5101eaa82c339c9c3862d4e39fbaaff7ba6e6d2278d0be5ef1cfc1b7b029e50dd567bf79af389911e2d27ad0d056e33110d1c56b4d613008b33
         | 
| 7 | 
            +
              data.tar.gz: ab28db04b2d89b4170c1df63c7fec38c0027538f0e5620672a8ca358fd3234e4d177cdadaf46f5ebb8fe0c5c90f20cfd97179d1456201432b14b094b1555b666
         | 
    
        data/Readme.md
    CHANGED
    
    | @@ -23,4 +23,46 @@ | |
| 23 23 | 
             
            2021-05-05
         | 
| 24 24 | 
             
            * DEV-8868 - Bug: SDK - e.sync() in git project only creates empty "output" folder in commit
         | 
| 25 25 | 
             
            ## Version v2.0.1
         | 
| 26 | 
            -
            2021-06-13
         | 
| 26 | 
            +
            2021-06-13
         | 
| 27 | 
            +
            ## Version v2.0.2
         | 
| 28 | 
            +
            2021-06-16
         | 
| 29 | 
            +
            * DEV-9694 - Bug: Download artifacts fails on authorization error 
         | 
| 30 | 
            +
            ## Version v2.0.3
         | 
| 31 | 
            +
            2021-06-29
         | 
| 32 | 
            +
            * DEV-9919 - Bug: clone artifacts fails on "Not Authorize, Are you logged in?"
         | 
| 33 | 
            +
            ## Version v2.0.4
         | 
| 34 | 
            +
            2021-07-08
         | 
| 35 | 
            +
            * DEV-9935 - Bug: CLI - cnvrg sync creates new commit but no blob versions
         | 
| 36 | 
            +
            ## Version v2.0.5
         | 
| 37 | 
            +
            2021-07-11
         | 
| 38 | 
            +
            * DEV-10171 - Bug: experiment randomly fails with error- "Couldn't clone artifacts"
         | 
| 39 | 
            +
            * DEV-10189 - Bug: CLI Sync -file/folder with broken symlink will cause sync to fail
         | 
| 40 | 
            +
            ## Version v2.0.6
         | 
| 41 | 
            +
            2021-07-18
         | 
| 42 | 
            +
            * DEV-10209 - Bug: some experiments in grid failed on cnvrg-cli commands (docker container id was missing)
         | 
| 43 | 
            +
            ## Version v2.0.7
         | 
| 44 | 
            +
            2021-07-27
         | 
| 45 | 
            +
            * DEV-10186 - Bug: CLI/run an experiment with --local tag giver server error
         | 
| 46 | 
            +
            ## Version v2.0.8
         | 
| 47 | 
            +
            2021-09-06
         | 
| 48 | 
            +
            * DEV-10697 - Bug: Tensorboard not starting in workspace and experiment.
         | 
| 49 | 
            +
            ## Version v2.0.9
         | 
| 50 | 
            +
            2021-09-12
         | 
| 51 | 
            +
            * DEV-10502 - Bug: Periodic sync stuck
         | 
| 52 | 
            +
            ## Version v2.0.10
         | 
| 53 | 
            +
            2021-09-12
         | 
| 54 | 
            +
            * DEV-10502 - Bug: Periodic sync stuck
         | 
| 55 | 
            +
            ## Version v2.0.11
         | 
| 56 | 
            +
            2021-10-21
         | 
| 57 | 
            +
            ## Version v2.0.12
         | 
| 58 | 
            +
            2021-10-25
         | 
| 59 | 
            +
            * DEV-11544 - Sub-bug: local experiment is failing to run 
         | 
| 60 | 
            +
            ## Version v2.0.13
         | 
| 61 | 
            +
            2021-10-27
         | 
| 62 | 
            +
            * DEV-11054 - Task: Create organization and user by default
         | 
| 63 | 
            +
            ## Version v2.0.14
         | 
| 64 | 
            +
            2021-11-11
         | 
| 65 | 
            +
            * DEV-11834 - Sub-task: add device name to hpu metrics
         | 
| 66 | 
            +
            ## Version v2.0.15
         | 
| 67 | 
            +
            2021-12-12
         | 
| 68 | 
            +
            * DEV-12316 - Improvement: cli login should identify saas users automatically
         | 
    
        data/lib/cnvrg/api.rb
    CHANGED
    
    | @@ -57,6 +57,7 @@ module Cnvrg | |
| 57 57 | 
             
                                conn = Faraday.new "#{endpoint_uri}"
         | 
| 58 58 | 
             
                            end
         | 
| 59 59 | 
             
                        conn.headers['Auth-Token'] = @pass
         | 
| 60 | 
            +
                        conn.headers['Authorization'] = "CAPI #{@pass}"
         | 
| 60 61 | 
             
                        conn.headers['User-Agent'] = "#{Cnvrg::API::USER_AGENT}"
         | 
| 61 62 | 
             
                        conn.options.timeout = 420
         | 
| 62 63 | 
             
                            conn.options.open_timeout=180
         | 
| @@ -169,6 +170,7 @@ module Cnvrg | |
| 169 170 | 
             
                        when 'POST_FILE'
         | 
| 170 171 | 
             
                            conn = Faraday.new do |fr|
         | 
| 171 172 | 
             
                                fr.headers['Auth-Token'] = @pass
         | 
| 173 | 
            +
                                fr.headers['Authorization'] = "CAPI #{@pass}"
         | 
| 172 174 | 
             
                                fr.headers['User-Agent'] = "#{Cnvrg::API::USER_AGENT}"
         | 
| 173 175 | 
             
                                fr.headers["Content-Type"] = "multipart/form-data"
         | 
| 174 176 | 
             
                                if !Helpers.is_verify_ssl
         | 
    
        data/lib/cnvrg/api_v2.rb
    CHANGED
    
    | @@ -22,6 +22,7 @@ module Cnvrg | |
| 22 22 |  | 
| 23 23 | 
             
                  conn = Faraday.new endpoint_uri, :ssl => {:verify => !!Helpers.is_verify_ssl}
         | 
| 24 24 | 
             
                  conn.headers['Auth-Token'] = pass
         | 
| 25 | 
            +
                  conn.headers['Authorization'] = "CAPI #{pass}"
         | 
| 25 26 | 
             
                  conn.headers['User-Agent'] = Cnvrg::API::USER_AGENT
         | 
| 26 27 | 
             
                  conn.headers['Content-Type'] = "application/json"
         | 
| 27 28 | 
             
                  conn.options.timeout = 420
         | 
    
        data/lib/cnvrg/auth.rb
    CHANGED
    
    | @@ -44,7 +44,7 @@ module Cnvrg | |
| 44 44 | 
             
                        end
         | 
| 45 45 | 
             
                    end
         | 
| 46 46 |  | 
| 47 | 
            -
                    def sign_in(email, password)
         | 
| 47 | 
            +
                    def sign_in(email, password, token: nil)
         | 
| 48 48 | 
             
                        url = Cnvrg::API.endpoint_uri()
         | 
| 49 49 | 
             
                        url = URI.parse(url+ "/users/sign_in")
         | 
| 50 50 | 
             
                        http = Net::HTTP.new(url.host, url.port)
         | 
| @@ -61,6 +61,9 @@ module Cnvrg | |
| 61 61 |  | 
| 62 62 | 
             
                        req.add_field("EMAIL", email)
         | 
| 63 63 | 
             
                        req.add_field("PASSWORD", password)
         | 
| 64 | 
            +
                        if token.present?
         | 
| 65 | 
            +
                            req.add_field("Authorization", "CAPI #{token}")
         | 
| 66 | 
            +
                        end
         | 
| 64 67 |  | 
| 65 68 | 
             
                        response = http.request(req)
         | 
| 66 69 |  | 
    
        data/lib/cnvrg/cli.rb
    CHANGED
    
    | @@ -496,8 +496,10 @@ module Cnvrg | |
| 496 496 |  | 
| 497 497 |  | 
| 498 498 | 
             
                desc 'login', 'Authenticate with cnvrg.io platform'
         | 
| 499 | 
            +
                method_option :sso, :type => :boolean, :aliases => ["-s", "--sso"], :default => false
         | 
| 499 500 |  | 
| 500 501 | 
             
                def login
         | 
| 502 | 
            +
                  use_token = options["sso"]
         | 
| 501 503 | 
             
                  begin
         | 
| 502 504 | 
             
                    log_handler()
         | 
| 503 505 | 
             
                    log_start(__method__, args, options)
         | 
| @@ -515,12 +517,22 @@ module Cnvrg | |
| 515 517 | 
             
                      exit(0)
         | 
| 516 518 | 
             
                    end
         | 
| 517 519 | 
             
                    @email = ask("Enter your email:")
         | 
| 518 | 
            -
                     | 
| 519 | 
            -
                     | 
| 520 | 
            +
                    url = Cnvrg::API.endpoint_uri()
         | 
| 521 | 
            +
                    if use_token or url.include?("cloud.cnvrg.io")
         | 
| 522 | 
            +
                      @token = cmd.ask("Enter your token (hidden):") {|q| q.echo = "*"}
         | 
| 523 | 
            +
                      netrc[Cnvrg::Helpers.netrc_domain] = @email, @token
         | 
| 524 | 
            +
                      netrc.save
         | 
| 525 | 
            +
                      password = ""
         | 
| 526 | 
            +
                    else
         | 
| 527 | 
            +
                      password = cmd.ask("Enter your password (hidden):") {|q| q.echo = "*"}
         | 
| 528 | 
            +
                    end
         | 
| 529 | 
            +
                    result = @auth.sign_in(@email, password, token: @token)
         | 
| 520 530 |  | 
| 521 531 | 
             
                    if !result["token"].nil?
         | 
| 522 | 
            -
                       | 
| 523 | 
            -
             | 
| 532 | 
            +
                      unless use_token
         | 
| 533 | 
            +
                        netrc[Cnvrg::Helpers.netrc_domain] = @email, result["token"]
         | 
| 534 | 
            +
                        netrc.save
         | 
| 535 | 
            +
                      end
         | 
| 524 536 |  | 
| 525 537 | 
             
                      log_message("Authenticated successfully as #{@email}", Thor::Shell::Color::GREEN)
         | 
| 526 538 |  | 
| @@ -3006,12 +3018,12 @@ module Cnvrg | |
| 3006 3018 | 
             
                method_option :job_slug, :type => :string, :aliases => ["-j", "--job"], :default => nil
         | 
| 3007 3019 | 
             
                method_option :job_type, :type => :string, :aliases => ["-jt", "--job_type"], :default => nil
         | 
| 3008 3020 | 
             
                method_option :files, :type => :string, :aliases => ["--files"], :default => nil
         | 
| 3009 | 
            -
                method_option :output_dir, :type => :string, :aliases => ["--output_dir"], :default =>  | 
| 3021 | 
            +
                method_option :output_dir, :type => :string, :aliases => ["--output_dir"], :default => 'output'
         | 
| 3010 3022 | 
             
                method_option :git_diff, :type => :boolean, :aliases => ["--git_diff"], :default => false
         | 
| 3011 3023 | 
             
                method_option :suppress_exceptions, :type => :boolean, :aliases => ["--suppress-exceptions"], :default => true
         | 
| 3012 3024 | 
             
                method_option :debug_mode, :type => :boolean, :aliases => ["--debug-mode"], :default => false
         | 
| 3013 3025 | 
             
                method_option :chunk_size, :type => :numeric, :aliases => ["--chunk"], :default => 1000
         | 
| 3014 | 
            -
                method_option :local, :type => :boolean, :aliases => ["--local"], :default =>  | 
| 3026 | 
            +
                method_option :local, :type => :boolean, :aliases => ["--local"], :default => true
         | 
| 3015 3027 |  | 
| 3016 3028 | 
             
                def sync(direct = true)
         | 
| 3017 3029 | 
             
                  verify_logged_in(true) if direct
         | 
| @@ -3147,7 +3159,7 @@ module Cnvrg | |
| 3147 3159 | 
             
                      invoke :exec, [cmd], :sync_before => sync_before, :sync_after => sync_after, :title => title,
         | 
| 3148 3160 | 
             
                             :log => log, :email_notification => email_notification, :upload_output => upload_output,
         | 
| 3149 3161 | 
             
                             :commit => commit, :image => image, :data => data, :data_commit => data_commit,
         | 
| 3150 | 
            -
                             :ignore => ignore, :force => force, :output_dir=>output_dir, :data_query=>data_query
         | 
| 3162 | 
            +
                             :ignore => ignore, :force => force, :output_dir=>output_dir, :data_query=>data_query, :local => local
         | 
| 3151 3163 | 
             
                      return
         | 
| 3152 3164 | 
             
                    end
         | 
| 3153 3165 | 
             
                  else
         | 
| @@ -3204,6 +3216,7 @@ module Cnvrg | |
| 3204 3216 | 
             
                method_option :data_query, :type => :string, :aliases => ["-q", "--query"], :default => nil
         | 
| 3205 3217 | 
             
                method_option :use_bash, :type => :boolean, :aliases => ["-b", "--use_bash"], :default => false
         | 
| 3206 3218 | 
             
                method_option :docker_stats, :type => :boolean, :aliases => ["--docker_stats"], :default => true
         | 
| 3219 | 
            +
                method_option :local, :type => :boolean, :aliases => ["-l", "--local"], :default => false
         | 
| 3207 3220 |  | 
| 3208 3221 | 
             
                def exec(*cmd)
         | 
| 3209 3222 | 
             
                  log = []
         | 
| @@ -3228,6 +3241,7 @@ module Cnvrg | |
| 3228 3241 | 
             
                  project_home = get_project_home
         | 
| 3229 3242 | 
             
                  data_query = options["data_query"]
         | 
| 3230 3243 | 
             
                  docker_stats = options["docker_stats"]
         | 
| 3244 | 
            +
                  local = options[:local] || false
         | 
| 3231 3245 | 
             
                  @project = Project.new(project_home)
         | 
| 3232 3246 | 
             
                  if @project.is_git
         | 
| 3233 3247 | 
             
                    sync_before = false
         | 
| @@ -3323,43 +3337,49 @@ module Cnvrg | |
| 3323 3337 | 
             
                          if @exp.get_cmd.present?
         | 
| 3324 3338 | 
             
                            cmd = @exp.get_cmd
         | 
| 3325 3339 | 
             
                          end
         | 
| 3326 | 
            -
             | 
| 3327 | 
            -
                           | 
| 3328 | 
            -
             | 
| 3329 | 
            -
             | 
| 3330 | 
            -
             | 
| 3331 | 
            -
                           | 
| 3332 | 
            -
             | 
| 3333 | 
            -
                             | 
| 3334 | 
            -
                             | 
| 3335 | 
            -
             | 
| 3336 | 
            -
             | 
| 3337 | 
            -
             | 
| 3338 | 
            -
             | 
| 3339 | 
            -
             | 
| 3340 | 
            -
             | 
| 3341 | 
            -
                             | 
| 3342 | 
            -
             | 
| 3343 | 
            -
             | 
| 3344 | 
            -
             | 
| 3345 | 
            -
             | 
| 3346 | 
            -
                               | 
| 3347 | 
            -
                                 | 
| 3348 | 
            -
                                 | 
| 3349 | 
            -
             | 
| 3350 | 
            -
             | 
| 3351 | 
            -
                                 | 
| 3352 | 
            -
             | 
| 3353 | 
            -
             | 
| 3354 | 
            -
             | 
| 3355 | 
            -
             | 
| 3356 | 
            -
             | 
| 3357 | 
            -
                                 | 
| 3358 | 
            -
                                log  | 
| 3359 | 
            -
             | 
| 3340 | 
            +
             | 
| 3341 | 
            +
                          if local
         | 
| 3342 | 
            +
                            exec_local(cmd, print_log, start_commit, real, start_time)
         | 
| 3343 | 
            +
                            exit_status = $?.exitstatus
         | 
| 3344 | 
            +
             | 
| 3345 | 
            +
                          else
         | 
| 3346 | 
            +
                            command_slug = (0...18).map { (65 + rand(26)).chr }.join
         | 
| 3347 | 
            +
                            result_file = "/conf/result-#{command_slug}"
         | 
| 3348 | 
            +
                            data = {cmd: cmd, async: true, format: true, file_name: result_file, use_script: true, use_bash: options["use_bash"]}
         | 
| 3349 | 
            +
                            conn = Cnvrg::Helpers::Executer.get_main_conn
         | 
| 3350 | 
            +
                            response = conn.post('command', data.to_json)
         | 
| 3351 | 
            +
                            if response.to_hash[:status].to_i != 200
         | 
| 3352 | 
            +
                              exit_status = 129
         | 
| 3353 | 
            +
                              raise StandardError.new("Cant send command to slave")
         | 
| 3354 | 
            +
                            end
         | 
| 3355 | 
            +
                            t = FileWatch::Tail.new
         | 
| 3356 | 
            +
                            filename = result_file
         | 
| 3357 | 
            +
                            lines = []
         | 
| 3358 | 
            +
                            t.tail(filename)
         | 
| 3359 | 
            +
                            t.subscribe do |path, line|
         | 
| 3360 | 
            +
                              begin
         | 
| 3361 | 
            +
                                cur_log = JSON.parse(line)
         | 
| 3362 | 
            +
                                if cur_log["type"] == "endMessage"
         | 
| 3363 | 
            +
                                  exit_status = cur_log["real"].to_i
         | 
| 3364 | 
            +
                                  break
         | 
| 3365 | 
            +
                                else
         | 
| 3366 | 
            +
                                  puts(cur_log.to_json)
         | 
| 3367 | 
            +
                                  STDOUT.flush
         | 
| 3368 | 
            +
                                  cur_log["time"] = Time.parse(cur_log["timestamp"])
         | 
| 3369 | 
            +
                                  cur_log["message"] = cur_log["message"].to_s + "\r\n"
         | 
| 3370 | 
            +
                                  log << cur_log
         | 
| 3371 | 
            +
                                end
         | 
| 3372 | 
            +
                                if log.size >= 10
         | 
| 3373 | 
            +
                                  @exp.upload_temp_log(log)
         | 
| 3374 | 
            +
                                  log = []
         | 
| 3375 | 
            +
                                elsif (start_time + 15.seconds) <= Time.now
         | 
| 3376 | 
            +
                                  @exp.upload_temp_log(log) unless log.empty?
         | 
| 3377 | 
            +
                                  log = []
         | 
| 3378 | 
            +
                                  start_time = Time.now
         | 
| 3379 | 
            +
                                end
         | 
| 3380 | 
            +
                              rescue => e
         | 
| 3381 | 
            +
                                log_error(e)
         | 
| 3360 3382 | 
             
                              end
         | 
| 3361 | 
            -
                            rescue => e
         | 
| 3362 | 
            -
                              log_error(e)
         | 
| 3363 3383 | 
             
                            end
         | 
| 3364 3384 | 
             
                          end
         | 
| 3365 3385 | 
             
                          end_time = Time.now
         | 
| @@ -4692,6 +4712,7 @@ module Cnvrg | |
| 4692 4712 | 
             
                          data_result.each_with_index do |res, i|
         | 
| 4693 4713 | 
             
                            timestamp, value = res["value"]
         | 
| 4694 4714 | 
             
                            uuid = res["metric"]["UUID"].presence || i
         | 
| 4715 | 
            +
                            uuid = res["metric"]["device"] if query_name == "gaudi"
         | 
| 4695 4716 | 
             
                            stat_value = value.present? ? ("%.2f" % value) : 0 # converting 34.685929244444445 to 34.69
         | 
| 4696 4717 | 
             
                            stat_value = stat_value.to_i == stat_value.to_f ? stat_value.to_i : stat_value.to_f # converting 34.00 to 34
         | 
| 4697 4718 | 
             
                            if query_name.include? 'block'
         | 
| @@ -5876,6 +5897,57 @@ module Cnvrg | |
| 5876 5897 | 
             
                    end
         | 
| 5877 5898 | 
             
                  end
         | 
| 5878 5899 |  | 
| 5900 | 
            +
                  def exec_local(cmd , print_log, start_commit, real, start_time)
         | 
| 5901 | 
            +
                    log = []
         | 
| 5902 | 
            +
                    PTY.spawn(@exp.as_env, cmd) do |stdout, stdin, pid, stderr|
         | 
| 5903 | 
            +
                      begin
         | 
| 5904 | 
            +
                        stdout.each do |line|
         | 
| 5905 | 
            +
                          cur_time = Time.now
         | 
| 5906 | 
            +
                          real_time = Time.now - real
         | 
| 5907 | 
            +
                          cur_log = {time: cur_time,
         | 
| 5908 | 
            +
                                     message: line,
         | 
| 5909 | 
            +
                                     type: "stdout",
         | 
| 5910 | 
            +
                                     real: real_time
         | 
| 5911 | 
            +
                          }
         | 
| 5912 | 
            +
                          if print_log
         | 
| 5913 | 
            +
                            puts({log: line, timestamp: Time.now, exp_logs: true}.to_json)
         | 
| 5914 | 
            +
                          end
         | 
| 5915 | 
            +
                          log << cur_log
         | 
| 5916 | 
            +
                          if log.size >= 10
         | 
| 5917 | 
            +
                            @exp.upload_temp_log(log) unless log.empty?
         | 
| 5918 | 
            +
                            log = []
         | 
| 5919 | 
            +
                          elsif (start_time + 15.seconds) <= Time.now
         | 
| 5920 | 
            +
                            @exp.upload_temp_log(log) unless log.empty?
         | 
| 5921 | 
            +
                            log = []
         | 
| 5922 | 
            +
                            start_time = Time.now
         | 
| 5923 | 
            +
                          end
         | 
| 5924 | 
            +
                        end
         | 
| 5925 | 
            +
                        if stderr
         | 
| 5926 | 
            +
                          stderr.each do |err|
         | 
| 5927 | 
            +
                            log << {time: Time.now, message: err, type: "stderr"}
         | 
| 5928 | 
            +
                          end
         | 
| 5929 | 
            +
                        end
         | 
| 5930 | 
            +
                      rescue Errno::EIO => e
         | 
| 5931 | 
            +
                        log_error(e)
         | 
| 5932 | 
            +
                        if !log.empty?
         | 
| 5933 | 
            +
                          temp_log = log
         | 
| 5934 | 
            +
                          @exp.upload_temp_log(temp_log) unless temp_log.empty?
         | 
| 5935 | 
            +
                          log -= temp_log
         | 
| 5936 | 
            +
                        end
         | 
| 5937 | 
            +
                      rescue Errno::ENOENT => e
         | 
| 5938 | 
            +
                        exp_success = false
         | 
| 5939 | 
            +
                        log_message("command \"#{cmd}\" couldn't be executed, verify command is valid", Thor::Shell::Color::RED)
         | 
| 5940 | 
            +
                        log_error(e)
         | 
| 5941 | 
            +
                      rescue => e
         | 
| 5942 | 
            +
                        res = @exp.end(log, 1, start_commit, 0, 0)
         | 
| 5943 | 
            +
                        log_message("Error occurred,aborting", Thor::Shell::Color::RED)
         | 
| 5944 | 
            +
                        log_error(e)
         | 
| 5945 | 
            +
                        exit(0)
         | 
| 5946 | 
            +
                      end
         | 
| 5947 | 
            +
                      ::Process.wait pid
         | 
| 5948 | 
            +
                    end
         | 
| 5949 | 
            +
                  end
         | 
| 5950 | 
            +
             | 
| 5879 5951 | 
             
                end
         | 
| 5880 5952 | 
             
              end
         | 
| 5881 5953 |  | 
    
        data/lib/cnvrg/files.rb
    CHANGED
    
    | @@ -730,7 +730,11 @@ module Cnvrg | |
| 730 730 | 
             
                  end
         | 
| 731 731 | 
             
                  res = Cnvrg::API.request(@base_resource + "download_files", 'POST', {files: files, commit: commit})
         | 
| 732 732 | 
             
                  unless Cnvrg::CLI.is_response_success(res, false)
         | 
| 733 | 
            -
                     | 
| 733 | 
            +
                    begin
         | 
| 734 | 
            +
                      puts(res)
         | 
| 735 | 
            +
                    rescue
         | 
| 736 | 
            +
                    end
         | 
| 737 | 
            +
                    raise StandardError.new("Cant download files from the server.")
         | 
| 734 738 | 
             
                  end
         | 
| 735 739 | 
             
                  self.download_multiple_files_s3(res['result'], @project_home, postfix: postfix, progress: progress, threads: threads)
         | 
| 736 740 | 
             
                end
         | 
| @@ -3,7 +3,7 @@ require 'cnvrg/helpers/agent' | |
| 3 3 | 
             
            class Cnvrg::Helpers::Executer
         | 
| 4 4 | 
             
              attr_reader :machine_activity, :agent_id, :main_id
         | 
| 5 5 | 
             
              MAIN_CONTAINER_PORT = ENV['MAIN_CONTAINER_PORT'].try(:to_i) || 4000
         | 
| 6 | 
            -
             | 
| 6 | 
            +
              HAS_DOCKER = ENV['HAS_DOCKER'] == "true"
         | 
| 7 7 |  | 
| 8 8 | 
             
              ### this class represent a machine_activity. it will poll the commands, communicate with the
         | 
| 9 9 | 
             
              # server (poll commands) and let the server know the status of this executer.
         | 
| @@ -84,7 +84,7 @@ class Cnvrg::Helpers::Executer | |
| 84 84 | 
             
                agent_id = nil
         | 
| 85 85 | 
             
                main_id = nil
         | 
| 86 86 | 
             
                timeout = 2
         | 
| 87 | 
            -
                timeout = nil if !@is_new_main
         | 
| 87 | 
            +
                timeout = nil if (!@is_new_main || HAS_DOCKER)
         | 
| 88 88 | 
             
                Timeout.timeout(timeout) do
         | 
| 89 89 | 
             
                  while agent_id.blank? or main_id.blank?
         | 
| 90 90 | 
             
                    grep_by = @job_id
         | 
    
        data/lib/cnvrg/project.rb
    CHANGED
    
    | @@ -328,15 +328,21 @@ module Cnvrg | |
| 328 328 | 
             
                end
         | 
| 329 329 |  | 
| 330 330 | 
             
                def get_storage_client
         | 
| 331 | 
            -
                   | 
| 332 | 
            -
                   | 
| 333 | 
            -
             | 
| 331 | 
            +
                  client_params = nil
         | 
| 332 | 
            +
                  i = 0
         | 
| 333 | 
            +
                  begin
         | 
| 334 | 
            +
                    response = Cnvrg::API.request("users/#{@owner}/projects/#{@slug}/client", 'GET')
         | 
| 335 | 
            +
                    unless Cnvrg::CLI.is_response_success(response, false)
         | 
| 336 | 
            +
                      raise StandardError.new("Can't find project credentials")
         | 
| 337 | 
            +
                    end
         | 
| 334 338 | 
             
                    client_params = response['client']
         | 
| 335 | 
            -
                   | 
| 336 | 
            -
             | 
| 339 | 
            +
                  rescue StandardError
         | 
| 340 | 
            +
                    i += 1
         | 
| 341 | 
            +
                    sleep(5 * i)
         | 
| 342 | 
            +
                    retry if i < 10
         | 
| 337 343 | 
             
                    client_params = get_storage_client_fallback
         | 
| 338 344 | 
             
                  end
         | 
| 339 | 
            -
             | 
| 345 | 
            +
                  raise StandardError.new("Can't find project credentials") unless client_params
         | 
| 340 346 | 
             
                  Cnvrg::Downloader::Client.factory(client_params)
         | 
| 341 347 | 
             
                end
         | 
| 342 348 |  | 
| @@ -381,10 +387,12 @@ module Cnvrg | |
| 381 387 | 
             
                def generate_output_dir(output_dir, local: false)
         | 
| 382 388 | 
             
                  Cnvrg::Logger.log_info("Generating output dir for #{output_dir}")
         | 
| 383 389 | 
             
                  upload_list = []
         | 
| 390 | 
            +
                  list = []
         | 
| 384 391 | 
             
                  list = Dir.glob("/cnvrg/#{output_dir}/**/*", File::FNM_DOTMATCH)
         | 
| 385 392 | 
             
                  if local
         | 
| 386 393 | 
             
                    list += Dir.glob("#{output_dir}/**/*", File::FNM_DOTMATCH)
         | 
| 387 394 | 
             
                  end
         | 
| 395 | 
            +
                  list.uniq!
         | 
| 388 396 | 
             
                  Parallel.map(list, in_threads: IDXParallelThreads) do |e|
         | 
| 389 397 | 
             
                    next if e.end_with? "/."
         | 
| 390 398 | 
             
                    if File.directory? e
         | 
| @@ -449,6 +457,10 @@ module Cnvrg | |
| 449 457 | 
             
                    if list_ignore_new.include? label
         | 
| 450 458 | 
             
                      next
         | 
| 451 459 | 
             
                    end
         | 
| 460 | 
            +
                    if File.symlink?(e)
         | 
| 461 | 
            +
                      Cnvrg::Logger.log_info("Skipping symlink #{e}")
         | 
| 462 | 
            +
                      next
         | 
| 463 | 
            +
                    end
         | 
| 452 464 | 
             
                    if File.directory? e
         | 
| 453 465 | 
             
                      dir_name = (label.ends_with? "/") ? label : (label + "/")
         | 
| 454 466 | 
             
                      tree_idx[dir_name] = nil
         | 
| @@ -649,7 +661,11 @@ module Cnvrg | |
| 649 661 |  | 
| 650 662 | 
             
                def fetch_webapp_slugs(webapp_slug, slugs: nil)
         | 
| 651 663 | 
             
                  response = Cnvrg::API_V2.request("#{self.owner}/projects/#{self.slug}/webapps/#{webapp_slug}" , 'GET')
         | 
| 652 | 
            -
             | 
| 664 | 
            +
             | 
| 665 | 
            +
                  if response.key?("experiments")
         | 
| 666 | 
            +
                    return response["experiments"]
         | 
| 667 | 
            +
                  end
         | 
| 668 | 
            +
                  return response["data"]["attributes"]["experiments"]
         | 
| 653 669 | 
             
                rescue
         | 
| 654 670 | 
             
                  slugs
         | 
| 655 671 | 
             
                end
         | 
| @@ -701,8 +717,11 @@ module Cnvrg | |
| 701 717 | 
             
                  res = JSON.parse(resp['result']) rescue nil
         | 
| 702 718 | 
             
                  return if res.blank?
         | 
| 703 719 | 
             
                  config = self.get_config
         | 
| 704 | 
            -
                  config[:is_git] = res['git']
         | 
| 705 720 | 
             
                  config[:project_name] = res['title']
         | 
| 721 | 
            +
                  config[:project_slug] = @slug
         | 
| 722 | 
            +
                  config[:owner] = @owner
         | 
| 723 | 
            +
                  config[:git] = res['git'] || false
         | 
| 724 | 
            +
                  config[:is_git] = res['git'] || false
         | 
| 706 725 | 
             
                  self.set_config(config)
         | 
| 707 726 | 
             
                end
         | 
| 708 727 |  | 
    
        data/lib/cnvrg/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,16 +1,16 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: cnvrg
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.0. | 
| 4 | 
            +
              version: 2.0.15
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yochay Ettun
         | 
| 8 8 | 
             
            - Leah Kolben
         | 
| 9 9 | 
             
            - Omer Shacham
         | 
| 10 | 
            -
            autorequire:
         | 
| 10 | 
            +
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2021- | 
| 13 | 
            +
            date: 2021-12-12 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: bundler
         | 
| @@ -473,7 +473,7 @@ files: | |
| 473 473 | 
             
            homepage: https://cnvrg.io
         | 
| 474 474 | 
             
            licenses: []
         | 
| 475 475 | 
             
            metadata: {}
         | 
| 476 | 
            -
            post_install_message:
         | 
| 476 | 
            +
            post_install_message: 
         | 
| 477 477 | 
             
            rdoc_options: []
         | 
| 478 478 | 
             
            require_paths:
         | 
| 479 479 | 
             
            - lib
         | 
| @@ -488,8 +488,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 488 488 | 
             
                - !ruby/object:Gem::Version
         | 
| 489 489 | 
             
                  version: '0'
         | 
| 490 490 | 
             
            requirements: []
         | 
| 491 | 
            -
            rubygems_version: 3. | 
| 492 | 
            -
            signing_key:
         | 
| 491 | 
            +
            rubygems_version: 3.2.32
         | 
| 492 | 
            +
            signing_key: 
         | 
| 493 493 | 
             
            specification_version: 4
         | 
| 494 494 | 
             
            summary: A CLI tool for interacting with cnvrg.io.
         | 
| 495 495 | 
             
            test_files: []
         |