salesforce-deploy-tool 3.1.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 585dac2205744a81b1864062cddab4fa113c468a
4
- data.tar.gz: 47b53f0925188b68dcc7dd7a513114408ff95b42
3
+ metadata.gz: 564089e30d21649d7dd0d313b63b09c6f8431c73
4
+ data.tar.gz: e2422efa9dd61c3ee7449a2aef97f0e3ea5ebbed
5
5
  SHA512:
6
- metadata.gz: 0b5fa61af545b693f545a561efc13d02917152c5424bc325b4f5e31b9ea206f118f4ef90f7964b263929c0d3ff486a7219749ded616425a74366722e04ad8d49
7
- data.tar.gz: 452142bee6a902cd78a4db0ca39effd9663e1188e621b921cea2b5a2bceff2f2bc9eec916eee86e3a8cfe05d3d9e329aea47b3816fe6695c4c3bc558533cac25
6
+ metadata.gz: 75f26823c0782c45d5e14946d9329d67d26fe91ade750e53c498c0f72322da8aa35431cf478941d95a62d63c879d7e270b1cbbe0d3e4198b8a4f2648de668654
7
+ data.tar.gz: e77174b0e7782992c9bae765ac69099db86e8b50903c23501b875d22725f5ca208718c9f2c9a30b411a20bf2f4f00d60aca3b43dd6c19ba824321d0a3cb41f0b
data/README.md CHANGED
@@ -1,29 +1,55 @@
1
- # Salesforce::Deploy::Tool
1
+ # Salesforce Deploy Tool
2
2
 
3
- TODO: Write a gem description
3
+ Salesforce deploy tool is a command line tool that sits on top of ant to facilitate
4
+ salesforce deploys.
5
+
6
+ ## Features
7
+
8
+ * push code / pull code / validate / destructive push support
9
+ * Easier than using ant
10
+ * Specify environment to deploy using a flag
11
+ * Exclude and include metadata and metadata types
12
+ * Destructive Changes autogeneration
13
+ * GIT integration
14
+ * Production / Test deployment support
15
+ * Fast deploy support
16
+ * Specify different ant libraries so to use different APIs
4
17
 
5
18
  ## Installation
6
19
 
7
- Add this line to your application's Gemfile:
20
+ $ gem install salesforce-deploy-tool
8
21
 
9
- gem 'salesforce-deploy-tool'
22
+ ## Quick Start
10
23
 
11
- And then execute:
24
+ To generate a configuration file do
12
25
 
13
- $ bundle
26
+ $ sf config
14
27
 
15
- Or install it yourself as:
28
+ ## Example
16
29
 
17
- $ gem install salesforce-deploy-tool
30
+ For how to use this tool just run:
31
+
32
+ $ sf pull -h
33
+ $ sf push -h
34
+
35
+ ### specific examples
36
+
37
+ ```
38
+ $ sf pull -d
39
+ $ sf pull -d -s mySandbox
40
+ $ sf push -T
41
+ $ sf push -l /path/to/ant-salesforce.jar
42
+ $ sf push -s prod
43
+ $ sf push -i apexclass
44
+ $ sf push -i apexclass -e TestClass -d -s myOtherSandbox
45
+ $ sf push -a
46
+ ```
18
47
 
19
- ## Usage
48
+ ## Contrib
20
49
 
21
- TODO: Write usage instructions here
50
+ Feel free to fork and request a pull, or submit a ticket
51
+ http://github.com/BreinsNet/salesforce-deploy-tool/issues
22
52
 
23
- ## Contributing
53
+ ## License
24
54
 
25
- 1. Fork it ( https://github.com/[my-github-username]/salesforce-deploy-tool/fork )
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create a new Pull Request
55
+ This project is available under the MIT license. See LICENSE for details.
data/bin/sf CHANGED
@@ -50,18 +50,26 @@ config[:build_number_pattern] = ENV["SFDT_BUILD_NUMBER_PATTERN"] || config[:
50
50
  config[:commit_hash_pattern] = ENV["SFDT_COMMIT_HASH_PATTERN"] || config[:commit_hash_pattern]
51
51
  config[:deploy_ignore_files] = ENV["SFDT_DEPLOY_IGNORE_FILES"].nil? ? config[:deploy_ignore_files] : ENV["SFDT_DEPLOY_IGNORE_FILES"].split(',')
52
52
 
53
+ # Ant options
54
+ config[:libant] = ENV["SFDT_ANT_LIB"] || config[:libant]
55
+
53
56
  # 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?
55
- abort "Config error: git_dir not found in #{GLOBAL_CONFIG_FILE} or through SFDT_GIT_DIR" if config[:git_dir].nil?
56
- abort "Config error: git_repo not found in #{GLOBAL_CONFIG_FILE} or through SFDT_GIT_DIR" if config[:git_repo].nil?
57
- abort "Config error: username not found in #{GLOBAL_CONFIG_FILE} or through SFDT_USERNAME" if config[:username].nil? && ARGV[0] != 'config'
58
- abort "Config error: password not found in #{GLOBAL_CONFIG_FILE} or through SFDT_PASSWORD" if config[:password].nil? && ARGV[0] != 'config'
57
+ abort "Config error: src_dir not found in #{GLOBAL_CONFIG_FILE} or through SFDT_SRC_DIR" \
58
+ if config[:src_dir].nil? && !['-v'].include?(ARGV.first)
59
+ abort "Config error: git_dir not found in #{GLOBAL_CONFIG_FILE} or through SFDT_GIT_DIR" \
60
+ if config[:git_dir].nil? && !['-v'].include?(ARGV.first)
61
+ abort "Config error: git_repo not found in #{GLOBAL_CONFIG_FILE} or through SFDT_GIT_DIR" \
62
+ if config[:git_repo].nil? && !['-v'].include?(ARGV.first)
63
+ abort "Config error: username not found in #{GLOBAL_CONFIG_FILE} or through SFDT_USERNAME" \
64
+ if config[:username].nil? && !['config','-v'].include?(ARGV.first)
65
+ abort "Config error: password not found in #{GLOBAL_CONFIG_FILE} or through SFDT_PASSWORD" \
66
+ if config[:password].nil? && !['config','-v'].include?(ARGV.first)
59
67
 
60
68
  # Create a temporary directory
61
69
  config[:tmp_dir] = Dir.mktmpdir 'sfdt-'
62
70
 
63
- begin
64
71
  SalesforceDeployTool::CLI.new.run config
72
+ begin
65
73
  rescue => e
66
74
  puts "ERROR: #{e}"
67
75
  exit 1
@@ -57,3 +57,42 @@ Feature: Pull code from salesforce
57
57
  ^INFO: Pulling changes from testEnv using url https://test.salesforce.com.*$
58
58
  """
59
59
 
60
+ @ant
61
+ Scenario: Retrieve code from the default sandbox with debug output and specifying ant library path
62
+ When I run `sf pull -d -l lib/ant34.jar`
63
+ Then the exit status should be 0
64
+ And the output should match:
65
+ """
66
+ ^INFO: Pulling changes from testEnv using url https://test.salesforce.com $
67
+ ^$
68
+ ^AntLibraryFile: .*lib/ant34.jar$
69
+ ^Buildfile: .*$
70
+ ^$
71
+ ^retrieveCode:$
72
+ """
73
+
74
+ @ant
75
+ Scenario: Retrieve code from the default sandbox with debug output and specifying ant library path
76
+ Given I set the environment variables to:
77
+ | variable | value |
78
+ | SFDT_ANT_LIB | lib/ant34.jar |
79
+ When I run `sf pull -d`
80
+ Then the exit status should be 0
81
+ And the output should match:
82
+ """
83
+ ^INFO: Pulling changes from testEnv using url https://test.salesforce.com $
84
+ ^$
85
+ ^AntLibraryFile: .*lib/ant34.jar$
86
+ ^Buildfile: .*$
87
+ ^$
88
+ ^retrieveCode:$
89
+ """
90
+
91
+ @ant
92
+ Scenario: Retrieve code from the default sandbox with debug output and specifying a wrong ant library path
93
+ When I run `sf pull -d -l lib/invalid_ant34.jar`
94
+ Then the exit status should be 1
95
+ And the output should match:
96
+ """
97
+ ^error: ant library file .* not found$
98
+ """
@@ -101,6 +101,7 @@ Feature: Push code to salesforce
101
101
  And the output should match /Running Test/
102
102
  And the output should match /DEPLOYMENT SUCCEEDED.*BUILD SUCCESSFUL/
103
103
 
104
+ @test
104
105
  Scenario: Push code to a sandbox with a build number
105
106
  Given I set the environment variables to:
106
107
  | variable | value |
@@ -119,7 +120,6 @@ Feature: Push code to salesforce
119
120
  ^INFO: Deploying code to testEnv:.*OK$
120
121
  """
121
122
 
122
- @test
123
123
  Scenario: Push code to a sandbox with the commit hash stamped into a version file
124
124
  Given I set the environment variables to:
125
125
  | variable | value |
@@ -280,7 +280,6 @@ Feature: Push code to salesforce
280
280
  And the output should match /INFO: Deploying code to testEnv/
281
281
  And the output should match /DEPLOYMENT SUCCEEDED.*BUILD SUCCESSFUL/
282
282
 
283
- @new
284
283
  Scenario: Push code to a sandbox in debug mode and specifieng specific metadata exclude from destructive change
285
284
  When I run `sf push -e NewVersionTest -d`
286
285
  Then the exit status should be 0
@@ -292,3 +291,47 @@ Feature: Push code to salesforce
292
291
  And the output should match /excluded: NewVersionTest/
293
292
  And the output should match /INFO: Deploying code to testEnv/
294
293
  And the output should match /DEPLOYMENT SUCCEEDED.*BUILD SUCCESSFUL/
294
+
295
+ @ant
296
+ Scenario: Push code to a sandbox using a different ant library path in debug mode should show the library path in the output
297
+ Given I set the environment variables to:
298
+ | variable | value |
299
+ | SFDT_ANT_LIB | lib/ant34.jar |
300
+ When I run `sf push -d`
301
+ Then the exit status should be 0
302
+ And a file named "repo/salesforce/src/destructiveChanges.xml" should exist
303
+ And the file "repo/salesforce/src/destructiveChanges.xml" should match /ApexClass|ApexPage/
304
+ And the output should match:
305
+ """
306
+ ^INFO: Deploying code to .*$
307
+ ^$
308
+ ^AntLibraryFile: .*lib/ant34.jar$
309
+ ^Buildfile: .*$
310
+ ^$
311
+ ^deployCode:$
312
+ """
313
+
314
+ @ant
315
+ Scenario: Push code to a sandbox using a different ant library path in debug mode should show the library path in the output
316
+ When I run `sf push -l lib/ant34.jar -d`
317
+ Then the exit status should be 0
318
+ And a file named "repo/salesforce/src/destructiveChanges.xml" should exist
319
+ And the file "repo/salesforce/src/destructiveChanges.xml" should match /ApexClass|ApexPage/
320
+ And the output should match:
321
+ """
322
+ ^INFO: Deploying code to .*$
323
+ ^$
324
+ ^AntLibraryFile: .*lib/ant34.jar$
325
+ ^Buildfile: .*$
326
+ ^$
327
+ ^deployCode:$
328
+ """
329
+
330
+ @ant
331
+ Scenario: Push code to a sandbox using a invalid ant library path should fail
332
+ When I run `sf push -l lib/invalid_ant34.jar`
333
+ Then the exit status should be 1
334
+ And the output should match:
335
+ """
336
+ ^error: ant library file .* not found$
337
+ """
@@ -1,6 +1,17 @@
1
1
  #!/bin/bash
2
2
 
3
- COMMAND=$1
3
+ if [[ $1 == '-lib' ]] ;then
4
+ COMMAND=$3
5
+ ANTLIB=$2
6
+ else
7
+ COMMAND=$1
8
+ ANTLIB=$2
9
+ fi
10
+
11
+ if [[ ! -z $ANTLIB ]] && [[ ! -f $ANTLIB ]]; then
12
+ echo "ERROR: ANT lib path not found"
13
+ exit 1
14
+ fi
4
15
 
5
16
  if [[ -z $SF_SRC_DIR ]]; then
6
17
  echo "ERROR: SF_SRC_DIR Not defined"
@@ -75,7 +86,7 @@ case $COMMAND in
75
86
  # Add two more classes and two more pages so to simulate
76
87
  # Destructive changes
77
88
  cd $SF_SRC_DIR
78
- git reset --hard
89
+ git reset --hard > /dev/null 2>&1
79
90
  old_dir=`pwd`
80
91
  cd $SF_SRC_DIR/classes
81
92
  ls|tail -2|while read class;do cp $class New$class;done
@@ -146,8 +157,40 @@ BUILD SUCCESSFUL
146
157
  EOF
147
158
  fi
148
159
  ;;
149
- "deployAndTestCode"|"deployAndRunSpecifiedTests")
150
- cat << EOF
160
+ "deployAndTestCode")
161
+ cat << EOF
162
+ Buildfile: ${PWD}/build.xml
163
+
164
+ ${COMMAND}:
165
+ [sf:deploy] Request for a deploy submitted successfully.
166
+ [sf:deploy] Request ID for the current deploy task: 0Af2400000a0FeVCAU
167
+ [sf:deploy] Waiting for server to finish processing the request...
168
+ [sf:deploy] Request Status: Pending
169
+ [sf:deploy] Request Status: InProgress (94/1473) -- Processing Type: CustomObject
170
+ [sf:deploy] Request Status: InProgress
171
+ [sf:deploy] Request Status: InProgress (1204/1473) -- Processing Type: ApprovalProcess
172
+ [sf:deploy] Request Status: InProgress (1212/1473) -- Processing Type: ApexClass
173
+ [sf:deploy] Request Status: InProgress (1212/1473) -- Processing Type: ApexClass
174
+ [sf:deploy] Request Status: InProgress (1442/1473) -- Processing Type: PermissionSet
175
+ [sf:deploy] Request Status: InProgress (7/227) -- Running Test: FooClassTest
176
+ [sf:deploy] Request Status: InProgress (26/227) -- Running Test: BarClassTest
177
+ [sf:deploy] Request Status: Succeeded
178
+ [sf:deploy] *********** DEPLOYMENT SUCCEEDED ***********
179
+ [sf:deploy] Finished request 0Af2400000a0FeVCAU successfully.
180
+
181
+ BUILD SUCCESSFUL
182
+ EOF
183
+ ;;
184
+ "deployAndRunSpecifiedTests")
185
+ if ! grep 'testLevel="RunSpecifiedTests"' build.xml > /dev/null 2>&1; then
186
+ echo "ERROR: RunSpecifiedTests is not in build.xml"
187
+ exit 1
188
+ fi
189
+ if ! grep -E '<runTest>.*<\/runTest>' build.xml > /dev/null 2>&1; then
190
+ echo "ERROR: <runTest> tag is not in build.xml"
191
+ exit 1
192
+ fi
193
+ cat << EOF
151
194
  Buildfile: ${PWD}/build.xml
152
195
 
153
196
  ${COMMAND}:
@@ -198,4 +241,7 @@ EOF
198
241
 
199
242
  esac
200
243
 
201
- sleep 0.4
244
+ # Sleep 2 seconds so that the tests with version files can detect changes on it
245
+ [[ ! -z $SFDT_VERSION_FILE ]] && sleep 1
246
+
247
+ exit 0
@@ -2,13 +2,6 @@ require 'aruba/cucumber'
2
2
  require 'filewatcher'
3
3
  require 'git'
4
4
 
5
- # Necesary environment variables:
6
- ENV["SFDT_GIT_REPO"] = File.join(Dir.pwd,'features/resources/repo')
7
- ENV["SFDT_GIT_DIR"] = 'repo'
8
- ENV["SFDT_SRC_DIR"] = 'salesforce/src'
9
- ENV["SFDT_USERNAME"] = 'john.doe@example.com'
10
- ENV["SFDT_PASSWORD"] = 'mysecurepass'
11
- ENV["SFDT_SANDBOX"] = 'testEnv'
12
5
 
13
6
  # Create a temprary home directory:
14
7
  new_home = File.join(Dir.pwd,'tmp','home')
@@ -28,13 +21,30 @@ Before '@config' do
28
21
  FileUtils.rm_rf File.join(File.expand_path('~/'),'.sf')
29
22
  end
30
23
 
31
- # Before push and pull clone the repository
32
- Before '@push,@pull' do
24
+ Before '@push,@pull,@config' do
25
+
26
+ # Necesary environment variables:
27
+ ENV["SFDT_GIT_REPO"] = File.join(Dir.pwd,'features/resources/repo')
28
+ ENV["SFDT_GIT_DIR"] = 'repo'
29
+ ENV["SFDT_SRC_DIR"] = 'salesforce/src'
30
+ ENV["SFDT_USERNAME"] = 'john.doe@example.com'
31
+ ENV["SFDT_PASSWORD"] = 'mysecurepass'
32
+ ENV["SFDT_SANDBOX"] = 'testEnv'
33
+
34
+ # Clone repository
33
35
  uri = ENV['SFDT_GIT_REPO']
34
36
  name = File.join 'tmp', 'aruba', ENV['SFDT_GIT_DIR']
35
37
  Git.clone(uri, name)
38
+
39
+ # Simulate a different ant library
40
+ FileUtils.mkdir File.join 'tmp','aruba','lib'
41
+ FileUtils.touch File.join 'tmp','aruba','lib','ant34.jar'
36
42
  end
37
43
 
38
44
  at_exit do
39
- FileUtils.rm 'bin/ant'
45
+ FileUtils.rm 'bin/ant' if File.exists? 'bin/ant'
46
+ end
47
+
48
+ After do |s|
49
+ Cucumber.wants_to_quit = true if s.failed?
40
50
  end
@@ -8,7 +8,7 @@ When /^I watch "(.+)" for changes and copy to "(.+)"$/ do |file,dest|
8
8
  fork do
9
9
  FileWatcher.new(file).watch do |filename|
10
10
  FileUtils.cp file, dest
11
- exit
11
+ exit 0
12
12
  end
13
13
  end
14
14
  end
@@ -25,6 +25,7 @@ module SalesforceDeployTool
25
25
  @commit_hash_pattern = config[:commit_hash_pattern]
26
26
  @username = @sandbox == 'prod' ? @username : @username + '.' + @sandbox
27
27
  @server_url = config[:salesforce_url]
28
+ @libant = File.expand_path(config[:libant]) if config[:libant]
28
29
 
29
30
  # Defaults
30
31
  @check_only = false
@@ -109,7 +110,9 @@ module SalesforceDeployTool
109
110
  env_vars += " SF_USERNAME=" + @username
110
111
  env_vars += " SF_PASSWORD=" + @password
111
112
  env_vars += " SF_SERVERURL=" + @server_url
112
- cmd = " ant retrieveCode"
113
+ cmd = " ant"
114
+ cmd += " -lib #{@libant}" if @libant
115
+ cmd += " retrieveCode"
113
116
 
114
117
  full_cmd = env_vars + cmd
115
118
 
@@ -167,21 +170,23 @@ module SalesforceDeployTool
167
170
  exec_options[:failmsg] = nil
168
171
  end
169
172
 
173
+ ant_cmd = " ant"
174
+ ant_cmd += " -lib #{@libant}" if @libant
170
175
  if @run_all_tests
171
- cmd = " ant deployAndTestCode"
176
+ cmd = " deployAndTestCode"
172
177
  else
173
178
  if ! @run_tests.empty?
174
- cmd = " ant deployAndRunSpecifiedTests"
179
+ cmd = " deployAndRunSpecifiedTests"
175
180
  else
176
- cmd = " ant deployCode"
181
+ cmd = " deployCode"
177
182
  end
178
183
  end
179
184
 
180
185
  if @check_only
181
- cmd = " ant checkOnlyCode"
186
+ cmd = " checkOnlyCode"
182
187
  end
183
-
184
- full_cmd = env_vars + cmd
188
+
189
+ full_cmd = env_vars + ant_cmd + cmd
185
190
 
186
191
  # Delete files to be ignored:
187
192
  @deploy_ignore_files.each do |file|
@@ -16,9 +16,6 @@ module SalesforceDeployTool
16
16
  abort "ERROR: The source directory #{full_src_dir} is not a valid salesforce source directory"
17
17
  end
18
18
 
19
- # Chdir to working directory
20
- Dir.chdir config[:tmp_dir]
21
-
22
19
  # saleforce-deploy-tool version and description
23
20
  program :version, SalesforceDeployTool::VERSION
24
21
  program :description, 'A cli tool to help manage and deploy salesforce sandboxes with git'
@@ -32,34 +29,49 @@ module SalesforceDeployTool
32
29
  c.option "--append", "Pull code appending it to the local repository"
33
30
  c.option "--debug", "Verbose output"
34
31
  c.option "--sandbox NAME", "-s NAME", "use 'prod' to deploy production or sandbox name"
32
+ c.option "--lib-ant PATH", "-l PATH", "Path to the ant-library to use"
35
33
  c.action do |args, options|
36
34
 
37
35
  # short flag mapping
38
36
  options.sandbox = options.s if options.s
37
+ options.libant = options.l if options.l
39
38
 
40
39
  # Parameter validation:
41
40
  if options.sandbox.nil? and config[:sandbox].nil?
42
41
  puts "error: please specify sandbox using --sandbox or sf sandbox"
43
42
  exit 1
44
43
  end
44
+
45
+ if options.libant && !File.exists?(File.expand_path options.libant)
46
+ puts "error: ant library file #{options.libant} not found"
47
+ exit 1
48
+ end
49
+
50
+ # Config array
51
+ config[:libant] = config[:libant] || options.libant
52
+ config[:libant] = File.expand_path(config[:libant]) if config[:libant]
45
53
  config[:sandbox] = options.sandbox if options.sandbox
46
54
  config[:debug] = options.debug.nil? ? false : true
47
-
48
- # The salesforce URL
49
55
  config[:salesforce_url] =
50
56
  ENV["SFDT_SALESFORCE_URL"] || # First from environment variables
51
57
  config[:salesforce_url] || # Second from the configuration files
52
58
  ( config[:sandbox] == 'prod' ? 'https://login.salesforce.com' : 'https://test.salesforce.com' ) # If not defined anywhere, use defaults
53
59
 
60
+ # Chdir to working directory
61
+ Dir.chdir config[:tmp_dir]
62
+
54
63
  # Initialize
55
64
  sfdt = SalesforceDeployTool::App.new config
56
65
 
57
66
  # Clean all files from repo
58
67
  sfdt.clean_git_dir unless options.append
59
68
 
60
- # Pull the changes
69
+ # output message
61
70
  print "INFO: Pulling changes from #{config[:sandbox]} using url #{config[:salesforce_url]} "
62
71
  print "\n\n" if options.debug
72
+ print "AntLibraryFile: #{config[:libant]}\n" if config[:libant] && options.debug
73
+
74
+ # Pull
63
75
  sfdt.pull
64
76
  sfdt.clean_version
65
77
 
@@ -81,6 +93,7 @@ module SalesforceDeployTool
81
93
  c.option "--run-tests CSV_LIST", "-r CSV_LIST", "a CSV list of individual classes to run tests"
82
94
  c.option "--check-only", "-c", "Check only, don't deploy"
83
95
  c.option "--include CSV_LIST", "-i CSV_LIST", "A CSV list of metadata type to include when creating destructiveChange.xml"
96
+ c.option "--lib-ant PATH", "-l PATH", "Path to the ant-library to use"
84
97
  c.action do |args, options|
85
98
 
86
99
  # short flag mapping
@@ -90,6 +103,7 @@ module SalesforceDeployTool
90
103
  options.exclude = options.x if options.x
91
104
  options.sandbox = options.s if options.s
92
105
  options.include = options.i if options.i
106
+ options.libant = options.l if options.l
93
107
 
94
108
  # Parameter validation:
95
109
  if options.run_all_tests and options.run_tests
@@ -100,15 +114,25 @@ module SalesforceDeployTool
100
114
  puts "error: please specify the sandbox to pull from using --sandbox"
101
115
  exit 1
102
116
  end
117
+
118
+ if options.libant && !File.exists?(File.expand_path options.libant)
119
+ puts "error: ant library file #{options.libant} not found"
120
+ exit 1
121
+ end
122
+
123
+ # Config array
124
+ config[:libant] = config[:libant] || options.libant
125
+ config[:libant] = File.expand_path(config[:libant]) if config[:libant]
103
126
  config[:sandbox] = options.sandbox if options.sandbox
104
127
  config[:debug] = options.debug.nil? ? false : true
105
-
106
- # The salesforce URL
107
128
  config[:salesforce_url] =
108
129
  ENV["SFDT_SALESFORCE_URL"] || # First from environment variables
109
130
  config[:salesforce_url] || # Second from the configuration files
110
131
  ( config[:sandbox] == 'prod' ? 'https://login.salesforce.com' : 'https://test.salesforce.com' ) # If not defined anywhere, use defaults
111
132
 
133
+ # Chdir to working directory
134
+ Dir.chdir config[:tmp_dir]
135
+
112
136
  # Initialize
113
137
  sfdt = SalesforceDeployTool::App.new config
114
138
 
@@ -123,8 +147,11 @@ module SalesforceDeployTool
123
147
  FileUtils.cp_r config[:git_dir],config_tmp[:git_dir]
124
148
  sfdt_tmp = SalesforceDeployTool::App.new config_tmp
125
149
  sfdt_tmp.clean_git_dir
150
+
126
151
  print "INFO: Pulling changes from #{config[:sandbox]} using url #{config[:salesforce_url]} to temporary directory to generate destructiveChanges.xml "
127
152
  print( options.debug.nil? ? "" : "\n\n" )
153
+ print "AntLibraryFile: #{config[:libant]}\n" if config[:libant] && options.debug
154
+
128
155
  sfdt_tmp.pull
129
156
 
130
157
  # Create destructiveChanges.xml
@@ -153,9 +180,12 @@ module SalesforceDeployTool
153
180
  # Check only option:
154
181
  sfdt.check_only = options.check_only
155
182
 
156
- # Push
183
+ # Output message:
157
184
  print( options.run_all_tests.nil? && options.run_tests.nil? ? "INFO: Deploying code to #{config[:sandbox]}: ": "INFO: Deploying and Testing code to #{config[:sandbox]}: " )
158
185
  print( options.debug.nil? ? "" : "\n\n" )
186
+ print "AntLibraryFile: #{config[:libant]}\n" if config[:libant] && options.debug
187
+
188
+ # Push
159
189
  sfdt.push
160
190
  ensure
161
191
  sfdt.clean_version
@@ -47,16 +47,20 @@ def myexec cmd, opts = {}
47
47
  # try to read. Loop every 1 second over and over the same process until
48
48
  # the process finishes or timeout is reached.
49
49
  elapsed = 0
50
- while wait_thr.status and (elapsed = Time.now - start) < opts[:timeout]
50
+ while wait_thr.status && (elapsed = Time.now - start) < opts[:timeout]
51
+
52
+ # Monitor stdout and stderr for changes
51
53
  Kernel.select([stdout,stderr],nil,nil,1)
52
54
 
53
55
  # Read STDIN in a nonblock way.
54
56
  begin
55
- stdout_line = stdout.read_nonblock(100)
56
- print stdout_line if opts[:stdout]
57
- stdout_all += stdout_line
58
- # spin the pinwheel
59
- pinwheel.spin_it if opts[:spinner]
57
+ # Read the full buffer
58
+ while (stdout_line = stdout.read_nonblock(100))
59
+ print stdout_line if opts[:stdout]
60
+ stdout_all += stdout_line
61
+ # spin the pinwheel
62
+ pinwheel.spin_it if opts[:spinner]
63
+ end
60
64
  rescue IO::WaitReadable
61
65
  # Exception raised when there is nothing to read
62
66
  rescue EOFError
@@ -80,6 +84,7 @@ def myexec cmd, opts = {}
80
84
 
81
85
  end
82
86
 
87
+
83
88
  # Log stdout output
84
89
  logger.info "\n" + stdout_all if logger and ! stdout_all.empty?
85
90
  logger.error "\n" + stderr_all if logger and ! stderr_all.empty?
@@ -1,3 +1,3 @@
1
1
  module SalesforceDeployTool
2
- VERSION = "3.1.0"
2
+ VERSION = "3.2.0"
3
3
  end
data/tpl/build.xml.erb CHANGED
@@ -2,12 +2,6 @@
2
2
 
3
3
  <property environment="env"/>
4
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
5
  <target name="deployCode">
12
6
  <sf:deploy
13
7
  username="${env.SF_USERNAME}"
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: 3.1.0
4
+ version: 3.2.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-06-03 00:00:00.000000000 Z
11
+ date: 2015-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,7 +150,6 @@ files:
150
150
  - README.md
151
151
  - Rakefile
152
152
  - bin/sf
153
- - build.xml
154
153
  - features/config.feature
155
154
  - features/misc.feature
156
155
  - features/pull.feature
data/build.xml DELETED
@@ -1 +0,0 @@
1
- deployCode