azdeploy 1.0.17 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/azdeploy.gemspec +2 -2
- data/lib/build.rb +29 -24
- data/lib/transform.rb +73 -29
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8e16b3c1bc5ed7c3cfc80754240cb1b103e84fe
|
4
|
+
data.tar.gz: 5b155e7da4b288d32fb718e05cda47b45fc1aa1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e59d0597681743a899c8827aae9c6a65b2e34d1f14835b443449c91f5d9fde241349ac4f8288ac19392680636915bffd044a70f19d3348d236f4b1a95d814d3
|
7
|
+
data.tar.gz: 4151d85bb31c515ae1a11be5a50ab553509392144615a21a53050560a1e122069c88e10ad19f2ee429e18939328e0d13aee6aeca74cbefe802c04e63bee3670a
|
data/azdeploy.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'azdeploy'
|
3
|
-
s.version = '1.0.
|
4
|
-
s.date = '2015-
|
3
|
+
s.version = '1.0.18'
|
4
|
+
s.date = '2015-08-04'
|
5
5
|
s.summary = 'Setup and scripting support for .Net project builds'
|
6
6
|
s.description = 'Azure Deployment Gem. Provides easy setup and deployment scripting support for .Net project builds'
|
7
7
|
s.authors = ['Suresh Batta']
|
data/lib/build.rb
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
$versionMap = {}
|
2
2
|
|
3
3
|
def copy_output_files(fromDir, filePattern, outDir)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
FileUtils.mkdir_p outDir unless exists?(outDir)
|
5
|
+
Dir.glob(File.join(fromDir, filePattern)){|file|
|
6
|
+
copy(file, outDir) if File.file?(file)
|
7
|
+
}
|
8
8
|
end
|
9
9
|
|
10
10
|
def project_outputs(props)
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
props[:projects].map{ |p| "src/#{p}/bin/#{BUILD_CONFIG}/#{p}.dll" }.
|
12
|
+
concat( props[:projects].map{ |p| "src/#{p}/bin/#{BUILD_CONFIG}/#{p}.exe" } ).
|
13
|
+
find_all{ |path| exists?(path) }
|
14
14
|
end
|
15
15
|
|
16
16
|
def get_commit_hash_and_date
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
begin
|
18
|
+
commit = `git log -1 --pretty=format:%H`
|
19
|
+
git_date = `git log -1 --date=iso --pretty=format:%ad`
|
20
|
+
commit_date = DateTime.parse( git_date ).strftime("%Y-%m-%d %H%M%S")
|
21
|
+
rescue
|
22
|
+
commit = "git unavailable"
|
23
|
+
end
|
24
|
+
|
25
|
+
[commit, commit_date]
|
26
26
|
end
|
27
27
|
|
28
28
|
def add_files stage, what_dlls, nuspec, folder='lib'
|
@@ -48,14 +48,14 @@ def commit_data
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def waitfor(&block)
|
51
|
-
|
51
|
+
checks = 0
|
52
52
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
until block.call || checks >10
|
54
|
+
sleep 0.5
|
55
|
+
checks += 1
|
56
|
+
end
|
57
57
|
|
58
|
-
|
58
|
+
raise 'Waitfor timeout expired. Make sure that you aren\'t running something from the build output folders, or that you have browsed to it through Explorer.' if checks > 10
|
59
59
|
end
|
60
60
|
|
61
61
|
def cleantask(props)
|
@@ -78,6 +78,11 @@ def cleantask(props)
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
+
def restore_nuget(nuget_exe)
|
82
|
+
sh 'powershell', '-Command', "& { Invoke-RestMethod https://www.nuget.org/nuget.exe -OutFile '#{nuget_exe}' }"
|
83
|
+
sh nuget_exe, 'restore', "src/#{PRODUCT}.sln"
|
84
|
+
end
|
85
|
+
|
81
86
|
def restore_project_pkgs(proj)
|
82
87
|
msbuild :nuget_restore do |msb|
|
83
88
|
msb.use :net4
|
@@ -88,8 +93,8 @@ end
|
|
88
93
|
|
89
94
|
def clean_build(msb, solution)
|
90
95
|
msb.properties :Configuration => 'Release',
|
91
|
-
|
92
|
-
|
96
|
+
:Platform => 'Any CPU',
|
97
|
+
:VisualStudioVersion => '12.0'
|
93
98
|
msb.use :net4
|
94
99
|
msb.solution = solution
|
95
100
|
end
|
data/lib/transform.rb
CHANGED
@@ -5,7 +5,12 @@ class Transform
|
|
5
5
|
attr_accessor :table
|
6
6
|
attr_accessor :settings
|
7
7
|
attr_accessor :config_files
|
8
|
-
|
8
|
+
|
9
|
+
NO = 'no'
|
10
|
+
ROWKEY = 'RowKey'
|
11
|
+
SETTING = 'setting'
|
12
|
+
VALUE = 'value'
|
13
|
+
|
9
14
|
def get(key)
|
10
15
|
begin
|
11
16
|
result = @svc.get_entity(@table, @env, key)
|
@@ -34,8 +39,8 @@ class Transform
|
|
34
39
|
def get_value(key)
|
35
40
|
value = ''
|
36
41
|
@settings.each { |i|
|
37
|
-
if i.properties[
|
38
|
-
value = i.properties[
|
42
|
+
if i.properties[ROWKEY] == key
|
43
|
+
value = i.properties[SETTING]
|
39
44
|
break
|
40
45
|
end
|
41
46
|
}
|
@@ -43,23 +48,35 @@ class Transform
|
|
43
48
|
value
|
44
49
|
end
|
45
50
|
|
51
|
+
def transform_connstring(connstr)
|
52
|
+
@config_files.each{|file|
|
53
|
+
doc = Nokogiri::XML(File.read(file))
|
54
|
+
puts "Processing file: #{file}"
|
55
|
+
node = doc.at_css "appSettings/add[@key='connectionString']"
|
56
|
+
if !node.nil?
|
57
|
+
node[VALUE] = connstr
|
58
|
+
File.write(file, doc.to_xml)
|
59
|
+
end
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
46
63
|
def transform_appsettings
|
47
64
|
# go to each file and replace value of matching appSettings key
|
48
65
|
@config_files.each{|file|
|
49
66
|
doc = Nokogiri::XML(File.read(file))
|
50
67
|
puts "Processing file: #{file}"
|
51
68
|
@settings.each { |i|
|
52
|
-
key = i.properties[
|
69
|
+
key = i.properties[ROWKEY]
|
53
70
|
node = doc.at_css "appSettings/add[@key='#{key}']"
|
54
71
|
if !node.nil?
|
55
|
-
oldVal = node[
|
72
|
+
oldVal = node[VALUE]
|
56
73
|
#puts "Old value: #{oldVal}"
|
57
|
-
node[
|
58
|
-
newVal = node[
|
74
|
+
node[VALUE] = i.properties[SETTING]
|
75
|
+
newVal = node[VALUE]
|
59
76
|
#puts "New value: #{newVal}"
|
77
|
+
File.write(file, doc.to_xml)
|
60
78
|
end
|
61
|
-
}
|
62
|
-
File.write(file, doc.to_xml)
|
79
|
+
}
|
63
80
|
}
|
64
81
|
end
|
65
82
|
|
@@ -68,13 +85,15 @@ class Transform
|
|
68
85
|
doc = Nokogiri::XML(File.read(file))
|
69
86
|
doc.xpath('//system.serviceModel').each do |node|
|
70
87
|
#puts node
|
71
|
-
if
|
72
|
-
|
73
|
-
|
74
|
-
|
88
|
+
if !node.nil?
|
89
|
+
if file.end_with?('app.config') || file.end_with?('App.config')
|
90
|
+
node.replace(get_value('system.ServiceModel.Client'))
|
91
|
+
elsif file.end_with?('Web.config')
|
92
|
+
node.replace(get_value('system.ServiceModel.Service'))
|
93
|
+
end
|
94
|
+
File.write(file, doc.to_xml)
|
75
95
|
end
|
76
96
|
end
|
77
|
-
File.write(file, doc.to_xml)
|
78
97
|
}
|
79
98
|
end
|
80
99
|
|
@@ -193,23 +212,53 @@ class Transform
|
|
193
212
|
end
|
194
213
|
|
195
214
|
def transform
|
196
|
-
|
215
|
+
|
216
|
+
# find all App.config and web.config files
|
217
|
+
@config_files = Dir.glob('**/app.config')
|
218
|
+
@config_files.concat(Dir.glob('**/appSettings.config'))
|
219
|
+
@config_files.concat(Dir.glob('**/web.config'))
|
220
|
+
|
221
|
+
settings_account_name = ENV['SettingsAccount'] || NO
|
222
|
+
if (settings_account_name == NO)
|
223
|
+
puts "No settings storage account name found"
|
224
|
+
return false
|
225
|
+
end
|
226
|
+
settings_access_key = ENV['SettingsAccountKey'] || NO
|
227
|
+
if (settings_access_key == NO)
|
228
|
+
puts "No settings storage account key found"
|
229
|
+
return false
|
230
|
+
end
|
231
|
+
config_table = ENV['ConfigSettingsTable'] || NO
|
232
|
+
if (config_table == NO)
|
233
|
+
puts "No configuration table found"
|
234
|
+
return false
|
235
|
+
end
|
236
|
+
|
237
|
+
puts 'updating settings connection string...'
|
238
|
+
settings_connstr = "DefaultEndpointsProtocol=https;AccountName=#{settings_account_name};AccountKey=#{settings_access_key}"
|
239
|
+
should_update_settings_connstr = ENV['should_update_settings_connstr'] || NO
|
240
|
+
if should_update_settings_connstr == NO
|
241
|
+
puts 'Flag for Setttings Connection String Update not set.'
|
242
|
+
else
|
243
|
+
transform_connstring(settings_connstr)
|
244
|
+
end
|
245
|
+
|
197
246
|
# environment invoked
|
198
|
-
@env = ENV['env'] ||
|
199
|
-
if @env ==
|
247
|
+
@env = ENV['env'] || NO
|
248
|
+
if @env == NO
|
200
249
|
puts 'Environment name required to transform. No configuration changes will be done...'
|
201
250
|
return false
|
202
251
|
end
|
203
|
-
|
204
|
-
is_service = ENV['ServiceName'] ||
|
205
|
-
puts 'Target to transform is not a service...' if is_service ==
|
252
|
+
|
253
|
+
is_service = ENV['ServiceName'] || NO
|
254
|
+
puts 'Target to transform is not a service...' if is_service == NO
|
206
255
|
|
207
256
|
puts "Transforming config for environment: #{@env} ..."
|
208
257
|
|
209
258
|
# azure table storage account where settings reside
|
210
|
-
Azure.config.storage_account_name =
|
211
|
-
Azure.config.storage_access_key =
|
212
|
-
@table =
|
259
|
+
Azure.config.storage_account_name = settings_account_name
|
260
|
+
Azure.config.storage_access_key = settings_access_key
|
261
|
+
@table = config_table
|
213
262
|
|
214
263
|
# table service
|
215
264
|
@svc = Azure::TableService.new
|
@@ -217,11 +266,6 @@ class Transform
|
|
217
266
|
# get all settings for environment
|
218
267
|
@settings = get_all
|
219
268
|
|
220
|
-
# find all App.config and web.config files
|
221
|
-
@config_files = Dir.glob('**/app.config')
|
222
|
-
@config_files.concat(Dir.glob('**/appSettings.config'))
|
223
|
-
@config_files.concat(Dir.glob('**/web.config'))
|
224
|
-
|
225
269
|
if is_service
|
226
270
|
|
227
271
|
puts 'Obtaining cloud configuration templates...'
|
@@ -246,7 +290,7 @@ class Transform
|
|
246
290
|
transform_servicemodelconfig
|
247
291
|
|
248
292
|
end
|
249
|
-
|
293
|
+
|
250
294
|
puts 'Replacing app settings...'
|
251
295
|
transform_appsettings
|
252
296
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: azdeploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Suresh Batta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Azure Deployment Gem. Provides easy setup and deployment scripting support
|
14
14
|
for .Net project builds
|