punt 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0d53d651e4708507fc26cb28fb7254d7878c90f
4
- data.tar.gz: 9c72338d9a5424e6c3eecd52069bf60e2dcac111
3
+ metadata.gz: 6c44be7df1cf91c7b83ed7583f1e052620655145
4
+ data.tar.gz: 4fe8396030c059c359824d1f240373774e366e9a
5
5
  SHA512:
6
- metadata.gz: 616c7f75dff897ac978bd5c07cbaa383e8e305cbfc407f7d2866f06573a93218e8244b6810508c88ccef52d425a7700ef588bcc8d27cd4f142d4bad1136ec03a
7
- data.tar.gz: 239305264e44ad2fb1032e187324adf6d8d41da09ab80c2c7ef09438d560e0d6116596563973829a81f91e4a5584a57fb42c9b515dc8fdba6b59910f8cc155f5
6
+ metadata.gz: 0cb4f36fe49c046e51af865c808d0d195053115a639916fd31852b51a55a4fa3c2af20d6b08acbb7dcd80aef4f10df43d7a3f1dc5b3836f2c6f825a9b557053e
7
+ data.tar.gz: 373aa2997001a4660635cde238c57a62aa76795eca5deedde37a2e4755db1ccd74da6a6ec9e5949d15f1f5d579977d4611ac456a765bfc7cf00891cc84ded1b4
@@ -11,7 +11,7 @@ class CmdDeploy < Cmd
11
11
  env = argv.shift
12
12
  repo_ref = argv.shift
13
13
 
14
- Deploy.new.deploy(env: env, repo_ref: repo_ref, dry_run: opts[:dry_run], force_local: opts[:force_local])
14
+ Deploy.new.deploy(env: env, repo_ref: repo_ref, dry_run: opts[:dry_run], verbose: opts[:verbose], force_local: opts[:force_local])
15
15
  end
16
16
 
17
17
  private
@@ -26,6 +26,10 @@ class CmdDeploy < Cmd
26
26
  options[:dry_run] = d
27
27
  end
28
28
 
29
+ opts.on("-v", "--verbose", "Run in verbose mode") do |v|
30
+ options[:verbose] = v
31
+ end
32
+
29
33
  opts.on("-l", "--force-local", "Try and push commits even if there are local changes") do |f|
30
34
  options[:force_local] = f
31
35
  end
data/lib/punt/deploy.rb CHANGED
@@ -3,7 +3,7 @@ class Deploy
3
3
  include ModeHelper
4
4
  include RepoHelper
5
5
 
6
- def deploy(env: nil, repo_ref: nil, dry_run: false, force_local: false)
6
+ def deploy(env: nil, repo_ref: nil, dry_run: false, verbose: false, force_local: false)
7
7
 
8
8
  dry_run_banner if dry_run
9
9
 
@@ -37,18 +37,23 @@ class Deploy
37
37
  repo.checkout_revision(desired_revision, dry_run: dry_run)
38
38
  end
39
39
 
40
+ # Mode Logistics
41
+ mode.mode_start(mode_opts: mode_opts, dry_run: dry_run, verbose: verbose)
42
+
40
43
  # Upload Starting File
41
- mode.upload_versionfile(desired_revision_long, "start", mode_opts: mode_opts ) unless dry_run
44
+ mode.upload_versionfile(desired_revision_long, "start", mode_opts: mode_opts, verbose: verbose ) unless dry_run
42
45
 
43
46
  # Upload Files
47
+ mode.transfer_start(mode_opts: mode_opts, dry_run: dry_run, verbose: verbose)
44
48
  if environment["files"]
45
49
  environment["files"].each do |key, value|
46
- mode.transfer(key, value, mode_opts: mode_opts, dry_run: dry_run, verbose: true)
50
+ mode.transfer(key, value, mode_opts: mode_opts, dry_run: dry_run, verbose: verbose)
47
51
  end
48
52
  end
53
+ mode.transfer_complete(mode_opts: mode_opts, dry_run: dry_run, verbose: verbose)
49
54
 
50
55
  # Upload Success File
51
- mode.upload_versionfile(desired_revision_long, "success", mode_opts: mode_opts ) unless dry_run
56
+ mode.upload_versionfile(desired_revision_long, "success", mode_opts: mode_opts, verbose: verbose ) unless dry_run
52
57
 
53
58
  # Revert to our previous checkout
54
59
  if desired_revision != starting_revision
@@ -4,26 +4,48 @@ class ModeScp
4
4
  return environment["scp"]
5
5
  end
6
6
 
7
- def transfer(local_path, remote_path, mode_opts: nil, dry_run: false, verbose: true)
7
+ def mode_start(mode_opts: nil, dry_run: false, verbose: true)
8
+ @has_sshpass = feature_detect_sshpass
9
+
10
+ if @has_sshpass && !mode_opts['ssh_key']
11
+ print "(using sshpass) enter the ssh password: "
12
+ @ssh_password = gets.chomp
13
+ elsif !mode_opts['ssh_key']
14
+ puts "sshpass is not installed. You will need to enter your password for every scp action that is generated. To avoid entering your password for every scp action, you can switch to key-based authentication by setting ssh_key. If key based authentication is not possible, try installing sshpass (https://gist.github.com/arunoda/7790979)"
15
+ puts ""
16
+ end
17
+ end
18
+
19
+ def transfer_start(mode_opts: nil, dry_run: false, verbose: true)
20
+ end
21
+
22
+ def transfer_complete(mode_opts: nil, dry_run: false, verbose: true)
23
+ end
24
+
25
+ def transfer(local_path, remote_path, mode_opts: nil, dry_run: false, verbose: false)
8
26
  scp_args = ["scp"]
9
- scp_common_options(mode_opts, scp_args)
27
+ scp_common_options(mode_opts, verbose, scp_args)
10
28
 
11
29
  if (File.directory?(local_path))
12
30
  scp_args << "-r"
13
31
  end
14
32
 
33
+ if (@has_sshpass && @ssh_password)
34
+ scp_args.unshift(@ssh_password).unshift("-p").unshift("sshpass")
35
+ end
36
+
15
37
  scp_args << local_path
16
38
  scp_args << scp_remote_file(remote_path, mode_opts)
17
39
 
18
40
  scp_command = scp_args.join(" ")
19
41
 
20
- puts scp_command if verbose
42
+ puts scp_command
21
43
  `#{scp_command}` unless dry_run
22
44
  end
23
45
 
24
- def download(local_path, remote_path, mode_opts: nil, dry_run: false, verbose: true)
46
+ def download(local_path, remote_path, mode_opts: nil, dry_run: false, verbose: false)
25
47
  scp_args = ["scp"]
26
- scp_common_options(mode_opts, scp_args)
48
+ scp_common_options(mode_opts, verbose, scp_args)
27
49
 
28
50
  if (File.directory?(local_path))
29
51
  scp_args << "-r"
@@ -38,7 +60,8 @@ class ModeScp
38
60
  `#{scp_command}` unless dry_run
39
61
  end
40
62
 
41
- def upload_versionfile(version, deploystage, mode_opts: nil)
63
+ def upload_versionfile(version, deploystage, mode_opts: nil, verbose: false)
64
+
42
65
  filename = ".punt_#{deploystage}"
43
66
 
44
67
  versionfile = Tempfile.new(filename)
@@ -50,15 +73,12 @@ class ModeScp
50
73
  versionfile.unlink
51
74
  end
52
75
 
53
- def download_versionfile(deploystage, mode_opts: nil)
76
+ def download_versionfile(deploystage, mode_opts: nil, verbose: false)
54
77
  filename = ".punt_#{deploystage}"
55
78
 
56
79
  versionfile = Tempfile.new(filename)
57
-
58
- download(versionfile.path, filename, mode_opts: mode_opts, verbose: false)
59
-
80
+ download(versionfile.path, filename, mode_opts: mode_opts, verbose: verbose)
60
81
  version = versionfile.read
61
-
62
82
  versionfile.unlink
63
83
 
64
84
  return version
@@ -66,11 +86,26 @@ class ModeScp
66
86
 
67
87
  private
68
88
 
69
- def scp_common_options(scp_opts, scp_args)
89
+ def feature_detect_sshpass
90
+ feature_check = `command -v sshpass >/dev/null 2>&1 || { echo "NOSCP"; }`.chomp
91
+
92
+ return feature_check != "NOSCP";
93
+ end
94
+
95
+ def scp_common_options(scp_opts, verbose, scp_args)
70
96
  if (scp_opts["ssh_key"])
71
97
  scp_args << "-i"
72
98
  scp_args << scp_opts["ssh_key"]
73
99
  end
100
+
101
+ if (verbose)
102
+ scp_args << "-v"
103
+ end
104
+
105
+ if (scp_opts["port"])
106
+ scp_args << "-P"
107
+ scp_args << scp_opts["port"]
108
+ end
74
109
  end
75
110
 
76
111
  def scp_remote_file(remote_path, scp_opts)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: punt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noah Callaway
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-19 00:00:00.000000000 Z
11
+ date: 2016-04-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Minimal deployment tool that can copy files to specific hosts over SCP
14
14
  and/or SFTP