salesforce-deploy-tool 1.3.0 → 2.0.0

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: cbe3021d67e55804a0f2815e685d08c2ba4cc6e4
4
- data.tar.gz: 9d80f486d15a382c4956992ec4c86cce4085133f
3
+ metadata.gz: 947f71272fa457667c1003576a2459182155903a
4
+ data.tar.gz: ffbc084e4ecea361755fc80ceb3875785c80f63a
5
5
  SHA512:
6
- metadata.gz: 608e4a229fcdb828cc15c8b16320a85b3c0f1fc4202f3c2961863cb09a8a9859311b77c90f5a90d181d270957dfbe06c3a2cdc4fe89e259a7beed93f26565777
7
- data.tar.gz: 81ac889d4979f9e81eddb4216770b65d0921e40a6225f41def605bd28e264b79ce74278521fb3f4c89849efd81dd2dd5c4d7471a0a80184e1e6b9b3f27036830
6
+ metadata.gz: 3658f66f329e1c875e17c263db2ba5608f3ad11b97dbc6996dab49528d6e0192c0540e7d374267219a4edd1c24bad93e8ae0c383df441b39688f53a1146df13c
7
+ data.tar.gz: 4ee7cd94cdac963328742b783f2fed28f3f9251f1067663e71aad6f52b860cdd3dd41e27b6b3f2bae50a33559d5432297410666f3085d94e40e9e7563a69ccd4
data/.gitignore CHANGED
@@ -24,4 +24,4 @@ mkmf.log
24
24
  test_data
25
25
  credentials.yaml
26
26
  envvars
27
- config.yaml
27
+ cucumber-config.yaml
data/bin/sf CHANGED
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- require 'pp'
3
- require 'yaml'
4
- require 'fileutils'
2
+ require 'salesforcedeploytool'
5
3
 
6
4
  # Disable stdout buffer
7
5
  STDOUT.sync = true
@@ -29,244 +27,44 @@ end
29
27
 
30
28
  # Read sandbox environment
31
29
  begin
32
- sandbox = File.open(File.expand_path(SANDBOX_CONFIG_FILE)).read
30
+ config[:sandbox] = File.open(File.expand_path(SANDBOX_CONFIG_FILE)).read
33
31
  rescue
34
- sandbox = nil
32
+ config[:sandbox] = nil
35
33
  end
36
34
 
37
- # Grab variables from env if not in the config files
38
- config[:git_dir] = ENV["SFDT_GIT_DIR"] || config[:git_dir]
39
- config[:tmp_dir] = ENV["SFDT_TMP_DIR"] || config[:tmp_dir]
40
- config[:version_file] = ENV["SFDT_VERSION_FILE"] || config[:version_file]
41
- config[:build_number_pattern] = ENV["SFDT_BUILD_NUMBER_PATTERN"] || config[:build_number_pattern]
42
- config[:commit_hash_pattern] = ENV["SFDT_COMMIT_HASH_PATTERN"] || config[:commit_hash_pattern]
35
+ # Configuration variables firrst from ENV , if not config file
36
+
37
+ # Git configs:
43
38
  config[:git_repo] = ENV["SFDT_GIT_REPO"] || config[:git_repo]
39
+ config[:git_dir] = ENV["SFDT_GIT_DIR"] || config[:git_dir]
40
+ config[:src_dir] = ENV["SFDT_SRC_DIR"] || config[:src_dir]
41
+
42
+ # Salesforce credential configs
44
43
  config[:username] = ENV["SFDT_USERNAME"] || config[:username]
45
44
  config[:password] = ENV["SFDT_PASSWORD"] || config[:password]
46
45
  config[:salesforce_url] = ENV["SFDT_SALESFORCE_URL"] || config[:salesforce_url]
47
- config[:deploy_ignore_files] = ENV["SFDT_DEPLOY_IGNORE_FILES"].nil? ? config[:deploy_ignore_files] : ENV["SFDT_DEPLOY_IGNORE_FILES"].split(',')
48
46
 
49
- # Default values
50
- config[:buildxml_dir] = ENV["SFDT_BUILDXML_DIR"] || config[:buildxml_dir] || ''
47
+ # Project configs
48
+ config[:version_file] = ENV["SFDT_VERSION_FILE"] || config[:version_file]
49
+ config[:build_number_pattern] = ENV["SFDT_BUILD_NUMBER_PATTERN"] || config[:build_number_pattern]
50
+ config[:commit_hash_pattern] = ENV["SFDT_COMMIT_HASH_PATTERN"] || config[:commit_hash_pattern]
51
+ config[:deploy_ignore_files] = ENV["SFDT_DEPLOY_IGNORE_FILES"].nil? ? config[:deploy_ignore_files] : ENV["SFDT_DEPLOY_IGNORE_FILES"].split(',')
51
52
 
52
53
  # Minimal config validation
54
+ abort "Config error: src_dir not found in #{GLOBAL_CONFIG_FILE} or through SFDT_SRC_DIR" if config[:src_dir].nil?
53
55
  abort "Config error: git_dir not found in #{GLOBAL_CONFIG_FILE} or through SFDT_GIT_DIR" if config[:git_dir].nil?
54
- abort "Config error: tmp_dir not found in #{GLOBAL_CONFIG_FILE} or through SFDT_TMP_DIR" if config[:tmp_dir].nil?
56
+ abort "Config error: git_repo not found in #{GLOBAL_CONFIG_FILE} or through SFDT_GIT_DIR" if config[:git_repo].nil?
55
57
  abort "Config error: username not found in #{GLOBAL_CONFIG_FILE} or through SFDT_USERNAME" if config[:username].nil? && ARGV[0] != 'config'
56
58
  abort "Config error: password not found in #{GLOBAL_CONFIG_FILE} or through SFDT_PASSWORD" if config[:password].nil? && ARGV[0] != 'config'
57
59
 
58
- # If the repository is not cloned then fail:
59
- if !File.exists?(config[:git_dir]) && ['pull','push'].include?(ARGV[0])
60
- abort "ERROR: The environment is not properly configured, please run sf config to clone the repo and setup the credentials"
61
- end
62
-
63
- # Normalize file paths:
64
- config[:git_dir] = File.expand_path config[:git_dir]
65
- config[:tmp_dir] = File.expand_path config[:tmp_dir]
66
-
67
- require 'salesforcedeploytool'
68
-
69
- program :version, SalesforceDeployTool::VERSION
70
- program :description, 'A cli tool to help manage and deploy salesforce sandboxes with git'
71
-
72
- command :pull do |c|
73
- c.syntax = 'sf pull'
74
- c.summary = 'Pull code from the sandbox'
75
- c.description = "Pull code from sandbox and update #{config[:git_dir]}"
76
- c.example 'usage:', 'sf pull'
77
- c.option "--append", "Pull code appending it to the local repository"
78
- c.option "--debug", "Verbose output"
79
- c.option "--sandbox NAME", "-s NAME", "use 'prod' to deploy production or sandbox name"
80
- c.action do |args, options|
81
-
82
- # short flag mapping
83
- options.sandbox = options.s if options.s
84
-
85
- # Parameter validation:
86
- if options.sandbox.nil? and sandbox.nil?
87
- puts "error: please specify sandbox using --sandbox or sf sandbox"
88
- exit 1
89
- end
90
- config[:sandbox] = options.sandbox || sandbox
91
- config[:debug] = options.debug.nil? ? false : true
92
-
93
- # The salesforce URL
94
- config[:salesforce_url] =
95
- ENV["SFDT_SALESFORCE_URL"] || # First from environment variables
96
- config[:salesforce_url] || # Second from the configuration files
97
- ( config[:sandbox] == 'prod' ? 'https://login.salesforce.com' : 'https://test.salesforce.com' ) # If not defined anywhere, use defaults
98
-
99
- # Initialize
100
- sfdt = SalesforceDeployTool::App.new config
101
-
102
- # Clean all files from repo
103
- sfdt.clean_git_dir unless options.append
104
-
105
- # Pull the changes
106
- print "INFO: Pulling changes from #{config[:sandbox]} using url #{config[:salesforce_url]} "
107
- print "\n\n" if options.debug
108
- sfdt.pull
109
- sfdt.clean_version
110
-
111
- end
112
-
113
- end
114
-
115
- command :push do |c|
116
- c.syntax = 'sf push [options]'
117
- c.summary = 'Push code into a sandbox'
118
- c.description = ''
119
- c.example 'description', "Push the code that is located into #{config[:git_dir]} into the active sandbox"
120
- c.option "--sandbox NAME", "-s NAME", "use 'prod' to deploy production or sandbox name"
121
- c.option "--debug", "Verbose output"
122
- c.option "--test", "-T", "Deploy and test"
123
- c.option "--exclude LIST", "-x LIST", "a CSV list of metadata to exclude when creating destructiveChange.xml"
124
- c.option "--append", "Disable destructive change and do an append deploy"
125
- c.option "--build_number NUMBER","Record build number on version file"
126
- c.action do |args, options|
127
-
128
- # short flag mapping
129
- options.test = true if options.T
130
- options.exclude = options.x if options.x
131
- options.sandbox = options.s if options.s
132
-
133
- # Parameter validation:
134
- if options.sandbox.nil? and sandbox.nil?
135
- puts "error: please specify the sandbox to pull from using --sandbox"
136
- exit 1
137
- end
138
- config[:sandbox] = options.sandbox || sandbox
139
- config[:test] = options.test.nil? ? false : true
140
- config[:debug] = options.debug.nil? ? false : true
141
-
142
- # The salesforce URL
143
- config[:salesforce_url] =
144
- ENV["SFDT_SALESFORCE_URL"] || # First from environment variables
145
- config[:salesforce_url] || # Second from the configuration files
146
- ( config[:sandbox] == 'prod' ? 'https://login.salesforce.com' : 'https://test.salesforce.com' ) # If not defined anywhere, use defaults
147
-
148
- # Initialize
149
- sfdt = SalesforceDeployTool::App.new config.clone
60
+ # Create a temporary directory
61
+ config[:tmp_dir] = Dir.mktmpdir 'sfdt-'
150
62
 
151
- # Remove destructive change if there is one
152
- DESTRUCTIVE_CHANGE_FILE = File.join(config[:git_dir],config[:buildxml_dir],'src','destructiveChanges.xml')
153
- FileUtils.rm DESTRUCTIVE_CHANGE_FILE if File.exists? DESTRUCTIVE_CHANGE_FILE
154
-
155
- if ! options.append
156
- # Pull changes from sandbox to temporary directory:
157
- config_tmp = config.clone
158
- config_tmp[:git_dir] = config_tmp[:tmp_dir]
159
- FileUtils.rm_rf config_tmp[:git_dir] if File.exists? config_tmp[:git_dir]
160
- FileUtils.cp_r config[:git_dir],config_tmp[:git_dir]
161
- sfdt_tmp = SalesforceDeployTool::App.new config_tmp
162
- print "INFO: Pulling changes from #{config[:sandbox]} using url #{config[:salesforce_url]} to temporary directory #{config[:tmp_dir]} to generate destructiveChanges.xml "
163
- sfdt_tmp.pull
164
-
165
- # Create destructiveChanges.xml
166
- puts "INFO: Creating destructive changes xml"
167
- dc_gen = Dcgen::App.new
168
- dc_gen.master = File.join(config[:git_dir],config[:buildxml_dir],'src')
169
- dc_gen.destination = File.join(config[:tmp_dir],config[:buildxml_dir],'src')
170
- dc_gen.output = DESTRUCTIVE_CHANGE_FILE
171
- dc_gen.exclude = options.exclude.split(',') unless options.exclude.nil?
172
- dc_gen.verbose = false if not options.debug
173
- dc_gen.generate_destructive_changes
174
-
175
- end
176
-
177
- # Push code to sandbox
178
- begin
179
- # Set version
180
- sfdt.build_number = options.build_number if not options.build_number.nil?
181
- sfdt.set_version
182
-
183
- # Enable test if option enabled
184
- sfdt.test = options.test.nil? ? false : true
185
-
186
- # Push
187
- print(options.test.nil? ? "INFO: Deploying code to #{config[:sandbox]}: ": "INFO: Deploying and Testing code to #{config[:sandbox]}: \n\n")
188
- sfdt.push
189
- ensure
190
- sfdt.clean_version
191
- end
192
-
193
- end
194
- end
195
-
196
- command :sandbox do |c|
197
- c.syntax = 'sf sandbox SANDBOX_NAME'
198
- c.summary = 'Set sandbox to work on, this can be overriden by --sandbox '
199
- c.description = 'Set the sandbox to work with pull and push. If no parameter defined, it will print the current sandbox selected.'
200
- c.action do |args, options|
201
-
202
- if args.size > 1
203
- puts "error: Wrong number of arguments"
204
- end
205
-
206
- if args.size == 0
207
- if ! sandbox.nil?
208
- puts "sandbox: " + sandbox
209
- exit 0
210
- else
211
- puts "WARN: Sandbox has not been set yet"
212
- exit 1
213
- end
214
- end
215
- File.open(File.expand_path(SANDBOX_CONFIG_FILE),'w').write args.first
216
-
217
- end
218
- end
219
-
220
- command :config do |c|
221
- c.syntax = 'sf config'
222
- c.summary = 'Go through the configuration wizard to config your environment'
223
- c.action do |args, options|
224
-
225
- if args.size != 0
226
- puts "error: Wrong number of arguments"
227
- end
228
-
229
- config_new = {}
230
-
231
- config_new[:username] = ask "Please enter your SalesForce production login user name" do |q|
232
- q.validate = /^\S+@\S+$/
233
- end.to_s
234
-
235
- config_new[:password] = ask "Please enter your Salesforce production password" do |q|
236
- q.echo = "x"
237
- end.to_s
238
-
239
- git_name = ask "Please enter your Full name to be used as commit owner on GIT" do |q|
240
- q.validate = /^[a-zA-Z\s]+$/
241
- end
242
-
243
- git_email = ask "Please enter your email to be used as commit email on GIT" do |q|
244
- q.validate = /^\S+@\S+$/
245
- end
246
-
247
- sandbox = ask "Please enter your sandbox so to be used as default when push and pull" do |q|
248
- q.validate = /^[a-zA-Z]+$/
249
- end
250
-
251
- %x[git config --global user.email "#{git_email}"]
252
- %x[git config --global user.name "#{git_name}"]
253
-
254
- config[:username] = config_new[:username]
255
- config[:password] = config_new[:password]
256
- config[:sandbox] = sandbox
257
-
258
- File.open(File.expand_path(SANDBOX_CONFIG_FILE),'w').write sandbox
259
- File.open(File.expand_path(CONFIG_FILE),'w').write config_new.to_yaml
260
-
261
- # Initialize
262
- sfdt = SalesforceDeployTool::App.new config
263
-
264
- # Clone
265
- sfdt.clone
266
-
267
- end
63
+ begin
64
+ SalesforceDeployTool::CLI.new.run config
65
+ rescue => e
66
+ puts "ERROR: #{e}"
67
+ exit 1
68
+ ensure
69
+ FileUtils.rm_rf config[:tmp_dir] if Dir.exists? config[:tmp_dir]
268
70
  end
269
-
270
- default_command :help
271
-
272
-
@@ -0,0 +1,15 @@
1
+ :production_username: 'john.doe@example.com'
2
+ :production_password: 'passw0rd'
3
+ :git_full_name: 'John Doe'
4
+ :git_email_address: 'john.doe@example.com'
5
+ :sandbox: 'test'
6
+ :environment_variables:
7
+ :sfdt_git_repo: '/url/to/git/repo/with/test/salesforce/classes'
8
+ :sfdt_git_dir: 'where/to/be/cloned'
9
+ :sfdt_src_dir: 'within/the/repo/path/to/salesforce/source/code'
10
+ :replacement_patterns:
11
+ :env_a: 'testa'
12
+ :env_b: 'testb'
13
+ :build_number_pattern: '%%BUILD_NUMBER%%'
14
+ :commit_hash_pattern: '%%COMMIT_HASH%%'
15
+ :version_file: 'classes/VersionTest.cls'
@@ -7,10 +7,10 @@ Feature: Push code to salesforce
7
7
  Scenario: Push code to a sandbox
8
8
  When I run `sf push`
9
9
  Then the exit status should be 0
10
- And a file named "dcxml_location/destructiveChanges.xml" should exist
10
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should exist
11
11
  And the output should match:
12
12
  """
13
- ^INFO: Pulling changes from env_a using url https:\/\/test.salesforce.com to temporary directory .*tmp_repo.* to generate destructiveChanges.xml.*OK$
13
+ ^INFO: Pulling changes from env_a using url https:\/\/test.salesforce.com to temporary directory to generate destructiveChanges.xml.*OK$
14
14
  ^INFO: Creating destructive changes xml$
15
15
  ^INFO: Deploying code to env_a:.*OK$
16
16
  """
@@ -18,10 +18,10 @@ Feature: Push code to salesforce
18
18
  Scenario: Push code to a different sandbox
19
19
  When I run `sf push -s env_b`
20
20
  Then the exit status should be 0
21
- And a file named "dcxml_location/destructiveChanges.xml" should exist
21
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should exist
22
22
  And the output should match:
23
23
  """
24
- ^INFO: Pulling changes from env_b using url https://test.salesforce.com to temporary directory .*tmp_repo.* to generate destructiveChanges.xml.*OK$
24
+ ^INFO: Pulling changes from env_b using url https://test.salesforce.com to temporary directory to generate destructiveChanges.xml.*OK$
25
25
  ^INFO: Creating destructive changes xml$
26
26
  ^INFO: Deploying code to env_b:.*OK$
27
27
  """
@@ -35,28 +35,28 @@ Feature: Push code to salesforce
35
35
  Then the exit status should be 1
36
36
  And the output should match:
37
37
  """
38
- ^INFO: Pulling changes from prod using url https://login.salesforce.com to temporary directory .*tmp_repo.* to generate destructiveChanges.xml.*$
38
+ ^INFO: Pulling changes from prod using url https://login.salesforce.com to temporary directory to generate destructiveChanges.xml.*$
39
39
  """
40
40
 
41
41
  Scenario: Push code to a sandbox with debug information
42
42
  When I run `sf push -d`
43
43
  Then the exit status should be 0
44
44
  And the output should match /^.* env_a .*BUILD SUCCESSFUL.*Diff between.*Changes detected.*File generated.*BUILD SUCCESSFUL.*$/
45
- And a file named "dcxml_location/destructiveChanges.xml" should exist
45
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should exist
46
46
 
47
47
  Scenario: Push code to a sandbox with debug information to a different sandbox
48
48
  When I run `sf push -d -s env_b`
49
49
  Then the exit status should be 0
50
50
  And the output should match /^.* env_b .*BUILD SUCCESSFUL.*Diff between.*Changes detected.*File generated.*BUILD SUCCESSFUL.*$/
51
- And a file named "dcxml_location/destructiveChanges.xml" should exist
51
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should exist
52
52
 
53
53
  Scenario: Push code to a sandbox and trigger all the tests
54
54
  When I run `sf push -T`
55
55
  Then the exit status should be 0
56
- And a file named "dcxml_location/destructiveChanges.xml" should exist
56
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should exist
57
57
  And the output should match:
58
58
  """
59
- ^INFO: Pulling changes from env_a using url https://test.salesforce.com to temporary directory .*tmp_repo.* to generate destructiveChanges.xml.*OK$
59
+ ^INFO: Pulling changes from env_a using url https://test.salesforce.com to temporary directory to generate destructiveChanges.xml.*OK$
60
60
  ^INFO: Creating destructive changes xml$
61
61
  ^INFO: Deploying and Testing code to env_a:.*OK$
62
62
  """
@@ -64,13 +64,13 @@ Feature: Push code to salesforce
64
64
  Scenario: Push code to a sandbox and trigger all the tests in debug mode
65
65
  When I run `sf push -T -d`
66
66
  Then the exit status should be 0
67
- And a file named "dcxml_location/destructiveChanges.xml" should exist
67
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should exist
68
68
  And the output should match /^.* env_a .*BUILD SUCCESSFUL.*Diff between.*Changes detected.*File generated.*Running Test:.*DEPLOYMENT SUCCEEDED.*BUILD SUCCESSFUL.*$/
69
69
 
70
70
  Scenario: Push code to a sandbox in append mode
71
71
  When I run `sf push -a`
72
72
  Then the exit status should be 0
73
- And a file named "dcxml_location/destructiveChanges.xml" should not exist
73
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should not exist
74
74
  And the output should match:
75
75
  """
76
76
  ^INFO: Deploying code to env_a:.*OK$
@@ -79,24 +79,23 @@ Feature: Push code to salesforce
79
79
  Scenario: Push code to a sandbox in append mode and run all tests
80
80
  When I run `sf push -a -T`
81
81
  Then the exit status should be 0
82
- And a file named "dcxml_location/destructiveChanges.xml" should not exist
82
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should not exist
83
83
  And the output should match:
84
84
  """
85
85
  ^INFO: Deploying and Testing code to env_a:.*OK$
86
86
  """
87
87
 
88
- @test
89
88
  Scenario: Push code to a sandbox in append mode and run all tests and output debug information
90
89
  When I run `sf push -a -T -d`
91
90
  Then the exit status should be 0
92
- And a file named "dcxml_location/destructiveChanges.xml" should not exist
91
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should not exist
93
92
  And the output should match:
94
93
  """
95
94
  ^INFO: Deploying and Testing code to env_a: $
96
95
  ^$
97
96
  ^Buildfile: .*$
98
97
  ^$
99
- ^deployAndTestCode:$
98
+ ^deployAndTestAllCode:$
100
99
  """
101
100
  And the output should match /Running Test/
102
101
  And the output should match /DEPLOYMENT SUCCEEDED.*BUILD SUCCESSFUL/
@@ -106,14 +105,14 @@ Feature: Push code to salesforce
106
105
  | variable | value |
107
106
  | SFDT_VERSION_FILE | version_file |
108
107
  | SFDT_BUILD_NUMBER_PATTERN | build_number_pattern |
109
- When I watch "sfdt_git_dir/version_file" for changes and copy to "test_file"
108
+ When I watch "sfdt_git_dir/sfdt_src_dir/version_file" for changes and copy to "test_file"
110
109
  And I run `sf push --build_number 123456789`
111
110
  Then the exit status should be 0
112
111
  And the file "test_file" should contain "123456789"
113
- And the file "sfdt_git_dir/version_file" should contain "build_number_pattern"
112
+ And the file "sfdt_git_dir/sfdt_src_dir/version_file" should contain "build_number_pattern"
114
113
  And the output should match:
115
114
  """
116
- ^INFO: Pulling changes from env_a using url https://test.salesforce.com to temporary directory .*tmp_repo.* to generate destructiveChanges.xml.*OK$
115
+ ^INFO: Pulling changes from env_a using url https://test.salesforce.com to temporary directory to generate destructiveChanges.xml.*OK$
117
116
  ^INFO: Creating destructive changes xml$
118
117
  ^INFO: Deploying code to env_a:.*OK$
119
118
  """
@@ -123,14 +122,14 @@ Feature: Push code to salesforce
123
122
  | variable | value |
124
123
  | SFDT_VERSION_FILE | version_file |
125
124
  | SFDT_COMMIT_HASH_PATTERN | commit_hash_pattern |
126
- When I watch "sfdt_git_dir/version_file" for changes and copy to "test_file"
125
+ When I watch "sfdt_git_dir/sfdt_src_dir/version_file" for changes and copy to "test_file"
127
126
  And I run `sf push`
128
127
  Then the exit status should be 0
129
128
  And the file "test_file" should not contain "commit_hash_pattern"
130
- And the file "sfdt_git_dir/version_file" should contain "commit_hash_pattern"
129
+ And the file "sfdt_git_dir/sfdt_src_dir/version_file" should contain "commit_hash_pattern"
131
130
  And the output should match:
132
131
  """
133
- ^INFO: Pulling changes from env_a using url https://test.salesforce.com to temporary directory .*tmp_repo.* to generate destructiveChanges.xml.*OK$
132
+ ^INFO: Pulling changes from env_a using url https://test.salesforce.com to temporary directory to generate destructiveChanges.xml.*OK$
134
133
  ^INFO: Creating destructive changes xml$
135
134
  ^INFO: Deploying code to env_a:.*OK$
136
135
  """
@@ -141,7 +140,7 @@ Feature: Push code to salesforce
141
140
  Then the exit status should be 1
142
141
  And the output should match:
143
142
  """
144
- ^ERROR: The environment is not properly configured, please run sf config to clone the repo and setup the credentials$
143
+ ^ERROR: The source directory .* is not a valid salesforce source directory
145
144
  """
146
145
 
147
146
  Scenario: Push code to a sandbox specifying a different URL
@@ -155,4 +154,86 @@ Feature: Push code to salesforce
155
154
  .*Failed to login: Failed to send request to https://invalid_url.salesforce.com.*
156
155
  """
157
156
 
158
- # TODO: Scenario: Push code to a sandbox excluding files
157
+ Scenario: Push code to a sandbox and trigger individual tests in debug mode
158
+ When I run `sf push -r individual_test -d`
159
+ Then the exit status should be 0
160
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should exist
161
+ And the output should match:
162
+ """
163
+ ^INFO: Deploying and Testing code to env_a: $
164
+ ^$
165
+ ^Buildfile: .*$
166
+ ^$
167
+ ^deployAndTestAllCode:$
168
+ """
169
+ And the output should match /Running Test/
170
+ And the output should match /DEPLOYMENT SUCCEEDED.*BUILD SUCCESSFUL/
171
+
172
+ Scenario: Push code to a sandbox with a build number
173
+ Given I set the environment variables to:
174
+ | variable | value |
175
+ | SFDT_VERSION_FILE | version_file |
176
+ | SFDT_BUILD_NUMBER_PATTERN | build_number_pattern |
177
+ When I watch "sfdt_git_dir/sfdt_src_dir/version_file" for changes and copy to "test_file"
178
+ And I run `sf push --build_number 123456789`
179
+ Then the exit status should be 0
180
+ And the file "test_file" should contain "123456789"
181
+ And the file "sfdt_git_dir/sfdt_src_dir/version_file" should contain "build_number_pattern"
182
+ And the output should match:
183
+ """
184
+ ^INFO: Pulling changes from env_a using url https://test.salesforce.com to temporary directory to generate destructiveChanges.xml.*OK$
185
+ ^INFO: Creating destructive changes xml$
186
+ ^INFO: Deploying code to env_a:.*OK$
187
+ """
188
+
189
+ Scenario: Push code to a sandbox with the commit hash stamped into a version file
190
+ Given I set the environment variables to:
191
+ | variable | value |
192
+ | SFDT_VERSION_FILE | version_file |
193
+ | SFDT_COMMIT_HASH_PATTERN | commit_hash_pattern |
194
+ When I watch "sfdt_git_dir/sfdt_src_dir/version_file" for changes and copy to "test_file"
195
+ And I run `sf push`
196
+ Then the exit status should be 0
197
+ And the file "test_file" should not contain "commit_hash_pattern"
198
+ And the file "sfdt_git_dir/sfdt_src_dir/version_file" should contain "commit_hash_pattern"
199
+ And the output should match:
200
+ """
201
+ ^INFO: Pulling changes from env_a using url https://test.salesforce.com to temporary directory to generate destructiveChanges.xml.*OK$
202
+ ^INFO: Creating destructive changes xml$
203
+ ^INFO: Deploying code to env_a:.*OK$
204
+ """
205
+
206
+ Scenario: Push code to a sandbox with the repo not being cloned it should point the user to run sf config
207
+ When I delete the repository directory
208
+ And I run `sf push -d`
209
+ Then the exit status should be 1
210
+ And the output should match:
211
+ """
212
+ ^ERROR: The source directory .* is not a valid salesforce source directory
213
+ """
214
+
215
+ Scenario: Push code to a sandbox specifying a different URL
216
+ Given I set the environment variables to:
217
+ | variable | value |
218
+ | SFDT_SALESFORCE_URL | https://invalid_url.salesforce.com |
219
+ When I run `sf push -d`
220
+ Then the exit status should be 1
221
+ And the output should match:
222
+ """
223
+ .*Failed to login: Failed to send request to https://invalid_url.salesforce.com.*
224
+ """
225
+ @new
226
+ Scenario: Push code to a sandbox and trigger individual tests in debug mode
227
+ When I run `sf push -r individual_test -d`
228
+ Then the exit status should be 0
229
+ And a file named "sfdt_git_dir/sfdt_src_dir/destructiveChanges.xml" should exist
230
+ And the output should match:
231
+ """
232
+ ^INFO: Deploying and Testing code to env_a: $
233
+ ^$
234
+ ^Buildfile: .*$
235
+ ^$
236
+ ^deployAndTestCode:$
237
+ """
238
+ And the output should match /Running Test: individual_test/
239
+ And the output should match /DEPLOYMENT SUCCEEDED.*BUILD SUCCESSFUL/
@@ -3,7 +3,7 @@ require 'filewatcher'
3
3
  require 'git'
4
4
 
5
5
  # Load configuratiohn
6
- config = YAML::load(File.open('config.yaml'))
6
+ config = YAML::load(File.open('cucumber-config.yaml'))
7
7
 
8
8
  # Cucumber / aruba configuration parameters
9
9
  Before do
@@ -1,4 +1,4 @@
1
- config = YAML::load(File.open('config.yaml'))
1
+ config = YAML::load(File.open('cucumber-config.yaml'))
2
2
 
3
3
  When /^I type my salesforce (.*)$/ do |input|
4
4
  raise "Please create credentials.yaml" if config[input.to_sym].nil?
@@ -3,39 +3,49 @@ module SalesforceDeployTool
3
3
  class App
4
4
 
5
5
  attr_accessor :build_number
6
- attr_accessor :test
6
+ attr_accessor :run_all_tests
7
7
 
8
8
  def initialize config
9
9
 
10
10
  # Config file validation:
11
11
  ( @git_repo = config[:git_repo] ).nil? and raise "Invalid Config: git_repo not found"
12
12
  ( @git_dir = config[:git_dir] ).nil? and raise "Invalid Config: git_dir not found"
13
+ ( @src_dir = config[:src_dir] ).nil? and raise "Invalid Config: src_dir not found"
13
14
  ( @sandbox = config[:sandbox] ).nil? and raise "Invalid Config: sandbox not found"
14
- ( @password = config[:password] ).nil? and raise "Invalid Config: password not found, please run `sf config`"
15
15
  ( @username = config[:username] ).nil? and raise "Invalid Config: username not found, please run `sf config`"
16
16
  ( @password = config[:password] ).nil? and raise "Invalid Config: password not found, please run `sf config`"
17
17
 
18
18
  # Parameter Normalization
19
- @git_dir = File.expand_path config[:git_dir]
20
- @tmp_dir = File.expand_path config[:tmp_dir]
21
- @version_file = File.join(@git_dir,config[:version_file]) if !config[:version_file].nil?
22
- @deploy_ignore_files = config[:deploy_ignore_files].map {|f| File.expand_path File.join(config[:git_dir],f)} if ! config[:deploy_ignore_files].nil?
19
+ @git_dir = File.expand_path(@git_dir)
20
+ @full_src_dir = File.join(@git_dir,@src_dir)
21
+ @version_file = File.join(@full_src_dir,config[:version_file]) if !config[:version_file].nil?
22
+ @deploy_ignore_files = config[:deploy_ignore_files].map {|f| File.expand_path(File.join(@full_src_dir,f)) } if !config[:deploy_ignore_files].nil?
23
23
  @build_number_pattern = config[:build_number_pattern]
24
24
  @commit_hash_pattern = config[:commit_hash_pattern]
25
- @buildxml_dir = config[:buildxml_dir]
26
25
  @username = @sandbox == 'prod' ? @username : @username + '.' + @sandbox
27
26
  @server_url = config[:salesforce_url]
28
27
 
29
28
  # Defaults
29
+ @run_tests = []
30
30
  @debug ||= config[:debug]
31
- @test ||= config[:test]
32
31
  @build_number ||= 'N/A'
33
32
  @version_file ||= false
34
- @buildxml_dir ||= ''
35
33
  @build_number_pattern ||= false
36
34
  @commit_hash_pattern ||= false
37
35
  @deploy_ignore_files ||= []
38
36
 
37
+ # Template dir
38
+ buildxml_path = File.join($:.select {|x| x.match(/salesforce-deploy-tool/) },'..','tpl','build.xml.erb')
39
+ @buildxml_erb = File.read(buildxml_path)
40
+
41
+
42
+ end
43
+
44
+ # @run_tests can't be nil
45
+ def run_tests= value
46
+ value ||= []
47
+ raise "ArgumentError" if value.class != Array
48
+ @run_tests = value
39
49
  end
40
50
 
41
51
  def set_version
@@ -78,7 +88,7 @@ module SalesforceDeployTool
78
88
 
79
89
  def clean_git_dir
80
90
 
81
- Dir[File.join(@git_dir,'src','*')].each do |dir|
91
+ Dir[File.join(@full_src_dir,'*')].each do |dir|
82
92
  FileUtils.rm_rf dir unless dir =~ /.*package.xml$/
83
93
  end
84
94
 
@@ -86,7 +96,14 @@ module SalesforceDeployTool
86
96
 
87
97
  def pull
88
98
 
99
+ # Parameter validation
100
+ raise "package.xml not found under #{@full_src_dir}" if !File.exists? File.join(@full_src_dir,'package.xml')
101
+
102
+ renderer = ERB.new(@buildxml_erb, nil,'%<>-')
103
+ File.open('build.xml','w') {|f| f.write renderer.result(binding) }
104
+
89
105
  env_vars = ""
106
+ env_vars += " SF_SRC_DIR=" + @full_src_dir
90
107
  env_vars += " SF_USERNAME=" + @username
91
108
  env_vars += " SF_PASSWORD=" + @password
92
109
  env_vars += " SF_SERVERURL=" + @server_url
@@ -94,8 +111,6 @@ module SalesforceDeployTool
94
111
 
95
112
  full_cmd = env_vars + cmd
96
113
 
97
- Dir.chdir File.join(@git_dir,@buildxml_dir)
98
-
99
114
  exec_options = {
100
115
  :stderr => @debug,
101
116
  :stdout => @debug,
@@ -123,11 +138,15 @@ module SalesforceDeployTool
123
138
 
124
139
  def push
125
140
 
126
- # Working dir
127
- Dir.chdir File.join(@git_dir,@buildxml_dir)
141
+ # Parameter validation
142
+ raise "package.xml not found under #{@full_src_dir}" if !File.exists? File.join(@full_src_dir,'package.xml')
143
+
144
+ renderer = ERB.new(@buildxml_erb, nil,'%<>-')
145
+ File.open('build.xml','w') {|f| f.write renderer.result(binding) }
128
146
 
129
147
  # Set env variables to run ant
130
148
  env_vars = ""
149
+ env_vars += " SF_SRC_DIR=" + @full_src_dir
131
150
  env_vars += " SF_USERNAME=" + @username
132
151
  env_vars += " SF_PASSWORD=" + @password
133
152
  env_vars += " SF_SERVERURL=" + @server_url
@@ -146,7 +165,16 @@ module SalesforceDeployTool
146
165
  exec_options[:failmsg] = nil
147
166
  end
148
167
 
149
- cmd = @test ? " ant deployAndTestCode" : " ant deployCode"
168
+ if @run_all_tests
169
+ cmd = " ant deployAndTestAllCode"
170
+ else
171
+ if @run_tests
172
+ cmd = " ant deployAndTestCode"
173
+ else
174
+ cmd = " ant deployCode"
175
+ end
176
+ end
177
+
150
178
  full_cmd = env_vars + cmd
151
179
 
152
180
  # Delete files to be ignored:
@@ -0,0 +1,242 @@
1
+
2
+ module SalesforceDeployTool
3
+
4
+ class CLI
5
+
6
+ include Commander::Methods
7
+
8
+ def run config
9
+
10
+ # Normalize file paths:
11
+ config[:git_dir] = File.expand_path config[:git_dir]
12
+ full_src_dir = File.join(config[:git_dir],config[:src_dir])
13
+
14
+ # If the repository is not cloned then fail:
15
+ if !File.exists?(full_src_dir) && ['pull','push'].include?(ARGV[0]) && !File.exists?(File.join(full_src_dir,"package.xml"))
16
+ abort "ERROR: The source directory #{full_src_dir} is not a valid salesforce source directory"
17
+ end
18
+
19
+ # Chdir to working directory
20
+ Dir.chdir config[:tmp_dir]
21
+
22
+ # saleforce-deploy-tool version and description
23
+ program :version, SalesforceDeployTool::VERSION
24
+ program :description, 'A cli tool to help manage and deploy salesforce sandboxes with git'
25
+
26
+ # Commands:
27
+ command :pull do |c|
28
+ c.syntax = 'sf pull'
29
+ c.summary = 'Pull code from the sandbox'
30
+ c.description = "Pull code from sandbox and update #{config[:git_dir]}"
31
+ c.example 'usage:', 'sf pull'
32
+ c.option "--append", "Pull code appending it to the local repository"
33
+ c.option "--debug", "Verbose output"
34
+ c.option "--sandbox NAME", "-s NAME", "use 'prod' to deploy production or sandbox name"
35
+ c.action do |args, options|
36
+
37
+ # short flag mapping
38
+ options.sandbox = options.s if options.s
39
+
40
+ # Parameter validation:
41
+ if options.sandbox.nil? and config[:sandbox].nil?
42
+ puts "error: please specify sandbox using --sandbox or sf sandbox"
43
+ exit 1
44
+ end
45
+ config[:sandbox] = options.sandbox if options.sandbox
46
+ config[:debug] = options.debug.nil? ? false : true
47
+
48
+ # The salesforce URL
49
+ config[:salesforce_url] =
50
+ ENV["SFDT_SALESFORCE_URL"] || # First from environment variables
51
+ config[:salesforce_url] || # Second from the configuration files
52
+ ( config[:sandbox] == 'prod' ? 'https://login.salesforce.com' : 'https://test.salesforce.com' ) # If not defined anywhere, use defaults
53
+
54
+ # Initialize
55
+ sfdt = SalesforceDeployTool::App.new config
56
+
57
+ # Clean all files from repo
58
+ sfdt.clean_git_dir unless options.append
59
+
60
+ # Pull the changes
61
+ print "INFO: Pulling changes from #{config[:sandbox]} using url #{config[:salesforce_url]} "
62
+ print "\n\n" if options.debug
63
+ sfdt.pull
64
+ sfdt.clean_version
65
+
66
+ end
67
+
68
+ end
69
+
70
+ command :push do |c|
71
+ c.syntax = 'sf push [options]'
72
+ c.summary = 'Push code into a sandbox'
73
+ c.description = ''
74
+ c.example 'description', "Push the code that is located into #{config[:git_dir]} into the active sandbox"
75
+ c.option "--sandbox NAME", "-s NAME", "use 'prod' to deploy production or sandbox name"
76
+ c.option "--debug", "Verbose output"
77
+ c.option "--exclude CSV_LIST", "-x CSV_LIST", "a CSV list of metadata to exclude when creating destructiveChange.xml"
78
+ c.option "--append", "Disable destructive change and do an append deploy"
79
+ c.option "--build_number NUMBER","Record build number on version file"
80
+ c.option "--run-all-tests", "-T", "Deploy and test"
81
+ c.option "--run-tests CSV_LIST", "-r CSV_LIST", "a CSV list of individual classes to run tests"
82
+ c.action do |args, options|
83
+
84
+ # short flag mapping
85
+ options.run_all_tests = true if options.T
86
+ options.run_tests = options.r if options.r
87
+ options.exclude = options.x if options.x
88
+ options.sandbox = options.s if options.s
89
+
90
+ # Parameter validation:
91
+
92
+ if options.run_all_tests and options.run_tests
93
+ puts "warning: --run-tests is ignored as --test has been declared "
94
+ end
95
+
96
+ if options.sandbox.nil? and config[:sandbox].nil?
97
+ puts "error: please specify the sandbox to pull from using --sandbox"
98
+ exit 1
99
+ end
100
+ config[:sandbox] = options.sandbox if options.sandbox
101
+ config[:debug] = options.debug.nil? ? false : true
102
+
103
+ # The salesforce URL
104
+ config[:salesforce_url] =
105
+ ENV["SFDT_SALESFORCE_URL"] || # First from environment variables
106
+ config[:salesforce_url] || # Second from the configuration files
107
+ ( config[:sandbox] == 'prod' ? 'https://login.salesforce.com' : 'https://test.salesforce.com' ) # If not defined anywhere, use defaults
108
+
109
+ # Initialize
110
+ sfdt = SalesforceDeployTool::App.new config
111
+
112
+ # Remove destructive change if there is one
113
+ destructive_change_file = File.join(full_src_dir,'destructiveChanges.xml')
114
+ FileUtils.rm destructive_change_file if File.exists? destructive_change_file
115
+
116
+ if ! options.append
117
+ # Pull changes from sandbox to temporary directory:
118
+ config_tmp = config.clone
119
+ config_tmp[:git_dir] = File.join(config[:tmp_dir],'repo_copy')
120
+ FileUtils.cp_r config[:git_dir],config_tmp[:git_dir]
121
+ sfdt_tmp = SalesforceDeployTool::App.new config_tmp
122
+ print "INFO: Pulling changes from #{config[:sandbox]} using url #{config[:salesforce_url]} to temporary directory to generate destructiveChanges.xml "
123
+ print( options.debug.nil? ? "" : "\n\n" )
124
+ sfdt_tmp.pull
125
+
126
+ # Create destructiveChanges.xml
127
+ puts "INFO: Creating destructive changes xml"
128
+ dc_gen = Dcgen::App.new
129
+ dc_gen.master = full_src_dir
130
+ dc_gen.destination = File.join(config_tmp[:git_dir],config_tmp[:src_dir])
131
+ dc_gen.output = destructive_change_file
132
+ dc_gen.exclude = options.exclude.split(',') unless options.exclude.nil?
133
+ dc_gen.verbose = false if not options.debug
134
+ dc_gen.generate_destructive_changes
135
+
136
+ end
137
+
138
+ # Push code to sandbox
139
+ begin
140
+ # Set version
141
+ sfdt.build_number = options.build_number if not options.build_number.nil?
142
+ sfdt.set_version
143
+
144
+ # Enable test if option enabled
145
+ sfdt.run_all_tests = options.run_all_tests.nil? ? false : true
146
+ sfdt.run_tests = options.run_tests.split(',') unless options.run_tests.nil?
147
+
148
+ # Push
149
+ print( options.run_all_tests.nil? && options.run_tests.nil? ? "INFO: Deploying code to #{config[:sandbox]}: ": "INFO: Deploying and Testing code to #{config[:sandbox]}: " )
150
+ print( options.debug.nil? ? "" : "\n\n" )
151
+ sfdt.push
152
+ ensure
153
+ sfdt.clean_version
154
+ end
155
+
156
+ end
157
+ end
158
+
159
+ command :sandbox do |c|
160
+ c.syntax = 'sf sandbox SANDBOX_NAME'
161
+ c.summary = 'Set sandbox to work on, this can be overriden by --sandbox '
162
+ c.description = 'Set the sandbox to work with pull and push. If no parameter defined, it will print the current sandbox selected.'
163
+ c.action do |args, options|
164
+
165
+ if args.size > 1
166
+ puts "error: Wrong number of arguments"
167
+ end
168
+
169
+ if args.size == 0
170
+ if ! config[:sandbox].nil?
171
+ puts "sandbox: " + config[:sandbox]
172
+ exit 0
173
+ else
174
+ puts "WARN: Sandbox has not been set yet"
175
+ exit 1
176
+ end
177
+ end
178
+ File.open(File.expand_path(SANDBOX_CONFIG_FILE),'w').write args.first
179
+
180
+ end
181
+ end
182
+
183
+ command :config do |c|
184
+ c.syntax = 'sf config'
185
+ c.summary = 'Go through the configuration wizard to config your environment'
186
+ c.action do |args, options|
187
+
188
+ if args.size != 0
189
+ puts "error: Wrong number of arguments"
190
+ end
191
+
192
+ config_new = {}
193
+
194
+ config_new[:username] = ask "Please enter your SalesForce production login user name" do |q|
195
+ q.validate = /^\S+@\S+$/
196
+ end.to_s
197
+
198
+ config_new[:password] = ask "Please enter your Salesforce production password" do |q|
199
+ q.echo = "x"
200
+ end.to_s
201
+
202
+ git_name = ask "Please enter your Full name to be used as commit owner on GIT" do |q|
203
+ q.validate = /^[a-zA-Z\s]+$/
204
+ end
205
+
206
+ git_email = ask "Please enter your email to be used as commit email on GIT" do |q|
207
+ q.validate = /^\S+@\S+$/
208
+ end
209
+
210
+ config[:sandbox] = ask "Please enter your sandbox so to be used as default when push and pull" do |q|
211
+ q.validate = /^[a-zA-Z]+$/
212
+ end
213
+
214
+ %x[git config --global user.email "#{git_email}"]
215
+ %x[git config --global user.name "#{git_name}"]
216
+
217
+ config[:username] = config_new[:username]
218
+ config[:password] = config_new[:password]
219
+
220
+ File.open(File.expand_path(SANDBOX_CONFIG_FILE),'w').write config[:sandbox]
221
+ File.open(File.expand_path(CONFIG_FILE),'w').write config_new.to_yaml
222
+
223
+ # Initialize
224
+ sfdt = SalesforceDeployTool::App.new config
225
+
226
+ # Clone
227
+ sfdt.clone
228
+
229
+ end
230
+ end
231
+
232
+ default_command :help
233
+
234
+ run!
235
+
236
+ end
237
+
238
+ end
239
+
240
+ end
241
+
242
+
@@ -1,3 +1,3 @@
1
1
  module SalesforceDeployTool
2
- VERSION = "1.3.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -1,6 +1,10 @@
1
1
  require "rubygems"
2
+ require "commander"
3
+ require 'pp'
4
+ require 'yaml'
5
+ require 'fileutils'
6
+ require 'tmpdir'
2
7
  require "pathname"
3
- require "commander/import"
4
8
  require "git"
5
9
  require "pp"
6
10
  require "colorize"
@@ -13,4 +17,5 @@ require "stringio"
13
17
  require "salesforcedeploytool/version"
14
18
  require "salesforcedeploytool/functions"
15
19
  require "salesforcedeploytool/app"
16
-
20
+ require "salesforcedeploytool/cli"
21
+ require "erb"
data/tpl/build.xml.erb ADDED
@@ -0,0 +1,59 @@
1
+ <project name="Sample usage of Salesforce Ant tasks" default="test" basedir="." xmlns:sf="antlib:com.salesforce">
2
+
3
+ <property environment="env"/>
4
+
5
+ <taskdef resource="com/salesforce/antlib.xml" uri="antlib:com.salesforce">
6
+ <classpath>
7
+ <pathelement location="../ant-salesforce.jar" />
8
+ </classpath>
9
+ </taskdef>
10
+
11
+ <target name="deployCode">
12
+ <sf:deploy
13
+ username="${env.SF_USERNAME}"
14
+ password="${env.SF_PASSWORD}"
15
+ serverurl="${env.SF_SERVERURL}"
16
+ deployRoot="${env.SF_SRC_DIR}"
17
+ maxPoll="200"
18
+ rollbackOnError="true" >
19
+ </sf:deploy>
20
+ </target>
21
+
22
+ <target name="deployAndTestCode">
23
+ <sf:deploy
24
+ username="${env.SF_USERNAME}"
25
+ password="${env.SF_PASSWORD}"
26
+ serverurl="${env.SF_SERVERURL}"
27
+ deployRoot="${env.SF_SRC_DIR}"
28
+ maxPoll="200"
29
+ rollbackOnError="true" >
30
+ <% @run_tests.each do |test| -%>
31
+ <runTest><%= test %></runTest>
32
+ <% end -%>
33
+ </sf:deploy>
34
+ </target>
35
+
36
+ <target name="deployAndTestAllCode">
37
+ <sf:deploy
38
+ username="${env.SF_USERNAME}"
39
+ password="${env.SF_PASSWORD}"
40
+ serverurl="${env.SF_SERVERURL}"
41
+ deployRoot="${env.SF_SRC_DIR}"
42
+ maxPoll="200"
43
+ runAllTests="true"
44
+ rollbackOnError="true" >
45
+ </sf:deploy>
46
+ </target>
47
+
48
+ <target name="retrieveCode">
49
+ <sf:retrieve
50
+ username="${env.SF_USERNAME}"
51
+ password="${env.SF_PASSWORD}"
52
+ serverurl="${env.SF_SERVERURL}"
53
+ retrieveTarget="${env.SF_SRC_DIR}"
54
+ maxPoll="200"
55
+ unpackaged="${env.SF_SRC_DIR}/package.xml"
56
+ />
57
+ </target>
58
+
59
+ </project>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: salesforce-deploy-tool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Breinlinger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-04 00:00:00.000000000 Z
11
+ date: 2015-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,6 +150,7 @@ files:
150
150
  - README.md
151
151
  - Rakefile
152
152
  - bin/sf
153
+ - cucumber-config.yaml-tpl
153
154
  - features/config.feature
154
155
  - features/misc.feature
155
156
  - features/pull.feature
@@ -158,9 +159,11 @@ files:
158
159
  - features/support/hooks.rb
159
160
  - lib/salesforcedeploytool.rb
160
161
  - lib/salesforcedeploytool/app.rb
162
+ - lib/salesforcedeploytool/cli.rb
161
163
  - lib/salesforcedeploytool/functions.rb
162
164
  - lib/salesforcedeploytool/version.rb
163
165
  - salesforce-deploy-tool.gemspec
166
+ - tpl/build.xml.erb
164
167
  homepage: ''
165
168
  licenses:
166
169
  - MIT