This repository has been archived by the owner on May 1, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathrakefile.rb
289 lines (212 loc) · 7.18 KB
/
rakefile.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
require 'json'
APIKEY = ENV['api_key'].nil? ? '' : ENV['api_key']
BUILD_VERSION = ENV['version'].nil? ? '1.1.4' : ENV['version']
puts "Build version is #{BUILD_VERSION}"
TEMPLATE_VERSION = '1.0.1'
COMPILE_TARGET = ENV['config'].nil? ? "debug" : ENV['config']
RESULTS_DIR = "artifacts"
tc_build_number = ENV["APPVEYOR_BUILD_NUMBER"]
build_revision = tc_build_number || Time.new.strftime('5%H%M')
build_number = "#{BUILD_VERSION}.#{build_revision}"
BUILD_NUMBER = build_number
CI = ENV["CI"].nil? ? false : true
task :ci => [:version, :commands, :compile, :pack, :appVeyorPush]
#task :ci => [:default, :commands, :pack, :appVeyorPush]
task :default => [:version, :test, :integrationtests, :commands]
task :full => [:default, :storyteller]
desc "Prepares the working directory for a new build"
task :clean do
#TODO: do any other tasks required to clean/prepare the working directory
FileUtils.rm_rf RESULTS_DIR
FileUtils.mkdir_p RESULTS_DIR
end
desc "Update the version information for the build"
task :version do
asm_version = build_number
begin
commit = `git log -1 --pretty=format:%H`
rescue
commit = "git unavailable"
end
#puts "##teamcity[buildNumber '#{build_number}']" unless tc_build_number.nil?
#puts "Version: #{build_number}" if tc_build_number.nil?
options = {
:description => '',
:product_name => 'JasperFx Applications',
:copyright => 'Copyright 2020 Jeremy D. Miller, et al. All rights reserved.',
:trademark => commit,
:version => asm_version,
:file_version => build_number,
:informational_version => asm_version
}
puts "Writing src/CommonAssemblyInfo.cs..."
File.open('src/CommonAssemblyInfo.cs', 'w') do |file|
file.write "using System.Reflection;\n"
file.write "using System.Runtime.InteropServices;\n"
file.write "[assembly: AssemblyProduct(\"#{options[:product_name]}\")]\n"
file.write "[assembly: AssemblyCopyright(\"#{options[:copyright]}\")]\n"
file.write "[assembly: AssemblyTrademark(\"#{options[:trademark]}\")]\n"
file.write "[assembly: AssemblyVersion(\"#{options[:version]}\")]\n"
file.write "[assembly: AssemblyFileVersion(\"#{options[:file_version]}\")]\n"
file.write "[assembly: AssemblyInformationalVersion(\"#{options[:informational_version]}\")]\n"
end
end
desc 'Compile the code'
task :compile => [:clean] do
sh "dotnet restore Jasper.sln"
end
desc 'Run the unit tests'
task :test => [:compile] do
FileUtils.mkdir_p RESULTS_DIR
sh "dotnet test src/Jasper.Testing/Jasper.Testing.csproj --no-restore"
sh "dotnet test src/Jasper.Http.Testing/Jasper.Http.Testing.csproj --no-restore"
sh "dotnet test src/Jasper.TestSupport.Tests/Jasper.TestSupport.Tests.csproj --no-restore"
end
desc "Integration Tests"
task :integrationtests => [:compile] do
if OS.windows?
sh "docker-switch-linux"
end
sh "docker-compose up -d"
#sh "dotnet test src/Jasper.RabbitMQ.Tests/Jasper.RabbitMQ.Tests.csproj --no-restore"
sh "dotnet test src/Jasper.Persistence.Testing/Jasper.Persistence.Testing.csproj --no-restore"
end
desc 'npm install for Diagnostics'
task :npm_install do
Dir.chdir("src/Jasper.Diagnostics") do
sh "yarn"
end
end
desc 'Try out commands'
task :commands do
# Dir.chdir("src/Subscriber") do
# sh "dotnet run -- ?"
# sh "dotnet run -- export-json-schema obj/schema"
# end
Dir.chdir("src/ConsoleApp") do
sh "dotnet run -- codegen preview"
sh "dotnet run -- codegen test"
sh "dotnet run -- codegen write"
sh "dotnet run -- codegen delete"
end
end
desc 'Build Nuspec packages'
task :pack do
Dir.chdir "templates" do
sh "nuget pack jaspertemplates.nuspec -Version #{TEMPLATE_VERSION}"
end
pack_nuget 'Jasper'
pack_nuget 'Jasper.Persistence.Marten'
pack_nuget 'Jasper.Persistence.SqlServer'
pack_nuget 'Jasper.Persistence.Database'
pack_nuget 'Jasper.Persistence.Postgresql'
#pack_nuget 'Jasper.TestSupport.Storyteller'
#pack_nuget 'Jasper.TestSupport.Alba'
pack_nuget 'Jasper.RabbitMQ'
pack_nuget 'Jasper.AzureServiceBus'
pack_nuget 'Jasper.JsonCommands'
pack_nuget 'Jasper.Persistence.EntityFrameworkCore'
pack_nuget 'Jasper.Http'
end
def pack_nuget(project)
file = "src/#{project}/#{project}.csproj"
sh "dotnet pack #{file} -o ./artifacts --configuration Release --no-restore"
end
desc "Pushes the Nuget's to AppVeyor"
task :appVeyorPush do
if !CI
puts "Not on CI, skipping artifact upload"
next
end
sh "appveyor PushArtifact templates/JasperTemplates.#{TEMPLATE_VERSION}.nupkg"
Dir.glob('./artifacts/*.*') do |file|
full_path = File.expand_path file
full_path = full_path.gsub('/', '\\') if OS.windows?
cmd = "appveyor PushArtifact #{full_path}"
puts cmd
sh cmd
end
end
desc "Launches VS to the Jasper solution file"
task :sln do
sh "start Jasper.sln"
end
desc "Run the storyteller specifications"
task :storyteller => [:compile] do
sh "docker-compose up -d"
result_output = File.expand_path "#{RESULTS_DIR}/stresults.htm"
puts "appveyor AddTest Testing -Framework Storyteller -FileName SomeFile -Outcome Skipped"
Dir.chdir("src/StorytellerSpecs") do
system "dotnet run -- run -r #{result_output} --tracing verbose"
end
end
desc "Open the storyteller specification editor"
task :open_st do
sh "dotnet restore Jasper.sln"
Dir.chdir("src/StorytellerSpecs") do
system "dotnet storyteller"
end
end
"Gets the documentation assets ready"
task :prepare_docs do
sh "dotnet restore docs.csproj"
# this will grow to include the storyteller specs
end
"Launches the documentation project in editable mode"
task :docs => [:prepare_docs] do
sh "dotnet stdocs run -v #{BUILD_VERSION} --code src JasperSamples"
end
"Exports the documentation to jasperfx.github.io - requires Git access to that repo though!"
task :publish => [:prepare_docs] do
if Dir.exists? 'doc-target'
FileUtils.rm_rf 'doc-target'
end
Dir.mkdir 'doc-target'
sh "git clone https://github.com/jasperfx/jasperfx.github.io.git doc-target"
sh "dotnet stdocs export doc-target Website --version #{BUILD_VERSION} --code src JasperSamples"
Dir.chdir "doc-target" do
sh "git add --all"
sh "git commit -a -m \"Documentation Update for #{BUILD_VERSION}\" --allow-empty"
sh "git push origin master"
end
end
desc 'Build and test templates'
task :templates => [:clean] do
Dir.chdir "templates" do
sh "nuget pack jaspertemplates.nuspec -Version #{TEMPLATE_VERSION}"
end
if Dir.exists? 'template-target'
FileUtils.rm_rf 'template-target'
end
Dir.mkdir 'template-target'
Dir.chdir "template-target" do
sh "dotnet new --uninstall JasperTemplates"
sh "dotnet new --uninstall jasper.service"
sh "dotnet new --uninstall jasper.rabbitmq"
sh "dotnet new --uninstall jasper.azureservicebus"
sh "dotnet new -i ../templates/JasperTemplates.#{TEMPLATE_VERSION}.nupkg"
sh "dotnet new jasper.rabbitmq"
sh "dotnet restore"
sh "dotnet run"
end
end
def load_project_file(project)
File.open(project) do |file|
file_contents = File.read(file, :encoding => 'bom|utf-8')
JSON.parse(file_contents)
end
end
module OS
def OS.windows?
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
end
def OS.mac?
(/darwin/ =~ RUBY_PLATFORM) != nil
end
def OS.unix?
!OS.windows?
end
def OS.linux?
OS.unix? and not OS.mac?
end
end