makit 0.0.111 → 0.0.112
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/README.md +41 -41
- data/exe/makit +5 -5
- data/lib/makit/apache.rb +28 -28
- data/lib/makit/cli/build_commands.rb +500 -500
- data/lib/makit/cli/generators/base_generator.rb +74 -74
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
- data/lib/makit/cli/generators/generator_factory.rb +49 -49
- data/lib/makit/cli/generators/node_generator.rb +50 -50
- data/lib/makit/cli/generators/ruby_generator.rb +77 -77
- data/lib/makit/cli/generators/rust_generator.rb +50 -50
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -40
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
- data/lib/makit/cli/main.rb +62 -62
- data/lib/makit/cli/project_commands.rb +868 -868
- data/lib/makit/cli/repository_commands.rb +661 -661
- data/lib/makit/cli/utility_commands.rb +521 -521
- data/lib/makit/commands/factory.rb +359 -359
- data/lib/makit/commands/middleware/base.rb +73 -73
- data/lib/makit/commands/middleware/cache.rb +248 -248
- data/lib/makit/commands/middleware/command_logger.rb +320 -323
- data/lib/makit/commands/middleware/unified_logger.rb +243 -243
- data/lib/makit/commands/middleware/validator.rb +269 -269
- data/lib/makit/commands/request.rb +254 -254
- data/lib/makit/commands/result.rb +323 -323
- data/lib/makit/commands/runner.rb +337 -317
- data/lib/makit/commands/strategies/base.rb +160 -160
- data/lib/makit/commands/strategies/synchronous.rb +134 -134
- data/lib/makit/commands.rb +51 -42
- data/lib/makit/configuration/gitlab_helper.rb +60 -60
- data/lib/makit/configuration/project.rb +127 -127
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration.rb +14 -14
- data/lib/makit/content/default_gitignore.rb +7 -7
- data/lib/makit/content/default_rakefile.rb +13 -13
- data/lib/makit/content/gem_rakefile.rb +16 -16
- data/lib/makit/context.rb +1 -1
- data/lib/makit/data.rb +49 -49
- data/lib/makit/directories.rb +141 -141
- data/lib/makit/directory.rb +262 -262
- data/lib/makit/docs/files.rb +89 -89
- data/lib/makit/docs/rake.rb +102 -102
- data/lib/makit/dotnet/project.rb +153 -153
- data/lib/makit/dotnet/solution.rb +38 -38
- data/lib/makit/dotnet/solution_classlib.rb +239 -239
- data/lib/makit/dotnet/solution_console.rb +264 -264
- data/lib/makit/dotnet/solution_maui.rb +354 -354
- data/lib/makit/dotnet/solution_wasm.rb +275 -275
- data/lib/makit/dotnet/solution_wpf.rb +304 -304
- data/lib/makit/dotnet.rb +102 -102
- data/lib/makit/email.rb +90 -90
- data/lib/makit/environment.rb +142 -142
- data/lib/makit/examples/runner.rb +370 -370
- data/lib/makit/exceptions.rb +45 -45
- data/lib/makit/fileinfo.rb +24 -24
- data/lib/makit/files.rb +43 -43
- data/lib/makit/gems.rb +40 -40
- data/lib/makit/git/cli.rb +54 -54
- data/lib/makit/git/repository.rb +90 -90
- data/lib/makit/git.rb +98 -98
- data/lib/makit/gitlab_runner.rb +59 -59
- data/lib/makit/humanize.rb +137 -137
- data/lib/makit/indexer.rb +47 -47
- data/lib/makit/logging/configuration.rb +305 -305
- data/lib/makit/logging/formatters/base.rb +39 -39
- data/lib/makit/logging/formatters/console_formatter.rb +140 -127
- data/lib/makit/logging/formatters/json_formatter.rb +65 -65
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
- data/lib/makit/logging/formatters/text_formatter.rb +64 -64
- data/lib/makit/logging/log_request.rb +115 -115
- data/lib/makit/logging/logger.rb +163 -159
- data/lib/makit/logging/sinks/console.rb +72 -72
- data/lib/makit/logging/sinks/file_sink.rb +92 -92
- data/lib/makit/logging/sinks/unified_file_sink.rb +303 -303
- data/lib/makit/logging.rb +530 -521
- data/lib/makit/markdown.rb +75 -75
- data/lib/makit/mp/basic_object_mp.rb +17 -17
- data/lib/makit/mp/command_mp.rb +13 -13
- data/lib/makit/mp/command_request.mp.rb +17 -17
- data/lib/makit/mp/project_mp.rb +199 -199
- data/lib/makit/mp/string_mp.rb +193 -348
- data/lib/makit/nuget.rb +74 -74
- data/lib/makit/port.rb +32 -32
- data/lib/makit/process.rb +163 -163
- data/lib/makit/protoc.rb +107 -107
- data/lib/makit/rake/cli.rb +196 -196
- data/lib/makit/rake.rb +25 -25
- data/lib/makit/ruby/cli.rb +185 -185
- data/lib/makit/ruby.rb +25 -25
- data/lib/makit/secrets.rb +51 -51
- data/lib/makit/serializer.rb +130 -117
- data/lib/makit/services/builder.rb +186 -186
- data/lib/makit/services/error_handler.rb +226 -226
- data/lib/makit/services/repository_manager.rb +229 -229
- data/lib/makit/services/validator.rb +112 -112
- data/lib/makit/setup/classlib.rb +53 -53
- data/lib/makit/setup/gem.rb +30 -17
- data/lib/makit/setup/runner.rb +45 -40
- data/lib/makit/setup.rb +5 -0
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -126
- data/lib/makit/symbols.rb +170 -161
- data/lib/makit/task_info.rb +128 -128
- data/lib/makit/tasks/at_exit.rb +13 -13
- data/lib/makit/tasks/build.rb +19 -18
- data/lib/makit/tasks/clean.rb +11 -11
- data/lib/makit/tasks/hook_manager.rb +393 -239
- data/lib/makit/tasks/init.rb +47 -47
- data/lib/makit/tasks/integrate.rb +17 -15
- data/lib/makit/tasks/pull_incoming.rb +11 -12
- data/lib/makit/tasks/setup.rb +6 -6
- data/lib/makit/tasks/sync.rb +12 -11
- data/lib/makit/tasks/tag.rb +15 -0
- data/lib/makit/tasks/task_monkey_patch.rb +79 -79
- data/lib/makit/tasks.rb +10 -0
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/makit.v1_pb.rb +34 -34
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/version.rb +5 -5
- data/lib/makit/version_util.rb +21 -0
- data/lib/makit/wix.rb +95 -95
- data/lib/makit/yaml.rb +29 -29
- data/lib/makit/zip.rb +17 -17
- data/lib/makit copy.rb +44 -0
- data/lib/makit.rb +40 -8
- metadata +50 -7
- data/lib/makit/command_runner.rb +0 -463
- data/lib/makit/commands/compatibility.rb +0 -365
- data/lib/makit/task_hooks.rb +0 -125
@@ -1,275 +1,275 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Makit
|
4
|
-
class DotNet
|
5
|
-
class SolutionWasm
|
6
|
-
def self.setup(name)
|
7
|
-
Makit::DotNet::Project.new_project("blazorwasm", name, "source/#{name}", "--framework net8.0")
|
8
|
-
Makit::DotNet::Project.new_project("TUnit", "#{name}.Tests", "tests/#{name}")
|
9
|
-
Makit::DotNet::Project.add_reference("tests/#{name}/#{name}.Tests.csproj", "source/#{name}/#{name}.csproj")
|
10
|
-
|
11
|
-
# Generate additional project files
|
12
|
-
generate_rakefile(name)
|
13
|
-
generate_gitlab_ci(name)
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.generate_rakefile(project_name)
|
17
|
-
rakefile_content = <<~RUBY
|
18
|
-
# frozen_string_literal: true
|
19
|
-
|
20
|
-
require "makit"
|
21
|
-
|
22
|
-
#
|
23
|
-
# #{project_name} WebAssembly Project Rakefile
|
24
|
-
#
|
25
|
-
desc "default task - builds and tests the WebAssembly project"
|
26
|
-
task :default => [:build, :test]
|
27
|
-
|
28
|
-
desc "build the #{project_name} WebAssembly project"
|
29
|
-
task :build do
|
30
|
-
puts "Building #{project_name} WebAssembly project..."
|
31
|
-
project_path = "source/#{project_name}/#{project_name}.csproj"
|
32
|
-
#{" "}
|
33
|
-
if File.exist?(project_path)
|
34
|
-
sh "dotnet build \#{project_path} --configuration Release"
|
35
|
-
puts "WebAssembly project build completed successfully!"
|
36
|
-
else
|
37
|
-
puts "Error: Project file not found at \#{project_path}"
|
38
|
-
exit 1
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
desc "test the #{project_name} WebAssembly project"
|
43
|
-
task :test do
|
44
|
-
puts "Testing #{project_name} WebAssembly project..."
|
45
|
-
project_path = "source/#{project_name}/#{project_name}.csproj"
|
46
|
-
#{" "}
|
47
|
-
if File.exist?(project_path)
|
48
|
-
sh "dotnet test \#{project_path} --configuration Release --verbosity normal"
|
49
|
-
puts "WebAssembly project tests completed successfully!"
|
50
|
-
else
|
51
|
-
puts "Error: Project file not found at \#{project_path}"
|
52
|
-
exit 1
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
desc "run the #{project_name} WebAssembly project in development mode"
|
57
|
-
task :run => [:build] do
|
58
|
-
puts "Running #{project_name} WebAssembly project..."
|
59
|
-
project_path = "source/#{project_name}/#{project_name}.csproj"
|
60
|
-
#{" "}
|
61
|
-
if File.exist?(project_path)
|
62
|
-
sh "dotnet run --project \#{project_path} --configuration Debug"
|
63
|
-
else
|
64
|
-
puts "Error: Project file not found at \#{project_path}"
|
65
|
-
exit 1
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
desc "clean build artifacts"
|
70
|
-
task :clean do
|
71
|
-
puts "Cleaning WebAssembly project build artifacts..."
|
72
|
-
sh "dotnet clean source/#{project_name}/#{project_name}.csproj"
|
73
|
-
puts "Clean completed successfully!"
|
74
|
-
end
|
75
|
-
|
76
|
-
desc "restore packages"
|
77
|
-
task :restore do
|
78
|
-
puts "Restoring WebAssembly project packages..."
|
79
|
-
sh "dotnet restore source/#{project_name}/#{project_name}.csproj"
|
80
|
-
puts "Restore completed successfully!"
|
81
|
-
end
|
82
|
-
|
83
|
-
desc "publish the WebAssembly project"
|
84
|
-
task :publish do
|
85
|
-
puts "Publishing #{project_name} WebAssembly project..."
|
86
|
-
output_dir = "artifacts/publish/#{project_name}"
|
87
|
-
FileUtils.mkdir_p(output_dir)
|
88
|
-
sh "dotnet publish source/#{project_name}/#{project_name}.csproj --configuration Release --output \#{output_dir}"
|
89
|
-
puts "WebAssembly project publish completed successfully! Output: \#{output_dir}"
|
90
|
-
end
|
91
|
-
|
92
|
-
desc "serve the published WebAssembly project"
|
93
|
-
task :serve => [:publish] do
|
94
|
-
puts "Serving #{project_name} WebAssembly project..."
|
95
|
-
output_dir = "artifacts/publish/#{project_name}"
|
96
|
-
#{" "}
|
97
|
-
if Dir.exist?(output_dir)
|
98
|
-
puts "Starting web server on http://localhost:8080"
|
99
|
-
puts "Press Ctrl+C to stop the server"
|
100
|
-
sh "cd \#{output_dir} && python3 -m http.server 8080"
|
101
|
-
else
|
102
|
-
puts "Error: Published output directory not found at \#{output_dir}"
|
103
|
-
exit 1
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
desc "build and deploy to GitHub Pages"
|
108
|
-
task :deploy_github_pages => [:publish] do
|
109
|
-
puts "Deploying #{project_name} to GitHub Pages..."
|
110
|
-
output_dir = "artifacts/publish/#{project_name}"
|
111
|
-
#{" "}
|
112
|
-
if Dir.exist?(output_dir)
|
113
|
-
# Copy published files to docs directory for GitHub Pages
|
114
|
-
docs_dir = "docs"
|
115
|
-
FileUtils.rm_rf(docs_dir) if Dir.exist?(docs_dir)
|
116
|
-
FileUtils.cp_r(output_dir, docs_dir)
|
117
|
-
#{" "}
|
118
|
-
puts "Files copied to \#{docs_dir} for GitHub Pages deployment"
|
119
|
-
puts "Commit and push changes to deploy to GitHub Pages"
|
120
|
-
else
|
121
|
-
puts "Error: Published output directory not found at \#{output_dir}"
|
122
|
-
exit 1
|
123
|
-
end
|
124
|
-
end
|
125
|
-
RUBY
|
126
|
-
|
127
|
-
File.write("Rakefile", rakefile_content)
|
128
|
-
end
|
129
|
-
|
130
|
-
def self.generate_gitlab_ci(project_name)
|
131
|
-
gitlab_ci_content = <<~YAML
|
132
|
-
# #{project_name} WebAssembly Project GitLab CI/CD Pipeline
|
133
|
-
# frozen_string_literal: true
|
134
|
-
|
135
|
-
stages:
|
136
|
-
- build
|
137
|
-
- test
|
138
|
-
- publish
|
139
|
-
- deploy
|
140
|
-
|
141
|
-
variables:
|
142
|
-
DOTNET_VERSION: "8.0.x"
|
143
|
-
PROJECT_PATH: "source/#{project_name}/#{project_name}.csproj"
|
144
|
-
BUILD_CONFIGURATION: "Release"
|
145
|
-
TEST_RESULTS_DIR: "test-results"
|
146
|
-
COVERAGE_DIR: "coverage"
|
147
|
-
PUBLISH_DIR: "artifacts/publish"
|
148
|
-
|
149
|
-
# Cache NuGet packages between jobs
|
150
|
-
cache:
|
151
|
-
paths:
|
152
|
-
- "**/bin/"
|
153
|
-
- "**/obj/"
|
154
|
-
- "**/packages/"
|
155
|
-
- "~/.nuget/packages/"
|
156
|
-
|
157
|
-
# Build job
|
158
|
-
build:
|
159
|
-
stage: build
|
160
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
161
|
-
script:
|
162
|
-
- echo "Building #{project_name} WebAssembly project..."
|
163
|
-
- dotnet --version
|
164
|
-
- dotnet restore $PROJECT_PATH
|
165
|
-
- dotnet build $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-restore
|
166
|
-
- echo "WebAssembly project build completed successfully!"
|
167
|
-
artifacts:
|
168
|
-
paths:
|
169
|
-
- "**/bin/"
|
170
|
-
- "**/obj/"
|
171
|
-
expire_in: 1 week
|
172
|
-
when: on_success
|
173
|
-
rules:
|
174
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
175
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
176
|
-
- if: $CI_COMMIT_TAG
|
177
|
-
|
178
|
-
# Test job
|
179
|
-
test:
|
180
|
-
stage: test
|
181
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
182
|
-
dependencies:
|
183
|
-
- build
|
184
|
-
script:
|
185
|
-
- echo "Testing #{project_name} WebAssembly project..."
|
186
|
-
- dotnet test $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-build --verbosity normal
|
187
|
-
- echo "WebAssembly project tests completed successfully!"
|
188
|
-
artifacts:
|
189
|
-
paths:
|
190
|
-
- $TEST_RESULTS_DIR/
|
191
|
-
- $COVERAGE_DIR/
|
192
|
-
reports:
|
193
|
-
junit: $TEST_RESULTS_DIR/*.xml
|
194
|
-
expire_in: 1 week
|
195
|
-
when: always
|
196
|
-
rules:
|
197
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
198
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
199
|
-
- if: $CI_COMMIT_TAG
|
200
|
-
|
201
|
-
# Publish job
|
202
|
-
publish:
|
203
|
-
stage: publish
|
204
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
205
|
-
dependencies:
|
206
|
-
- test
|
207
|
-
script:
|
208
|
-
- echo "Publishing #{project_name} WebAssembly project..."
|
209
|
-
- mkdir -p $PUBLISH_DIR
|
210
|
-
- dotnet publish $PROJECT_PATH --configuration $BUILD_CONFIGURATION --output $PUBLISH_DIR/#{project_name}
|
211
|
-
- echo "WebAssembly project publish completed successfully!"
|
212
|
-
artifacts:
|
213
|
-
paths:
|
214
|
-
- $PUBLISH_DIR/
|
215
|
-
expire_in: 1 month
|
216
|
-
when: on_success
|
217
|
-
rules:
|
218
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
219
|
-
- if: $CI_COMMIT_TAG
|
220
|
-
|
221
|
-
# Deploy to GitLab Pages
|
222
|
-
deploy_pages:
|
223
|
-
stage: deploy
|
224
|
-
image: alpine:latest
|
225
|
-
dependencies:
|
226
|
-
- publish
|
227
|
-
script:
|
228
|
-
- echo "Deploying #{project_name} to GitLab Pages..."
|
229
|
-
- apk add --no-cache rsync
|
230
|
-
- rsync -av $PUBLISH_DIR/#{project_name}/ public/
|
231
|
-
- echo "Deployment to GitLab Pages completed!"
|
232
|
-
artifacts:
|
233
|
-
paths:
|
234
|
-
- public
|
235
|
-
rules:
|
236
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
237
|
-
|
238
|
-
# Code quality job (optional)
|
239
|
-
code_quality:
|
240
|
-
stage: test
|
241
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
242
|
-
dependencies:
|
243
|
-
- build
|
244
|
-
script:
|
245
|
-
- echo "Running code quality checks..."
|
246
|
-
- dotnet tool install --global dotnet-format
|
247
|
-
- dotnet format --verify-no-changes $PROJECT_PATH
|
248
|
-
- echo "Code quality checks completed!"
|
249
|
-
allow_failure: true
|
250
|
-
rules:
|
251
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
252
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
253
|
-
|
254
|
-
# Security scan job (optional)
|
255
|
-
security_scan:
|
256
|
-
stage: test
|
257
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
258
|
-
dependencies:
|
259
|
-
- build
|
260
|
-
script:
|
261
|
-
- echo "Running security scan..."
|
262
|
-
- dotnet tool install --global dotnet-outdated-tool
|
263
|
-
- dotnet outdated $PROJECT_PATH
|
264
|
-
- echo "Security scan completed!"
|
265
|
-
allow_failure: true
|
266
|
-
rules:
|
267
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
268
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
269
|
-
YAML
|
270
|
-
|
271
|
-
File.write(".gitlab-ci.yml", gitlab_ci_content)
|
272
|
-
end
|
273
|
-
end
|
274
|
-
end
|
275
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Makit
|
4
|
+
class DotNet
|
5
|
+
class SolutionWasm
|
6
|
+
def self.setup(name)
|
7
|
+
Makit::DotNet::Project.new_project("blazorwasm", name, "source/#{name}", "--framework net8.0")
|
8
|
+
Makit::DotNet::Project.new_project("TUnit", "#{name}.Tests", "tests/#{name}")
|
9
|
+
Makit::DotNet::Project.add_reference("tests/#{name}/#{name}.Tests.csproj", "source/#{name}/#{name}.csproj")
|
10
|
+
|
11
|
+
# Generate additional project files
|
12
|
+
generate_rakefile(name)
|
13
|
+
generate_gitlab_ci(name)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.generate_rakefile(project_name)
|
17
|
+
rakefile_content = <<~RUBY
|
18
|
+
# frozen_string_literal: true
|
19
|
+
|
20
|
+
require "makit"
|
21
|
+
|
22
|
+
#
|
23
|
+
# #{project_name} WebAssembly Project Rakefile
|
24
|
+
#
|
25
|
+
desc "default task - builds and tests the WebAssembly project"
|
26
|
+
task :default => [:build, :test]
|
27
|
+
|
28
|
+
desc "build the #{project_name} WebAssembly project"
|
29
|
+
task :build do
|
30
|
+
puts "Building #{project_name} WebAssembly project..."
|
31
|
+
project_path = "source/#{project_name}/#{project_name}.csproj"
|
32
|
+
#{" "}
|
33
|
+
if File.exist?(project_path)
|
34
|
+
sh "dotnet build \#{project_path} --configuration Release"
|
35
|
+
puts "WebAssembly project build completed successfully!"
|
36
|
+
else
|
37
|
+
puts "Error: Project file not found at \#{project_path}"
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "test the #{project_name} WebAssembly project"
|
43
|
+
task :test do
|
44
|
+
puts "Testing #{project_name} WebAssembly project..."
|
45
|
+
project_path = "source/#{project_name}/#{project_name}.csproj"
|
46
|
+
#{" "}
|
47
|
+
if File.exist?(project_path)
|
48
|
+
sh "dotnet test \#{project_path} --configuration Release --verbosity normal"
|
49
|
+
puts "WebAssembly project tests completed successfully!"
|
50
|
+
else
|
51
|
+
puts "Error: Project file not found at \#{project_path}"
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
desc "run the #{project_name} WebAssembly project in development mode"
|
57
|
+
task :run => [:build] do
|
58
|
+
puts "Running #{project_name} WebAssembly project..."
|
59
|
+
project_path = "source/#{project_name}/#{project_name}.csproj"
|
60
|
+
#{" "}
|
61
|
+
if File.exist?(project_path)
|
62
|
+
sh "dotnet run --project \#{project_path} --configuration Debug"
|
63
|
+
else
|
64
|
+
puts "Error: Project file not found at \#{project_path}"
|
65
|
+
exit 1
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
desc "clean build artifacts"
|
70
|
+
task :clean do
|
71
|
+
puts "Cleaning WebAssembly project build artifacts..."
|
72
|
+
sh "dotnet clean source/#{project_name}/#{project_name}.csproj"
|
73
|
+
puts "Clean completed successfully!"
|
74
|
+
end
|
75
|
+
|
76
|
+
desc "restore packages"
|
77
|
+
task :restore do
|
78
|
+
puts "Restoring WebAssembly project packages..."
|
79
|
+
sh "dotnet restore source/#{project_name}/#{project_name}.csproj"
|
80
|
+
puts "Restore completed successfully!"
|
81
|
+
end
|
82
|
+
|
83
|
+
desc "publish the WebAssembly project"
|
84
|
+
task :publish do
|
85
|
+
puts "Publishing #{project_name} WebAssembly project..."
|
86
|
+
output_dir = "artifacts/publish/#{project_name}"
|
87
|
+
FileUtils.mkdir_p(output_dir)
|
88
|
+
sh "dotnet publish source/#{project_name}/#{project_name}.csproj --configuration Release --output \#{output_dir}"
|
89
|
+
puts "WebAssembly project publish completed successfully! Output: \#{output_dir}"
|
90
|
+
end
|
91
|
+
|
92
|
+
desc "serve the published WebAssembly project"
|
93
|
+
task :serve => [:publish] do
|
94
|
+
puts "Serving #{project_name} WebAssembly project..."
|
95
|
+
output_dir = "artifacts/publish/#{project_name}"
|
96
|
+
#{" "}
|
97
|
+
if Dir.exist?(output_dir)
|
98
|
+
puts "Starting web server on http://localhost:8080"
|
99
|
+
puts "Press Ctrl+C to stop the server"
|
100
|
+
sh "cd \#{output_dir} && python3 -m http.server 8080"
|
101
|
+
else
|
102
|
+
puts "Error: Published output directory not found at \#{output_dir}"
|
103
|
+
exit 1
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
desc "build and deploy to GitHub Pages"
|
108
|
+
task :deploy_github_pages => [:publish] do
|
109
|
+
puts "Deploying #{project_name} to GitHub Pages..."
|
110
|
+
output_dir = "artifacts/publish/#{project_name}"
|
111
|
+
#{" "}
|
112
|
+
if Dir.exist?(output_dir)
|
113
|
+
# Copy published files to docs directory for GitHub Pages
|
114
|
+
docs_dir = "docs"
|
115
|
+
FileUtils.rm_rf(docs_dir) if Dir.exist?(docs_dir)
|
116
|
+
FileUtils.cp_r(output_dir, docs_dir)
|
117
|
+
#{" "}
|
118
|
+
puts "Files copied to \#{docs_dir} for GitHub Pages deployment"
|
119
|
+
puts "Commit and push changes to deploy to GitHub Pages"
|
120
|
+
else
|
121
|
+
puts "Error: Published output directory not found at \#{output_dir}"
|
122
|
+
exit 1
|
123
|
+
end
|
124
|
+
end
|
125
|
+
RUBY
|
126
|
+
|
127
|
+
File.write("Rakefile", rakefile_content)
|
128
|
+
end
|
129
|
+
|
130
|
+
def self.generate_gitlab_ci(project_name)
|
131
|
+
gitlab_ci_content = <<~YAML
|
132
|
+
# #{project_name} WebAssembly Project GitLab CI/CD Pipeline
|
133
|
+
# frozen_string_literal: true
|
134
|
+
|
135
|
+
stages:
|
136
|
+
- build
|
137
|
+
- test
|
138
|
+
- publish
|
139
|
+
- deploy
|
140
|
+
|
141
|
+
variables:
|
142
|
+
DOTNET_VERSION: "8.0.x"
|
143
|
+
PROJECT_PATH: "source/#{project_name}/#{project_name}.csproj"
|
144
|
+
BUILD_CONFIGURATION: "Release"
|
145
|
+
TEST_RESULTS_DIR: "test-results"
|
146
|
+
COVERAGE_DIR: "coverage"
|
147
|
+
PUBLISH_DIR: "artifacts/publish"
|
148
|
+
|
149
|
+
# Cache NuGet packages between jobs
|
150
|
+
cache:
|
151
|
+
paths:
|
152
|
+
- "**/bin/"
|
153
|
+
- "**/obj/"
|
154
|
+
- "**/packages/"
|
155
|
+
- "~/.nuget/packages/"
|
156
|
+
|
157
|
+
# Build job
|
158
|
+
build:
|
159
|
+
stage: build
|
160
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
161
|
+
script:
|
162
|
+
- echo "Building #{project_name} WebAssembly project..."
|
163
|
+
- dotnet --version
|
164
|
+
- dotnet restore $PROJECT_PATH
|
165
|
+
- dotnet build $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-restore
|
166
|
+
- echo "WebAssembly project build completed successfully!"
|
167
|
+
artifacts:
|
168
|
+
paths:
|
169
|
+
- "**/bin/"
|
170
|
+
- "**/obj/"
|
171
|
+
expire_in: 1 week
|
172
|
+
when: on_success
|
173
|
+
rules:
|
174
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
175
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
176
|
+
- if: $CI_COMMIT_TAG
|
177
|
+
|
178
|
+
# Test job
|
179
|
+
test:
|
180
|
+
stage: test
|
181
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
182
|
+
dependencies:
|
183
|
+
- build
|
184
|
+
script:
|
185
|
+
- echo "Testing #{project_name} WebAssembly project..."
|
186
|
+
- dotnet test $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-build --verbosity normal
|
187
|
+
- echo "WebAssembly project tests completed successfully!"
|
188
|
+
artifacts:
|
189
|
+
paths:
|
190
|
+
- $TEST_RESULTS_DIR/
|
191
|
+
- $COVERAGE_DIR/
|
192
|
+
reports:
|
193
|
+
junit: $TEST_RESULTS_DIR/*.xml
|
194
|
+
expire_in: 1 week
|
195
|
+
when: always
|
196
|
+
rules:
|
197
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
198
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
199
|
+
- if: $CI_COMMIT_TAG
|
200
|
+
|
201
|
+
# Publish job
|
202
|
+
publish:
|
203
|
+
stage: publish
|
204
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
205
|
+
dependencies:
|
206
|
+
- test
|
207
|
+
script:
|
208
|
+
- echo "Publishing #{project_name} WebAssembly project..."
|
209
|
+
- mkdir -p $PUBLISH_DIR
|
210
|
+
- dotnet publish $PROJECT_PATH --configuration $BUILD_CONFIGURATION --output $PUBLISH_DIR/#{project_name}
|
211
|
+
- echo "WebAssembly project publish completed successfully!"
|
212
|
+
artifacts:
|
213
|
+
paths:
|
214
|
+
- $PUBLISH_DIR/
|
215
|
+
expire_in: 1 month
|
216
|
+
when: on_success
|
217
|
+
rules:
|
218
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
219
|
+
- if: $CI_COMMIT_TAG
|
220
|
+
|
221
|
+
# Deploy to GitLab Pages
|
222
|
+
deploy_pages:
|
223
|
+
stage: deploy
|
224
|
+
image: alpine:latest
|
225
|
+
dependencies:
|
226
|
+
- publish
|
227
|
+
script:
|
228
|
+
- echo "Deploying #{project_name} to GitLab Pages..."
|
229
|
+
- apk add --no-cache rsync
|
230
|
+
- rsync -av $PUBLISH_DIR/#{project_name}/ public/
|
231
|
+
- echo "Deployment to GitLab Pages completed!"
|
232
|
+
artifacts:
|
233
|
+
paths:
|
234
|
+
- public
|
235
|
+
rules:
|
236
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
237
|
+
|
238
|
+
# Code quality job (optional)
|
239
|
+
code_quality:
|
240
|
+
stage: test
|
241
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
242
|
+
dependencies:
|
243
|
+
- build
|
244
|
+
script:
|
245
|
+
- echo "Running code quality checks..."
|
246
|
+
- dotnet tool install --global dotnet-format
|
247
|
+
- dotnet format --verify-no-changes $PROJECT_PATH
|
248
|
+
- echo "Code quality checks completed!"
|
249
|
+
allow_failure: true
|
250
|
+
rules:
|
251
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
252
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
253
|
+
|
254
|
+
# Security scan job (optional)
|
255
|
+
security_scan:
|
256
|
+
stage: test
|
257
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
258
|
+
dependencies:
|
259
|
+
- build
|
260
|
+
script:
|
261
|
+
- echo "Running security scan..."
|
262
|
+
- dotnet tool install --global dotnet-outdated-tool
|
263
|
+
- dotnet outdated $PROJECT_PATH
|
264
|
+
- echo "Security scan completed!"
|
265
|
+
allow_failure: true
|
266
|
+
rules:
|
267
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
268
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
269
|
+
YAML
|
270
|
+
|
271
|
+
File.write(".gitlab-ci.yml", gitlab_ci_content)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|