cnvrg 0.0.1422 → 0.0.1424
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/cnvrg.gemspec +2 -0
- data/lib/cnvrg/cli.rb +73 -93
- data/lib/cnvrg/datafiles.rb +17 -14
- data/lib/cnvrg/dataset.rb +4 -6
- data/lib/cnvrg/experiment.rb +4 -4
- data/lib/cnvrg/files.rb +281 -244
- data/lib/cnvrg/project.rb +2 -4
- data/lib/cnvrg/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 175af4d0c0a0bb3bf60b921c412da5de3254927c
|
4
|
+
data.tar.gz: 97c6df1be57c4e17a5aeac38e1e0407eb9a1bdfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8d9944d378b24808d49cd366e8e4d58ef31ea834b186d12774c369f793ecaf8fdff1b10e197121be2ec274cbde93447f9bcef60c5a9586837a907e5f88e3655
|
7
|
+
data.tar.gz: 8c36084a0068b92e58b777e2c080c132aa5df4440d7337ece94185718d4e18f0ceef2de0ab6b2edb7808d4c6fef08a31a8ce088c702e19db2030152dbcef1a3e
|
data/cnvrg.gemspec
CHANGED
@@ -39,6 +39,8 @@ Gem::Specification.new do |spec|
|
|
39
39
|
spec.add_runtime_dependency 'docker-api', '~> 1.33'
|
40
40
|
spec.add_runtime_dependency 'rubyzip', '~> 1.2'
|
41
41
|
spec.add_runtime_dependency 'activesupport', '~> 5.0'
|
42
|
+
spec.add_runtime_dependency 'ruby-progressbar'
|
43
|
+
|
42
44
|
|
43
45
|
|
44
46
|
end
|
data/lib/cnvrg/cli.rb
CHANGED
@@ -33,6 +33,7 @@ require 'zip'
|
|
33
33
|
require 'active_support/all'
|
34
34
|
require 'thor'
|
35
35
|
require 'pathname'
|
36
|
+
require 'enumerator'
|
36
37
|
|
37
38
|
|
38
39
|
class Thor
|
@@ -94,7 +95,7 @@ class Thor
|
|
94
95
|
if !args.empty? and local_options.is_a? Array and !local_options.empty?
|
95
96
|
args = args + local_options
|
96
97
|
else
|
97
|
-
|
98
|
+
args = args.flatten()
|
98
99
|
end
|
99
100
|
|
100
101
|
end
|
@@ -210,7 +211,7 @@ module Cnvrg
|
|
210
211
|
config = {owner: config.to_h[:owner], username: config.to_h[:username], version_last_check: config.to_h[:version_last_check], api: url}
|
211
212
|
end
|
212
213
|
res = Cnvrg::API.request("/users/#{owner}/custom_api", 'POST', {custom_api: url})
|
213
|
-
if Cnvrg::CLI.is_response_success(res)
|
214
|
+
if Cnvrg::CLI.is_response_success(res,false)
|
214
215
|
|
215
216
|
checks = Helpers.checkmark
|
216
217
|
|
@@ -1195,8 +1196,12 @@ module Cnvrg
|
|
1195
1196
|
exit(1)
|
1196
1197
|
end
|
1197
1198
|
say "Uploading data", Thor::Shell::Color::BLUE
|
1198
|
-
|
1199
|
-
|
1199
|
+
eta = Time.now + 600
|
1200
|
+
start = Time.now
|
1201
|
+
res = false
|
1202
|
+
with_progress_bar do
|
1203
|
+
res = @files.upload_tar_file(tar_path, tar_path, commit_sha1)
|
1204
|
+
end
|
1200
1205
|
|
1201
1206
|
if res
|
1202
1207
|
cur_idx = @dataset.get_idx.to_h
|
@@ -1447,7 +1452,7 @@ module Cnvrg
|
|
1447
1452
|
else
|
1448
1453
|
# blob
|
1449
1454
|
|
1450
|
-
if @files.download_file_s3(f[0], relative_path, project_home,commit_sha1=current_commit)
|
1455
|
+
if @files.download_file_s3(f[0], relative_path, project_home, commit_sha1=current_commit)
|
1451
1456
|
successful_changes << relative_path
|
1452
1457
|
end
|
1453
1458
|
end
|
@@ -1846,7 +1851,7 @@ module Cnvrg
|
|
1846
1851
|
|
1847
1852
|
result["conflicts"].each do |f|
|
1848
1853
|
relative_path = f.gsub(/^#{@project.local_path}/, "")
|
1849
|
-
if @files.download_file_s3(f, relative_path, project_home,commit_sha1=nil, conflict=true)
|
1854
|
+
if @files.download_file_s3(f, relative_path, project_home, commit_sha1=nil, conflict=true)
|
1850
1855
|
successful_changes << relative_path
|
1851
1856
|
end
|
1852
1857
|
|
@@ -1971,7 +1976,7 @@ module Cnvrg
|
|
1971
1976
|
end
|
1972
1977
|
else
|
1973
1978
|
# blob
|
1974
|
-
if @files.download_file_s3(f[0], relative_path, project_home,commit_sha1=commit_sha1)
|
1979
|
+
if @files.download_file_s3(f[0], relative_path, project_home, commit_sha1=commit_sha1)
|
1975
1980
|
current_tree.delete(relative_path)
|
1976
1981
|
|
1977
1982
|
successful_changes << relative_path
|
@@ -2063,26 +2068,26 @@ module Cnvrg
|
|
2063
2068
|
|
2064
2069
|
|
2065
2070
|
desc 'run cmd', 'Runs an experiment'
|
2066
|
-
method_option :local, :type => :boolean, :aliases => ["-l","--local"], :default => false
|
2071
|
+
method_option :local, :type => :boolean, :aliases => ["-l", "--local"], :default => false
|
2067
2072
|
method_option :small, :type => :boolean, :aliases => ["-sm", "--small"], :default => false
|
2068
2073
|
method_option :medium, :type => :boolean, :aliases => ["-md", "--medium"], :default => false
|
2069
2074
|
method_option :large, :type => :boolean, :aliases => ["-lg", "--large"], :default => false
|
2070
2075
|
method_option :gpu, :type => :boolean, :aliases => ["--gpu"], :default => false
|
2071
2076
|
method_option :gpuxl, :type => :boolean, :aliases => ["--gpuxl"], :default => false
|
2072
2077
|
method_option :gpuxxl, :type => :boolean, :aliases => ["--gpuxxl"], :default => false
|
2073
|
-
method_option :sync_before, :type => :boolean, :aliases => ["-sb","--sync_before"], :default => true
|
2074
|
-
method_option :sync_after, :type => :boolean, :aliases => ["-sa","--sync_after"], :default => true
|
2078
|
+
method_option :sync_before, :type => :boolean, :aliases => ["-sb", "--sync_before"], :default => true
|
2079
|
+
method_option :sync_after, :type => :boolean, :aliases => ["-sa", "--sync_after"], :default => true
|
2075
2080
|
method_option :title, :type => :string, :aliases => ["-t", "--title"], :default => ""
|
2076
2081
|
method_option :log, :type => :boolean, :aliases => ["--log"], :default => false
|
2077
|
-
method_option :email_notification, :type => :boolean, :aliases => ["-en","--email_notification"], :default => false
|
2078
|
-
method_option :upload_output, :type => :string, :aliases => ["-uo","--upload_output"], :default => ""
|
2079
|
-
method_option :commit, :type => :string, :aliases => ["-c","--commit"], :default => ""
|
2080
|
-
method_option :schedule, :type => :string, :aliases => ["-s","--schedule"], :default => ""
|
2081
|
-
method_option :image, :type => :string, :aliases => ["-i","--image"], :default => ""
|
2082
|
+
method_option :email_notification, :type => :boolean, :aliases => ["-en", "--email_notification"], :default => false
|
2083
|
+
method_option :upload_output, :type => :string, :aliases => ["-uo", "--upload_output"], :default => ""
|
2084
|
+
method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ""
|
2085
|
+
method_option :schedule, :type => :string, :aliases => ["-s", "--schedule"], :default => ""
|
2086
|
+
method_option :image, :type => :string, :aliases => ["-i", "--image"], :default => ""
|
2082
2087
|
method_option :grid, :type => :string, :aliases => ["-g", "--grid"], :default => ""
|
2083
2088
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
2084
2089
|
method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
|
2085
|
-
method_option :ignore, :type => :string, :aliases => ["-i","--ignore"], :desc => "ignore following files", :default => ""
|
2090
|
+
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2086
2091
|
|
2087
2092
|
def run(*cmd)
|
2088
2093
|
sync_before = options["sync_before"]
|
@@ -2119,7 +2124,7 @@ module Cnvrg
|
|
2119
2124
|
end
|
2120
2125
|
exec_options = real_options.map { |x| "--#{x[0]}=#{x[1]}" }.flatten.join(" ")
|
2121
2126
|
cmd_to_exec = "#{exec_options} #{cmd.join(" ")}"
|
2122
|
-
invoke :exec_remote, [cmd]
|
2127
|
+
invoke :exec_remote, [cmd], :sync_before => sync_before, :sync_after => sync_after, :title => title, :machine_type => instance_type,
|
2123
2128
|
:schedule => schedule, :log => log, :email_notification => email_notification, :upload_output => upload_output, :commit => commit,
|
2124
2129
|
:image => image, :grid => grid, :data => data, :data_commit => data_commit, :ignore => ignore
|
2125
2130
|
return
|
@@ -2141,19 +2146,19 @@ module Cnvrg
|
|
2141
2146
|
desc '', '', :hide => true
|
2142
2147
|
method_option :sync_before, :type => :boolean, :aliases => ["-sb,--sync_before"], :default => true
|
2143
2148
|
method_option :sync_after, :type => :boolean, :aliases => ["-sa,--sync_after"], :default => true
|
2144
|
-
method_option :title, :type => :string, :aliases => ["-t","--title"], :default => ""
|
2145
|
-
method_option :log, :type => :boolean, :aliases => [
|
2149
|
+
method_option :title, :type => :string, :aliases => ["-t", "--title"], :default => ""
|
2150
|
+
method_option :log, :type => :boolean, :aliases => ["--log"], :default => false
|
2146
2151
|
method_option :email_notification, :type => :boolean, :aliases => ["-en,--email_notification"], :default => false
|
2147
2152
|
method_option :upload_output, :type => :string, :aliases => ["-uo,--upload_output"], :default => ""
|
2148
|
-
method_option :commit, :type => :string, :aliases => ["-c","--commit"], :default => ""
|
2149
|
-
method_option :image, :type => :string, :aliases => ["-i","--image"], :default => ""
|
2153
|
+
method_option :commit, :type => :string, :aliases => ["-c", "--commit"], :default => ""
|
2154
|
+
method_option :image, :type => :string, :aliases => ["-i", "--image"], :default => ""
|
2150
2155
|
method_option :indocker, :type => :boolean, :aliases => ["--indocker"], :default => false
|
2151
2156
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
2152
2157
|
method_option :data_commit, :type => :string, :aliases => ["-dc", "--data_commit"], :default => ""
|
2153
|
-
method_option :ignore, :type => :string, :aliases => ["-i","--ignore"], :desc => "ignore following files", :default => ""
|
2154
|
-
|
2158
|
+
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2155
2159
|
|
2156
2160
|
def exec(*cmd)
|
2161
|
+
|
2157
2162
|
log = []
|
2158
2163
|
cpu_average =0
|
2159
2164
|
memory_average = 0
|
@@ -2564,20 +2569,20 @@ module Cnvrg
|
|
2564
2569
|
end
|
2565
2570
|
|
2566
2571
|
desc '', '', :hide => true
|
2567
|
-
method_option :sync_before, :type => :boolean, :aliases => ["-sb","--sync_before"], :default => true
|
2568
|
-
method_option :sync_after, :type => :boolean, :aliases => ["-sa","--sync_after"], :default => true
|
2569
|
-
method_option :title, :type => :string, :aliases => ["-t","--title"], :default => ""
|
2570
|
-
method_option :log, :type => :boolean, :aliases => [
|
2571
|
-
method_option :email_notification, :type => :boolean, :aliases => ["-en","--email_notification"], :default => false
|
2572
|
-
method_option :upload_output, :type => :string, :aliases => ["-uo","--upload_output"], :default => ""
|
2572
|
+
method_option :sync_before, :type => :boolean, :aliases => ["-sb", "--sync_before"], :default => true
|
2573
|
+
method_option :sync_after, :type => :boolean, :aliases => ["-sa", "--sync_after"], :default => true
|
2574
|
+
method_option :title, :type => :string, :aliases => ["-t", "--title"], :default => ""
|
2575
|
+
method_option :log, :type => :boolean, :aliases => ["--log"], :default => false
|
2576
|
+
method_option :email_notification, :type => :boolean, :aliases => ["-en", "--email_notification"], :default => false
|
2577
|
+
method_option :upload_output, :type => :string, :aliases => ["-uo", "--upload_output"], :default => ""
|
2573
2578
|
method_option :machine_type, :type => :string, :default => ""
|
2574
|
-
method_option :schedule, :type => :string, :aliases => ["-s","--schedule"], :default => ""
|
2579
|
+
method_option :schedule, :type => :string, :aliases => ["-s", "--schedule"], :default => ""
|
2575
2580
|
method_option :commit, :type => :string, :aliases => ["-c, --commit"], :default => nil
|
2576
|
-
method_option :image, :type => :string, :aliases => ["-i","--image"], :default => ""
|
2581
|
+
method_option :image, :type => :string, :aliases => ["-i", "--image"], :default => ""
|
2577
2582
|
method_option :grid, :type => :string, :aliases => ["-g", "--grid"], :default => ""
|
2578
2583
|
method_option :data, :type => :string, :aliases => ["-d", "--data"], :default => ""
|
2579
2584
|
method_option :data_commit, :type => :string, :aliases => ["--data_commit"], :default => ""
|
2580
|
-
method_option :ignore, :type => :string, :aliases => ["-i","--ignore"], :desc => "ignore following files", :default => ""
|
2585
|
+
method_option :ignore, :type => :string, :aliases => ["-i", "--ignore"], :desc => "ignore following files", :default => ""
|
2581
2586
|
|
2582
2587
|
def exec_remote(*cmd)
|
2583
2588
|
verify_logged_in(true)
|
@@ -2589,6 +2594,7 @@ module Cnvrg
|
|
2589
2594
|
grid = options["grid"] || nil
|
2590
2595
|
data = options["data"] || nil
|
2591
2596
|
data_commit = options["data_commit"] || nil
|
2597
|
+
sync_before = options["sync_before"]
|
2592
2598
|
|
2593
2599
|
instance_type = options["machine_type"] || nil
|
2594
2600
|
schedule = options["schedule"] || ""
|
@@ -2652,9 +2658,23 @@ module Cnvrg
|
|
2652
2658
|
image_slug = image.image_slug
|
2653
2659
|
end
|
2654
2660
|
|
2661
|
+
invoke :sync, [false], [] if sync_before
|
2655
2662
|
|
2656
|
-
invoke :sync, [false], []
|
2657
2663
|
|
2664
|
+
if command.include? "'"
|
2665
|
+
oc = command.to_enum(:scan, /'/).map { Regexp.last_match }
|
2666
|
+
pairs = oc.enum_for(:each_slice, 2).to_a
|
2667
|
+
pairs.each_with_index do |p,i|
|
2668
|
+
add=0
|
2669
|
+
if i!=0
|
2670
|
+
add=2*i
|
2671
|
+
end
|
2672
|
+
total_loc = command[p[0].offset(0)[0]+add..p[1].offset(0)[0]+add]
|
2673
|
+
command[p[0].offset(0)[0]+add..p[1].offset(0)[0]+add] = "\"#{total_loc}\""
|
2674
|
+
end
|
2675
|
+
|
2676
|
+
|
2677
|
+
end
|
2658
2678
|
say "Running remote experiment", Thor::Shell::Color::BLUE
|
2659
2679
|
exp = Experiment.new(project.owner, project.slug)
|
2660
2680
|
res = exp.exec_remote(command, commit_to_run, instance_type, image_slug, schedule, local_timestamp, grid, path_to_cmd, data, data_commit)
|
@@ -4573,6 +4593,9 @@ module Cnvrg
|
|
4573
4593
|
|
4574
4594
|
config = YAML.load_file(File.expand_path('~')+"/.cnvrg/config.yml")
|
4575
4595
|
version_date = config.to_h[:version_last_check]
|
4596
|
+
if version_date.nil?
|
4597
|
+
version_date = get_start_day()
|
4598
|
+
end
|
4576
4599
|
next_day = get_start_day+ 86399
|
4577
4600
|
if not (version_date..next_day).cover?(Time.now)
|
4578
4601
|
if should_update_version()
|
@@ -4848,73 +4871,30 @@ module Cnvrg
|
|
4848
4871
|
`tar -xvf #{file_path} -C #{dir_path} > /dev/null 2>&1`
|
4849
4872
|
return $?.success?
|
4850
4873
|
end
|
4851
|
-
end
|
4852
|
-
end
|
4853
|
-
class Data < SubCommandBase
|
4854
|
-
desc "data init", "init data folder"
|
4855
|
-
method_option :public, :type => :boolean, :aliases => ["-p", "--public"], :default => false
|
4856
|
-
|
4857
|
-
def init
|
4858
|
-
cli = Cnvrg::CLI.new()
|
4859
|
-
public = options["public"]
|
4860
|
-
cli.init_data(public)
|
4861
|
-
end
|
4862
|
-
|
4863
|
-
desc "data upload", "upload data folder"
|
4864
|
-
method_option :ignore, :type => :array, :aliases => ["-i", "--i"], :desc => "ignore following files"
|
4865
|
-
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
4866
|
-
method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
|
4867
|
-
|
4868
|
-
def upload
|
4869
|
-
cli = Cnvrg::CLI.new()
|
4870
|
-
ignore = options["ignore"]
|
4871
|
-
verbose = options["verbose"]
|
4872
|
-
sync = options["sync"]
|
4873
|
-
|
4874
|
-
cli.upload_data_tar(ignore, verbose, sync)
|
4875
|
-
end
|
4876
|
-
|
4877
|
-
desc 'data download', 'pull data'
|
4878
|
-
method_option :verbose, :type => :boolean, :aliases => ["-v"], :default => false
|
4879
|
-
method_option :sync, :type => :boolean, :aliases => ["-s"], :default => false
|
4880
|
-
|
4881
|
-
def download()
|
4882
|
-
cli = Cnvrg::CLI.new()
|
4883
|
-
verbose = options["verbose"]
|
4884
|
-
sync = options["sync"]
|
4885
|
-
|
4886
|
-
cli.download_data(verbose, sync, Dir.pwd)
|
4887
|
-
|
4888
|
-
end
|
4889
4874
|
|
4890
|
-
|
4875
|
+
def with_progress_bar
|
4876
|
+
not_done = true
|
4877
|
+
upload_progress_bar = ProgressBar.create(:title => "Upload progress",
|
4878
|
+
:format => '%a <%B> %p%% %t',
|
4879
|
+
:starting_at => 0,
|
4880
|
+
:total => 600)
|
4881
|
+
pb = Thread.new do
|
4882
|
+
while not_done do
|
4883
|
+
upload_progress_bar.increment
|
4884
|
+
sleep(1)
|
4891
4885
|
|
4892
|
-
|
4893
|
-
|
4894
|
-
cli.clone_data(dataset_url)
|
4895
|
-
|
4896
|
-
end
|
4897
|
-
|
4898
|
-
desc 'data list', 'list of datasets'
|
4899
|
-
|
4900
|
-
def list()
|
4901
|
-
cli = Cnvrg::CLI.new()
|
4902
|
-
|
4903
|
-
cli.list_dataset()
|
4886
|
+
end
|
4887
|
+
end
|
4904
4888
|
|
4889
|
+
yield.tap do # After yielding to the block, save the return value
|
4890
|
+
not_done = false # Tell the thread to exit, cleaning up after itself…
|
4891
|
+
pb.join # …and wait for it to do so.
|
4892
|
+
end
|
4893
|
+
end
|
4905
4894
|
end
|
4906
4895
|
|
4907
|
-
desc 'data commits', 'pull data'
|
4908
|
-
|
4909
|
-
def commits()
|
4910
|
-
cli = Cnvrg::CLI.new()
|
4911
|
-
cli.list_dataset_commits()
|
4912
|
-
|
4913
|
-
end
|
4914
4896
|
|
4915
4897
|
end
|
4916
|
-
|
4917
4898
|
end
|
4918
4899
|
|
4919
4900
|
|
4920
|
-
|
data/lib/cnvrg/datafiles.rb
CHANGED
@@ -241,20 +241,23 @@ module Cnvrg
|
|
241
241
|
response = http.request request
|
242
242
|
body = response.read_body
|
243
243
|
end
|
244
|
+
is_python = false
|
245
|
+
s4cmd_suc = false
|
246
|
+
s4cmd_install_suc = false
|
244
247
|
|
245
248
|
URLcrypt::key = [body].pack('H*')
|
246
249
|
|
247
|
-
python_version=`python --version > /dev/null 2>&1` ; is_python=$?.success?
|
248
|
-
if is_python
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
end
|
256
|
-
|
257
|
-
if
|
250
|
+
# python_version=`python --version > /dev/null 2>&1` ; is_python=$?.success?
|
251
|
+
# if is_python
|
252
|
+
#
|
253
|
+
# s4cmd=`pip freeze 2>/dev/null |grep -e s4cmd -e boto3 > /dev/null 2>&1` ; s4cmd_suc=$?.success?
|
254
|
+
# if !s4cmd_suc
|
255
|
+
# `pip install s4cmd > /dev/null 2>&1` ; s4cmd_install_suc=$?.success?
|
256
|
+
# end
|
257
|
+
#
|
258
|
+
# end
|
259
|
+
|
260
|
+
if !s4cmd_suc and !s4cmd_install_suc
|
258
261
|
s3 = Aws::S3::Resource.new(
|
259
262
|
:access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
|
260
263
|
:secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
|
@@ -289,10 +292,10 @@ module Cnvrg
|
|
289
292
|
tmp.flush
|
290
293
|
tmp.close
|
291
294
|
|
292
|
-
|
295
|
+
is_success = false
|
293
296
|
count = 0
|
294
297
|
while !is_success and count <3
|
295
|
-
resp = `python #{tmp.path} --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1`
|
298
|
+
resp = `python #{tmp.path} --num-threads=8 --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1`
|
296
299
|
is_success =$?.success?
|
297
300
|
count +=1
|
298
301
|
|
@@ -479,7 +482,7 @@ module Cnvrg
|
|
479
482
|
|
480
483
|
response = Cnvrg::API.request("#{base_resource}/commit/start", 'POST', {dataset_slug: @dataset_slug,new_branch:false,
|
481
484
|
username: @owner})
|
482
|
-
Cnvrg::CLI.is_response_success(response)
|
485
|
+
Cnvrg::CLI.is_response_success(response,false)
|
483
486
|
return response
|
484
487
|
end
|
485
488
|
|
data/lib/cnvrg/dataset.rb
CHANGED
@@ -168,8 +168,6 @@ module Cnvrg
|
|
168
168
|
|
169
169
|
File.open(".cnvrgignore", "w+") { |f| f.write cnvrgignore } unless File.exist? ".cnvrgignore"
|
170
170
|
rescue => e
|
171
|
-
puts e
|
172
|
-
puts e.backtrace
|
173
171
|
return false
|
174
172
|
end
|
175
173
|
return true
|
@@ -230,7 +228,7 @@ module Cnvrg
|
|
230
228
|
def downlowd_updated_data(current_commit)
|
231
229
|
|
232
230
|
response = Cnvrg::API.request("users/#{self.owner}/datasets/#{self.slug}/downlowd_updated_data", 'POST', {current_commit: current_commit})
|
233
|
-
CLI.is_response_success(response)
|
231
|
+
CLI.is_response_success(response,false)
|
234
232
|
return response
|
235
233
|
end
|
236
234
|
def compare_idx(new_branch, commit=last_local_commit,local_idx=nil)
|
@@ -239,7 +237,7 @@ module Cnvrg
|
|
239
237
|
end
|
240
238
|
|
241
239
|
response = Cnvrg::API.request("users/#{self.owner}/datasets/#{self.slug}/status", 'POST', {idx: local_idx, new_branch: new_branch, current_commit: commit})
|
242
|
-
CLI.is_response_success(response)
|
240
|
+
CLI.is_response_success(response,false)
|
243
241
|
return response
|
244
242
|
end
|
245
243
|
|
@@ -247,7 +245,7 @@ module Cnvrg
|
|
247
245
|
|
248
246
|
def compare_commits(commit)
|
249
247
|
response = Cnvrg::API.request("users/#{self.owner}/datasets/#{self.slug}/compare_commits", 'POST', {compare_commit: commit,current_commit:last_local_commit})
|
250
|
-
CLI.is_response_success(response)
|
248
|
+
CLI.is_response_success(response,false)
|
251
249
|
return response
|
252
250
|
end
|
253
251
|
|
@@ -256,7 +254,7 @@ module Cnvrg
|
|
256
254
|
commit = last_local_commit
|
257
255
|
end
|
258
256
|
response = Cnvrg::API.request("users/#{self.owner}/projects/#{self.slug}/commit/compare", 'POST', {current_commit: commit})
|
259
|
-
CLI.is_response_success(response)
|
257
|
+
CLI.is_response_success(response,false)
|
260
258
|
update_is_new_branch(response["result"]["new_branch"])
|
261
259
|
return response["result"]["new_branch"]
|
262
260
|
end
|
data/lib/cnvrg/experiment.rb
CHANGED
@@ -13,7 +13,7 @@ module Cnvrg
|
|
13
13
|
res = Cnvrg::API.request(@base_resource + "experiment/start", 'POST',
|
14
14
|
{input: input, platform: platform, machine_name: machine_name, start_commit: start_commit,
|
15
15
|
title: name, email_notification: email_notification, machine_activity: machine_activity,script_path:script_path})
|
16
|
-
Cnvrg::CLI.is_response_success(res)
|
16
|
+
Cnvrg::CLI.is_response_success(res,false)
|
17
17
|
|
18
18
|
@slug = res.to_h["result"].to_h["slug"]
|
19
19
|
|
@@ -37,7 +37,7 @@ module Cnvrg
|
|
37
37
|
def end_notebook_session(notebook_slug, end_commit)
|
38
38
|
res = Cnvrg::API.request(@base_resource + "notebook/end_session", 'POST',
|
39
39
|
{notebook_slug: notebook_slug, end_commit: end_commit})
|
40
|
-
Cnvrg::CLI.is_response_success(res)
|
40
|
+
Cnvrg::CLI.is_response_success(res,false)
|
41
41
|
|
42
42
|
return res
|
43
43
|
|
@@ -94,7 +94,7 @@ module Cnvrg
|
|
94
94
|
response = Cnvrg::API.request(@base_resource + "experiment/upload_temp_log", 'POST', {output: temp_log,
|
95
95
|
exp_slug: @slug, cpu_average: cpu_average,
|
96
96
|
memory_average: memory_average})
|
97
|
-
Cnvrg::CLI.is_response_success(response)
|
97
|
+
Cnvrg::CLI.is_response_success(response,false)
|
98
98
|
end
|
99
99
|
|
100
100
|
def end(output, exit_status, end_commit, cpu_average, memory_average)
|
@@ -102,7 +102,7 @@ module Cnvrg
|
|
102
102
|
response = Cnvrg::API.request(@base_resource + "experiment/end", 'POST', {output: output, exp_slug: @slug,
|
103
103
|
exit_status: exit_status, end_commit: end_commit,
|
104
104
|
cpu_average: cpu_average, memory_average: memory_average})
|
105
|
-
Cnvrg::CLI.is_response_success(response)
|
105
|
+
Cnvrg::CLI.is_response_success(response,false)
|
106
106
|
|
107
107
|
begin
|
108
108
|
FileUtils.rm_rf(["/home/ds/.cnvrg/tmp/exec.log"])
|
data/lib/cnvrg/files.rb
CHANGED
@@ -26,7 +26,7 @@ module Cnvrg
|
|
26
26
|
|
27
27
|
upload_resp = Cnvrg::API.request(@base_resource + "upload_file", 'POST_FILE', {absolute_path: absolute_path, relative_path: relative_path,
|
28
28
|
commit_sha1: commit_sha1, file_name: file_name,
|
29
|
-
file_size: file_size, file_content_type: content_type, sha1:sha1})
|
29
|
+
file_size: file_size, file_content_type: content_type, sha1: sha1})
|
30
30
|
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
31
31
|
path = upload_resp["result"]["path"]
|
32
32
|
if file_size.to_f>= Cnvrg::Files::LARGE_FILE.to_f
|
@@ -36,24 +36,25 @@ module Cnvrg
|
|
36
36
|
end
|
37
37
|
return s3_res
|
38
38
|
# if s3_res
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
# update_s3_resp = Cnvrg::API.request(@base_resource + "update_s3", 'POST', {path: path, commit_id: upload_resp["result"]["commit_id"],
|
40
|
+
# blob_id: upload_resp["result"]["id"]})
|
41
|
+
# is_suc = Cnvrg::CLI.is_response_success(update_s3_resp, false)
|
42
|
+
#
|
43
|
+
# return is_suc
|
44
44
|
end
|
45
45
|
return false
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
|
+
def upload_log_file(absolute_path, relative_path, log_date)
|
48
49
|
file_name = File.basename relative_path
|
49
50
|
file_size = File.size(absolute_path).to_f
|
50
51
|
content_type = "text/x-log"
|
51
52
|
upload_resp = Cnvrg::API.request("/users/#{@owner}/" + "upload_cli_log", 'POST_FILE', {absolute_path: absolute_path, relative_path: relative_path,
|
52
|
-
|
53
|
-
|
53
|
+
file_name: file_name, log_date: log_date,
|
54
|
+
file_size: file_size, file_content_type: content_type})
|
54
55
|
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
55
|
-
|
56
|
-
|
56
|
+
path = upload_resp["result"]["path"]
|
57
|
+
s3_res = upload_small_files_s3(path, absolute_path, "text/plain")
|
57
58
|
end
|
58
59
|
if s3_res
|
59
60
|
return true
|
@@ -61,18 +62,19 @@ module Cnvrg
|
|
61
62
|
return false
|
62
63
|
|
63
64
|
end
|
64
|
-
|
65
|
+
|
66
|
+
def upload_exec_file(absolute_path, image_name, commit_id)
|
65
67
|
file_name = File.basename absolute_path
|
66
68
|
file_size = File.size(absolute_path).to_f
|
67
69
|
content_type = "application/zip"
|
68
70
|
begin
|
69
71
|
upload_resp = Cnvrg::API.request("users/#{@owner}/images/" + "upload_config", 'POST_FILE', {relative_path: absolute_path,
|
70
72
|
file_name: file_name,
|
71
|
-
image_name:image_name,
|
73
|
+
image_name: image_name,
|
72
74
|
file_size: file_size,
|
73
75
|
file_content_type: content_type,
|
74
76
|
project_slug: @project_slug,
|
75
|
-
commit_id:commit_id})
|
77
|
+
commit_id: commit_id})
|
76
78
|
# puts upload_resp
|
77
79
|
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
78
80
|
if upload_resp["result"]["image"] == -1
|
@@ -82,21 +84,20 @@ module Cnvrg
|
|
82
84
|
s3_res = upload_small_files_s3(path, absolute_path, content_type)
|
83
85
|
|
84
86
|
end
|
85
|
-
|
86
|
-
|
87
|
+
if s3_res
|
88
|
+
return upload_resp["result"]["id"]
|
89
|
+
end
|
90
|
+
return false
|
91
|
+
rescue SignalException
|
92
|
+
|
93
|
+
say "\nAborting"
|
94
|
+
exit(1)
|
87
95
|
end
|
88
|
-
return false
|
89
|
-
rescue SignalException
|
90
96
|
|
91
|
-
say "\nAborting"
|
92
|
-
exit(1)
|
93
97
|
end
|
94
98
|
|
95
|
-
end
|
96
99
|
|
97
|
-
|
98
|
-
|
99
|
-
def upload_image(absolute_path, image_name, owner, is_public, is_base,dpkg,libraries,bash,message,commit_id)
|
100
|
+
def upload_image(absolute_path, image_name, owner, is_public, is_base, dpkg, libraries, bash, message, commit_id)
|
100
101
|
file_name = File.basename absolute_path
|
101
102
|
file_size = File.size(absolute_path).to_f
|
102
103
|
if is_base
|
@@ -106,41 +107,42 @@ module Cnvrg
|
|
106
107
|
content_type = "application/gzip"
|
107
108
|
end
|
108
109
|
begin
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
110
|
+
upload_resp = Cnvrg::API.request("users/#{owner}/images/" + "upload_cnvrg", 'POST_FILE', {relative_path: absolute_path,
|
111
|
+
file_name: file_name,
|
112
|
+
image_name: image_name,
|
113
|
+
file_size: file_size,
|
114
|
+
file_content_type: content_type,
|
115
|
+
is_public: is_public,
|
116
|
+
project_slug: @project_slug,
|
117
|
+
commit_id: commit_id,
|
118
|
+
dpkg: dpkg,
|
119
|
+
py2: libraries,
|
120
|
+
py3: libraries,
|
121
|
+
|
122
|
+
bash_history: bash,
|
123
|
+
commit_message: message,
|
124
|
+
is_base: is_base})
|
125
|
+
# puts upload_resp
|
126
|
+
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
127
|
+
path = upload_resp["result"]["path"]
|
128
|
+
s3_res = upload_small_files_s3(path, absolute_path, content_type)
|
129
|
+
if s3_res
|
130
|
+
commit_resp = Cnvrg::API.request("users/#{owner}/images/#{upload_resp["result"]["id"]}/" + "commit", 'GET')
|
131
|
+
if Cnvrg::CLI.is_response_success(commit_resp, false)
|
132
|
+
return commit_resp["result"]["image"]
|
133
|
+
else
|
134
|
+
return false
|
135
|
+
end
|
135
136
|
|
137
|
+
end
|
136
138
|
end
|
137
|
-
|
138
|
-
|
139
|
-
rescue =>e
|
139
|
+
return false
|
140
|
+
rescue => e
|
140
141
|
end
|
141
142
|
|
142
143
|
end
|
143
|
-
|
144
|
+
|
145
|
+
def upload_cnvrg_image(absolute_path, image_name, owner, is_public, is_base, dpkg, libraries, bash, message)
|
144
146
|
file_name = File.basename absolute_path
|
145
147
|
file_size = File.size(absolute_path).to_f
|
146
148
|
if is_base
|
@@ -151,16 +153,16 @@ module Cnvrg
|
|
151
153
|
end
|
152
154
|
begin
|
153
155
|
upload_resp = Cnvrg::API.request("users/#{owner}/images/" + "upload_cnvrg", 'POST_FILE', {relative_path: absolute_path,
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
156
|
+
file_name: file_name,
|
157
|
+
image_name: image_name,
|
158
|
+
file_size: file_size,
|
159
|
+
file_content_type: content_type,
|
160
|
+
is_public: is_public,
|
161
|
+
dpkg: dpkg,
|
162
|
+
libraries: libraries,
|
163
|
+
bash_history: bash,
|
164
|
+
commit_message: message,
|
165
|
+
is_base: is_base})
|
164
166
|
# puts upload_resp
|
165
167
|
if Cnvrg::CLI.is_response_success(upload_resp, false)
|
166
168
|
path = upload_resp["result"]["path"]
|
@@ -176,7 +178,7 @@ module Cnvrg
|
|
176
178
|
end
|
177
179
|
end
|
178
180
|
return false
|
179
|
-
rescue =>e
|
181
|
+
rescue => e
|
180
182
|
end
|
181
183
|
|
182
184
|
end
|
@@ -208,225 +210,260 @@ module Cnvrg
|
|
208
210
|
|
209
211
|
def upload_large_files_s3(upload_resp, file_path)
|
210
212
|
begin
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
if
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
213
|
+
# speed_uri = URI.parse("https://s3-us-west-2.amazonaws.com/cnvrgw2-dev/speedtest-cli")
|
214
|
+
# speed_http_object = Net::HTTP.new(speed_uri.host, speed_uri.port)
|
215
|
+
# speed_http_object.use_ssl = true if speed_uri.scheme == 'https'
|
216
|
+
# speed_request = Net::HTTP::Get.new("https://s3-us-west-2.amazonaws.com/cnvrgw2-dev/speedtest-cli")
|
217
|
+
#
|
218
|
+
# speed_body = ""
|
219
|
+
# speed_http_object.start do |http|
|
220
|
+
# response = http.request speed_request
|
221
|
+
# speed_body = response.read_body
|
222
|
+
# end
|
223
|
+
# speed_tmp = Tempfile.new('speed')
|
224
|
+
# speed_tmp << speed_body
|
225
|
+
# speed_tmp.flush
|
226
|
+
# speed_tmp.close
|
227
|
+
# count = 0
|
228
|
+
# sum = 0
|
229
|
+
# speed_res = `python #{speed_tmp.path} --json`
|
230
|
+
# if !speed_res.nil? and !speed_res.empty?
|
231
|
+
# upload = JSON.parse(speed_res)["upload"]
|
232
|
+
# if !upload.nil?
|
233
|
+
# up_spped = (upload/1000000).round(2)
|
234
|
+
# end
|
235
|
+
#
|
236
|
+
#
|
237
|
+
# file_size = File.size(file_path)/1048576
|
238
|
+
# est_up = ((file_size*8)/up_spped)/60
|
239
|
+
# puts est_up
|
240
|
+
# end
|
241
|
+
|
242
|
+
|
243
|
+
sts_path = upload_resp["result"]["path_sts"]
|
244
|
+
s4cmd_path = upload_resp["result"]["path_s4cmd"]
|
245
|
+
|
246
|
+
uri = URI.parse(sts_path)
|
247
|
+
http_object = Net::HTTP.new(uri.host, uri.port)
|
248
|
+
http_object.use_ssl = true if uri.scheme == 'https'
|
249
|
+
request = Net::HTTP::Get.new(sts_path)
|
250
|
+
|
251
|
+
body = ""
|
252
|
+
http_object.start do |http|
|
253
|
+
response = http.request request
|
254
|
+
body = response.read_body
|
233
255
|
end
|
234
256
|
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
+
URLcrypt::key = [body].pack('H*')
|
258
|
+
is_python = false
|
259
|
+
s4cmd_suc = false
|
260
|
+
s4cmd_install_suc = false
|
261
|
+
# python_version=`python --version > /dev/null 2>&1`; is_python=$?.success?
|
262
|
+
# if is_python
|
263
|
+
#
|
264
|
+
# s4cmd=`pip freeze 2>/dev/null |grep -e s4cmd -e boto3 > /dev/null 2>&1`; s4cmd_suc=$?.success?
|
265
|
+
# if !s4cmd_suc
|
266
|
+
# `pip install s4cmd > /dev/null 2>&1`; s4cmd_install_suc=$?.success?
|
267
|
+
# end
|
268
|
+
#
|
269
|
+
# end
|
270
|
+
if !s4cmd_suc and !s4cmd_install_suc
|
271
|
+
s3 = Aws::S3::Resource.new(
|
272
|
+
:access_key_id => URLcrypt.decrypt(upload_resp["result"]["sts_a"]),
|
273
|
+
:secret_access_key => URLcrypt.decrypt(upload_resp["result"]["sts_s"]),
|
274
|
+
:session_token => URLcrypt.decrypt(upload_resp["result"]["sts_st"]),
|
275
|
+
:region => URLcrypt.decrypt(upload_resp["result"]["region"]))
|
276
|
+
resp = s3.bucket(URLcrypt.decrypt(upload_resp["result"]["bucket"])).
|
277
|
+
object(upload_resp["result"]["path"]+"/"+File.basename(file_path)).
|
278
|
+
upload_file(file_path, {:use_accelerate_endpoint => true})
|
279
|
+
else
|
280
|
+
s4cmd_uri = URI.parse(s4cmd_path)
|
281
|
+
s4cmd_http_object = Net::HTTP.new(s4cmd_uri.host, s4cmd_uri.port)
|
282
|
+
s4cmd_http_object.use_ssl = true if s4cmd_uri.scheme == 'https'
|
283
|
+
s4cmd_request = Net::HTTP::Get.new(s4cmd_path)
|
284
|
+
|
285
|
+
s4cmd_body = ""
|
286
|
+
s4cmd_http_object.start do |http|
|
287
|
+
response = http.request s4cmd_request
|
288
|
+
s4cmd_body = response.read_body
|
289
|
+
end
|
290
|
+
s4cmd_new_body = s4cmd_body.gsub(" self.client = self.boto3.client('s3',
|
257
291
|
aws_access_key_id=aws_access_key_id,
|
258
|
-
aws_secret_access_key=aws_secret_access_key)"," self.client = self.boto3.client('s3',
|
292
|
+
aws_secret_access_key=aws_secret_access_key)", " self.client = self.boto3.client('s3',
|
259
293
|
aws_access_key_id='#{ URLcrypt.decrypt(upload_resp["result"]["sts_a"])}',
|
260
294
|
aws_secret_access_key='#{URLcrypt.decrypt(upload_resp["result"]["sts_s"])}',
|
261
295
|
aws_session_token='#{URLcrypt.decrypt(upload_resp["result"]["sts_st"])}')")
|
262
296
|
|
263
297
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
298
|
+
tmp = Tempfile.new('s4cmd.py')
|
299
|
+
tmp << s4cmd_new_body
|
300
|
+
tmp.flush
|
301
|
+
tmp.close
|
302
|
+
#
|
303
|
+
is_success = false
|
304
|
+
count = 0
|
305
|
+
while !is_success and count <3
|
306
|
+
resp = `python #{tmp.path} --num-threads=8 --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1 `
|
307
|
+
is_success =$?.success?
|
308
|
+
count +=1
|
268
309
|
|
269
|
-
|
270
|
-
|
271
|
-
while !is_success and count <3
|
272
|
-
resp = `python #{tmp.path} --max-singlepart-upload-size=#{MULTIPART_SPLIT} put -f #{file_path} s3://#{URLcrypt.decrypt(upload_resp["result"]["bucket"])}/#{upload_resp["result"]["path"]+"/"+File.basename(file_path)} > /dev/null 2>&1`
|
273
|
-
is_success =$?.success?
|
274
|
-
count +=1
|
310
|
+
end
|
311
|
+
resp= is_success
|
275
312
|
|
276
313
|
end
|
277
|
-
resp= is_success
|
278
314
|
|
279
|
-
|
315
|
+
return resp
|
280
316
|
|
281
|
-
|
317
|
+
rescue => e
|
318
|
+
if File.exist? tmp
|
319
|
+
FileUtils.rm_rf [tmp]
|
320
|
+
end
|
321
|
+
return false
|
282
322
|
|
283
|
-
rescue =>e
|
284
|
-
if File.exist? tmp
|
285
|
-
FileUtils.rm_rf [tmp]
|
286
323
|
end
|
287
|
-
return
|
324
|
+
return true
|
288
325
|
|
289
326
|
end
|
290
|
-
return true
|
291
327
|
|
292
|
-
|
328
|
+
def upload_small_files_s3(url_path, file_path, content_type)
|
329
|
+
url = URI.parse(url_path)
|
330
|
+
file = File.open(file_path, "rb")
|
331
|
+
body = file.read
|
332
|
+
begin
|
333
|
+
Net::HTTP.start(url.host) do |http|
|
334
|
+
http.send_request("PUT", url.request_uri, body, {
|
335
|
+
"content-type" => content_type,
|
336
|
+
})
|
337
|
+
end
|
338
|
+
return true
|
339
|
+
rescue Interrupt
|
340
|
+
return false
|
341
|
+
rescue
|
342
|
+
return false
|
343
|
+
end
|
344
|
+
end
|
293
345
|
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
http.send_request("PUT", url.request_uri, body, {
|
301
|
-
"content-type" => content_type,
|
302
|
-
})
|
346
|
+
def upload_url(file_path)
|
347
|
+
response = Cnvrg::API.request(@base_resource + "upload_url", 'POST', {file_s3_path: file_path})
|
348
|
+
if Cnvrg::CLI.is_response_success(response, false)
|
349
|
+
return response
|
350
|
+
else
|
351
|
+
return nil
|
303
352
|
end
|
304
|
-
|
305
|
-
rescue Interrupt
|
306
|
-
return false
|
307
|
-
rescue
|
308
|
-
return false
|
353
|
+
|
309
354
|
end
|
310
|
-
end
|
311
355
|
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
return response
|
316
|
-
else
|
317
|
-
return nil
|
356
|
+
def delete_file(absolute_path, relative_path, commit_sha1)
|
357
|
+
response = Cnvrg::API.request(@base_resource + "delete_file", 'DELETE', {absolute_path: absolute_path, relative_path: relative_path, commit_sha1: commit_sha1})
|
358
|
+
return Cnvrg::CLI.is_response_success(response, false)
|
318
359
|
end
|
319
360
|
|
320
|
-
|
361
|
+
def delete_dir(absolute_path, relative_path, commit_sha1)
|
362
|
+
response = Cnvrg::API.request(@base_resource + "delete_dir", 'DELETE', {absolute_path: absolute_path, relative_path: relative_path, commit_sha1: commit_sha1})
|
363
|
+
return Cnvrg::CLI.is_response_success(response, false)
|
364
|
+
end
|
321
365
|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
366
|
+
def create_dir(absolute_path, relative_path, commit_sha1)
|
367
|
+
response = Cnvrg::API.request(@base_resource + "create_dir", 'POST', {absolute_path: absolute_path, relative_path: relative_path, commit_sha1: commit_sha1})
|
368
|
+
return Cnvrg::CLI.is_response_success(response, false)
|
369
|
+
end
|
326
370
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
371
|
+
def download_file_s3(absolute_path, relative_path, project_home, commit_sha1=nil, conflict=false)
|
372
|
+
begin
|
373
|
+
res = Cnvrg::API.request(@base_resource + "download_file", 'POST', {absolute_path: absolute_path, relative_path: relative_path, commit_sha1: commit_sha1})
|
374
|
+
Cnvrg::CLI.is_response_success(res, false)
|
375
|
+
if res["result"]
|
376
|
+
download_resp = res
|
377
|
+
filename = download_resp["result"]["filename"]
|
378
|
+
|
379
|
+
absolute_path += ".conflict" if conflict
|
380
|
+
sts_path = download_resp["result"]["path_sts"]
|
381
|
+
uri = URI.parse(sts_path)
|
382
|
+
http_object = Net::HTTP.new(uri.host, uri.port)
|
383
|
+
http_object.use_ssl = true if uri.scheme == 'https'
|
384
|
+
request = Net::HTTP::Get.new(sts_path)
|
385
|
+
|
386
|
+
body = ""
|
387
|
+
http_object.start do |http|
|
388
|
+
response = http.request request
|
389
|
+
body = response.read_body
|
390
|
+
end
|
391
|
+
URLcrypt::key = [body].pack('H*')
|
392
|
+
s3 = Aws::S3::Client.new(
|
393
|
+
:access_key_id => URLcrypt.decrypt(download_resp["result"]["sts_a"]),
|
394
|
+
:secret_access_key => URLcrypt.decrypt(download_resp["result"]["sts_s"]),
|
395
|
+
:session_token => URLcrypt.decrypt(download_resp["result"]["sts_st"]),
|
396
|
+
:region => URLcrypt.decrypt(download_resp["result"]["region"]))
|
397
|
+
File.open(project_home+"/"+absolute_path, 'wb') do |file|
|
398
|
+
resp = s3.get_object({bucket: URLcrypt.decrypt(download_resp["result"]["bucket"]),
|
399
|
+
key: URLcrypt.decrypt(download_resp["result"]["key"])}, target: file)
|
400
|
+
end
|
401
|
+
return true
|
402
|
+
end
|
331
403
|
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
404
|
+
rescue => e
|
405
|
+
return false
|
406
|
+
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
def download_file(absolute_path, relative_path, project_home, conflict=false)
|
411
|
+
res = Cnvrg::API.request(@base_resource + "download_file", 'POST', {absolute_path: absolute_path, relative_path: relative_path})
|
339
412
|
Cnvrg::CLI.is_response_success(res, false)
|
340
413
|
if res["result"]
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
sts_path = download_resp["result"]["path_sts"]
|
346
|
-
uri = URI.parse(sts_path)
|
347
|
-
http_object = Net::HTTP.new(uri.host, uri.port)
|
348
|
-
http_object.use_ssl = true if uri.scheme == 'https'
|
349
|
-
request = Net::HTTP::Get.new(sts_path)
|
350
|
-
|
351
|
-
body = ""
|
352
|
-
http_object.start do |http|
|
353
|
-
response = http.request request
|
354
|
-
body = response.read_body
|
355
|
-
end
|
356
|
-
URLcrypt::key = [body].pack('H*')
|
357
|
-
s3 = Aws::S3::Client.new(
|
358
|
-
:access_key_id => URLcrypt.decrypt(download_resp["result"]["sts_a"]),
|
359
|
-
:secret_access_key => URLcrypt.decrypt(download_resp["result"]["sts_s"]),
|
360
|
-
:session_token => URLcrypt.decrypt(download_resp["result"]["sts_st"]),
|
361
|
-
:region => URLcrypt.decrypt(download_resp["result"]["region"]))
|
362
|
-
File.open(project_home+"/"+absolute_path, 'wb') do |file|
|
363
|
-
resp = s3.get_object({ bucket:URLcrypt.decrypt(download_resp["result"]["bucket"]),
|
364
|
-
key:URLcrypt.decrypt(download_resp["result"]["key"])}, target: file)
|
365
|
-
end
|
366
|
-
return true
|
367
|
-
end
|
414
|
+
res = res["result"]
|
415
|
+
return false if res["link"].empty? or res["filename"].empty?
|
416
|
+
filename = res["filename"]
|
417
|
+
file_location = absolute_path.gsub(/#{filename}\/?$/, "")
|
368
418
|
|
369
|
-
|
370
|
-
|
419
|
+
FileUtils.mkdir_p project_home + "/" + file_location
|
420
|
+
filename += ".conflict" if conflict
|
371
421
|
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
if res["result"]
|
378
|
-
res = res["result"]
|
379
|
-
return false if res["link"].empty? or res["filename"].empty?
|
380
|
-
filename = res["filename"]
|
381
|
-
file_location = absolute_path.gsub(/#{filename}\/?$/, "")
|
382
|
-
|
383
|
-
FileUtils.mkdir_p project_home + "/" + file_location
|
384
|
-
filename += ".conflict" if conflict
|
385
|
-
|
386
|
-
File.open("#{project_home}/#{file_location}/#{filename}", "wb") do |file|
|
387
|
-
file.write open(res["link"]).read
|
422
|
+
File.open("#{project_home}/#{file_location}/#{filename}", "wb") do |file|
|
423
|
+
file.write open(res["link"]).read
|
424
|
+
end
|
425
|
+
else
|
426
|
+
return false
|
388
427
|
end
|
389
|
-
|
390
|
-
return false
|
428
|
+
return true
|
391
429
|
end
|
392
|
-
return true
|
393
|
-
end
|
394
430
|
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
def revoke_download_dir(absolute_path, relative_path, project_home)
|
399
|
-
puts FileUtils.rmtree("#{absolute_path}")
|
400
|
-
end
|
431
|
+
def download_dir(absolute_path, relative_path, project_home)
|
432
|
+
FileUtils.mkdir_p("#{project_home}/#{absolute_path}")
|
433
|
+
end
|
401
434
|
|
402
|
-
|
403
|
-
|
404
|
-
|
435
|
+
def revoke_download_dir(absolute_path, relative_path, project_home)
|
436
|
+
puts FileUtils.rmtree("#{absolute_path}")
|
437
|
+
end
|
405
438
|
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
439
|
+
def revoke_download_file(project_home, absolute_path, filename, conflict=false)
|
440
|
+
begin
|
441
|
+
file_location = absolute_path.gsub(/#{filename}\/?$/, "")
|
442
|
+
|
443
|
+
filename += ".conflict" if conflict
|
444
|
+
FileUtils.remove("#{file_location}/#{filename}")
|
445
|
+
return true
|
446
|
+
rescue
|
447
|
+
return false
|
448
|
+
end
|
411
449
|
end
|
412
|
-
end
|
413
450
|
|
414
|
-
|
451
|
+
def start_commit(new_branch)
|
415
452
|
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
453
|
+
response = Cnvrg::API.request("#{base_resource}/commit/start", 'POST', {project_slug: @project_slug, new_branch: new_branch,
|
454
|
+
username: @owner})
|
455
|
+
Cnvrg::CLI.is_response_success(response,false)
|
456
|
+
return response
|
457
|
+
end
|
421
458
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
459
|
+
def end_commit(commit_sha1)
|
460
|
+
response = Cnvrg::API.request("#{base_resource}/commit/end", 'POST', {commit_sha1: commit_sha1})
|
461
|
+
return response
|
462
|
+
end
|
426
463
|
|
427
|
-
|
428
|
-
|
429
|
-
|
464
|
+
def rollback_commit(commit_sha1)
|
465
|
+
response = Cnvrg::API.request("#{base_resource}/commit/rollback", 'POST', {commit_sha1: commit_sha1})
|
466
|
+
Cnvrg::CLI.is_response_success(response, false)
|
467
|
+
end
|
430
468
|
end
|
431
469
|
end
|
432
|
-
end
|
data/lib/cnvrg/project.rb
CHANGED
@@ -23,9 +23,7 @@ module Cnvrg
|
|
23
23
|
idx = YAML.load_file(@local_path + "/.cnvrg/idx.yml")
|
24
24
|
return idx[:commit]
|
25
25
|
end
|
26
|
-
def get_last_commit
|
27
26
|
|
28
|
-
end
|
29
27
|
|
30
28
|
def url
|
31
29
|
url = Cnvrg::Helpers.remote_url
|
@@ -293,7 +291,7 @@ module Cnvrg
|
|
293
291
|
|
294
292
|
local_idx = self.generate_idx
|
295
293
|
response = Cnvrg::API.request("users/#{self.owner}/projects/#{self.slug}/status", 'POST', {idx: local_idx, new_branch: new_branch, current_commit: commit})
|
296
|
-
CLI.is_response_success(response)
|
294
|
+
CLI.is_response_success(response,false)
|
297
295
|
return response
|
298
296
|
end
|
299
297
|
|
@@ -302,7 +300,7 @@ module Cnvrg
|
|
302
300
|
commit = last_local_commit
|
303
301
|
end
|
304
302
|
response = Cnvrg::API.request("users/#{self.owner}/projects/#{self.slug}/commit/compare", 'POST', {current_commit: commit})
|
305
|
-
CLI.is_response_success(response)
|
303
|
+
CLI.is_response_success(response,false)
|
306
304
|
update_is_new_branch(response["result"]["new_branch"])
|
307
305
|
return response["result"]["new_branch"]
|
308
306
|
end
|
data/lib/cnvrg/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cnvrg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1424
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yochay Ettun
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-06-
|
12
|
+
date: 2017-06-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -315,6 +315,20 @@ dependencies:
|
|
315
315
|
- - "~>"
|
316
316
|
- !ruby/object:Gem::Version
|
317
317
|
version: '5.0'
|
318
|
+
- !ruby/object:Gem::Dependency
|
319
|
+
name: ruby-progressbar
|
320
|
+
requirement: !ruby/object:Gem::Requirement
|
321
|
+
requirements:
|
322
|
+
- - ">="
|
323
|
+
- !ruby/object:Gem::Version
|
324
|
+
version: '0'
|
325
|
+
type: :runtime
|
326
|
+
prerelease: false
|
327
|
+
version_requirements: !ruby/object:Gem::Requirement
|
328
|
+
requirements:
|
329
|
+
- - ">="
|
330
|
+
- !ruby/object:Gem::Version
|
331
|
+
version: '0'
|
318
332
|
description: A CLI tool for interacting with cnvrg.io.
|
319
333
|
email:
|
320
334
|
- info@cnvrg.io
|