makit 0.0.140 → 0.0.142
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/auto.rb +48 -48
- 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 +69 -69
- data/lib/makit/cli/project_commands.rb +868 -868
- data/lib/makit/cli/repository_commands.rb +661 -661
- data/lib/makit/cli/strategy_commands.rb +203 -203
- 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 +312 -312
- data/lib/makit/commands/middleware/validator.rb +269 -269
- data/lib/makit/commands/request.rb +316 -316
- data/lib/makit/commands/result.rb +323 -323
- data/lib/makit/commands/runner.rb +388 -385
- data/lib/makit/commands/strategies/base.rb +171 -171
- data/lib/makit/commands/strategies/child_process.rb +165 -165
- data/lib/makit/commands/strategies/factory.rb +136 -136
- data/lib/makit/commands/strategies/synchronous.rb +139 -139
- data/lib/makit/commands.rb +50 -50
- data/lib/makit/configuration/dotnet_project.rb +12 -12
- data/lib/makit/configuration/gitlab_helper.rb +58 -58
- data/lib/makit/configuration/project.rb +168 -168
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration/timeout.rb +74 -74
- data/lib/makit/configuration.rb +15 -15
- data/lib/makit/content/default_gitignore.rb +7 -7
- data/lib/makit/content/default_gitignore.txt +225 -225
- 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 +140 -140
- 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/cli.rb +69 -69
- data/lib/makit/dotnet/project.rb +217 -217
- 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 +308 -308
- data/lib/makit/logging/format_registry.rb +84 -84
- data/lib/makit/logging/formatters/base.rb +39 -39
- data/lib/makit/logging/formatters/console_formatter.rb +140 -140
- 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 +119 -119
- data/lib/makit/logging/logger.rb +199 -199
- data/lib/makit/logging/sinks/base.rb +91 -91
- data/lib/makit/logging/sinks/console.rb +72 -72
- data/lib/makit/logging/sinks/file_sink.rb +92 -92
- data/lib/makit/logging/sinks/structured.rb +123 -123
- data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
- data/lib/makit/logging.rb +565 -565
- 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 +199 -191
- 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/trace_controller.rb +173 -173
- data/lib/makit/rake.rb +80 -80
- 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 -130
- data/lib/makit/services/builder.rb +186 -186
- data/lib/makit/services/error_handler.rb +226 -226
- data/lib/makit/services/repository_manager.rb +231 -231
- data/lib/makit/services/validator.rb +112 -112
- data/lib/makit/setup/classlib.rb +101 -101
- data/lib/makit/setup/gem.rb +268 -268
- data/lib/makit/setup/razorclasslib.rb +101 -101
- data/lib/makit/setup/runner.rb +54 -54
- data/lib/makit/setup.rb +5 -5
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -126
- data/lib/makit/symbols.rb +170 -170
- data/lib/makit/task_info.rb +130 -130
- data/lib/makit/tasks/at_exit.rb +15 -15
- data/lib/makit/tasks/build.rb +22 -22
- data/lib/makit/tasks/clean.rb +13 -13
- data/lib/makit/tasks/configure.rb +10 -10
- data/lib/makit/tasks/format.rb +10 -10
- data/lib/makit/tasks/hook_manager.rb +443 -443
- data/lib/makit/tasks/init.rb +49 -49
- data/lib/makit/tasks/integrate.rb +29 -29
- data/lib/makit/tasks/pull_incoming.rb +13 -13
- data/lib/makit/tasks/setup.rb +13 -13
- data/lib/makit/tasks/sync.rb +17 -17
- data/lib/makit/tasks/tag.rb +16 -16
- data/lib/makit/tasks/task_monkey_patch.rb +81 -81
- data/lib/makit/tasks/test.rb +22 -22
- data/lib/makit/tasks/update.rb +18 -18
- data/lib/makit/tasks.rb +20 -20
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/makit.v1_pb.rb +35 -35
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/version.rb +99 -99
- data/lib/makit/version_util.rb +21 -21
- 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 -44
- data/lib/makit.rb +43 -42
- metadata +2 -2
@@ -1,264 +1,264 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Makit
|
4
|
-
class DotNet
|
5
|
-
class SolutionConsole
|
6
|
-
def self.setup(name)
|
7
|
-
Makit::DotNet::Project.new_project("console", 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} Console Application Project Rakefile
|
24
|
-
#
|
25
|
-
desc "default task - builds and tests the console application"
|
26
|
-
task :default => [:build, :test]
|
27
|
-
|
28
|
-
desc "build the #{project_name} console application"
|
29
|
-
task :build do
|
30
|
-
puts "Building #{project_name} console application..."
|
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 "Console application 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} console application"
|
43
|
-
task :test do
|
44
|
-
puts "Testing #{project_name} console application..."
|
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 "Console application 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} console application"
|
57
|
-
task :run => [:build] do
|
58
|
-
puts "Running #{project_name} console application..."
|
59
|
-
project_path = "source/#{project_name}/#{project_name}.csproj"
|
60
|
-
#{" "}
|
61
|
-
if File.exist?(project_path)
|
62
|
-
sh "dotnet run --project \#{project_path} --configuration Release"
|
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 console application 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 console application packages..."
|
79
|
-
sh "dotnet restore source/#{project_name}/#{project_name}.csproj"
|
80
|
-
puts "Restore completed successfully!"
|
81
|
-
end
|
82
|
-
|
83
|
-
desc "publish the console application"
|
84
|
-
task :publish do
|
85
|
-
puts "Publishing #{project_name} console application..."
|
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 "Publish completed successfully! Output: \#{output_dir}"
|
90
|
-
end
|
91
|
-
|
92
|
-
desc "create self-contained deployment"
|
93
|
-
task :publish_self_contained do
|
94
|
-
puts "Creating self-contained deployment for #{project_name}..."
|
95
|
-
output_dir = "artifacts/publish/#{project_name}-self-contained"
|
96
|
-
FileUtils.mkdir_p(output_dir)
|
97
|
-
#{" "}
|
98
|
-
# Publish for multiple runtimes
|
99
|
-
runtimes = ["linux-x64", "osx-x64", "win-x64"]
|
100
|
-
runtimes.each do |runtime|
|
101
|
-
runtime_output = "\#{output_dir}/\#{runtime}"
|
102
|
-
puts "Publishing for \#{runtime}..."
|
103
|
-
sh "dotnet publish source/#{project_name}/#{project_name}.csproj --configuration Release --runtime \#{runtime} --self-contained true --output \#{runtime_output}"
|
104
|
-
end
|
105
|
-
#{" "}
|
106
|
-
puts "Self-contained deployment completed successfully! Output: \#{output_dir}"
|
107
|
-
end
|
108
|
-
RUBY
|
109
|
-
|
110
|
-
File.write("Rakefile", rakefile_content)
|
111
|
-
end
|
112
|
-
|
113
|
-
def self.generate_gitlab_ci(project_name)
|
114
|
-
gitlab_ci_content = <<~YAML
|
115
|
-
# #{project_name} Console Application Project GitLab CI/CD Pipeline
|
116
|
-
# frozen_string_literal: true
|
117
|
-
|
118
|
-
stages:
|
119
|
-
- build
|
120
|
-
- test
|
121
|
-
- publish
|
122
|
-
|
123
|
-
variables:
|
124
|
-
DOTNET_VERSION: "8.0.x"
|
125
|
-
PROJECT_PATH: "source/#{project_name}/#{project_name}.csproj"
|
126
|
-
BUILD_CONFIGURATION: "Release"
|
127
|
-
TEST_RESULTS_DIR: "test-results"
|
128
|
-
COVERAGE_DIR: "coverage"
|
129
|
-
PUBLISH_DIR: "artifacts/publish"
|
130
|
-
|
131
|
-
# Cache NuGet packages between jobs
|
132
|
-
cache:
|
133
|
-
paths:
|
134
|
-
- "**/bin/"
|
135
|
-
- "**/obj/"
|
136
|
-
- "**/packages/"
|
137
|
-
- "~/.nuget/packages/"
|
138
|
-
|
139
|
-
# Build job
|
140
|
-
build:
|
141
|
-
stage: build
|
142
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
143
|
-
script:
|
144
|
-
- echo "Building #{project_name} console application..."
|
145
|
-
- dotnet --version
|
146
|
-
- dotnet restore $PROJECT_PATH
|
147
|
-
- dotnet build $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-restore
|
148
|
-
- echo "Console application build completed successfully!"
|
149
|
-
artifacts:
|
150
|
-
paths:
|
151
|
-
- "**/bin/"
|
152
|
-
- "**/obj/"
|
153
|
-
expire_in: 1 week
|
154
|
-
when: on_success
|
155
|
-
rules:
|
156
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
157
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
158
|
-
- if: $CI_COMMIT_TAG
|
159
|
-
|
160
|
-
# Test job
|
161
|
-
test:
|
162
|
-
stage: test
|
163
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
164
|
-
dependencies:
|
165
|
-
- build
|
166
|
-
script:
|
167
|
-
- echo "Testing #{project_name} console application..."
|
168
|
-
- dotnet test $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-build --verbosity normal
|
169
|
-
- echo "Console application tests completed successfully!"
|
170
|
-
artifacts:
|
171
|
-
paths:
|
172
|
-
- $TEST_RESULTS_DIR/
|
173
|
-
- $COVERAGE_DIR/
|
174
|
-
reports:
|
175
|
-
junit: $TEST_RESULTS_DIR/*.xml
|
176
|
-
expire_in: 1 week
|
177
|
-
when: always
|
178
|
-
rules:
|
179
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
180
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
181
|
-
- if: $CI_COMMIT_TAG
|
182
|
-
|
183
|
-
# Publish job
|
184
|
-
publish:
|
185
|
-
stage: publish
|
186
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
187
|
-
dependencies:
|
188
|
-
- test
|
189
|
-
script:
|
190
|
-
- echo "Publishing #{project_name} console application..."
|
191
|
-
- mkdir -p $PUBLISH_DIR
|
192
|
-
- dotnet publish $PROJECT_PATH --configuration $BUILD_CONFIGURATION --output $PUBLISH_DIR/#{project_name}
|
193
|
-
- echo "Publish completed successfully!"
|
194
|
-
artifacts:
|
195
|
-
paths:
|
196
|
-
- $PUBLISH_DIR/
|
197
|
-
expire_in: 1 month
|
198
|
-
when: on_success
|
199
|
-
rules:
|
200
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
201
|
-
- if: $CI_COMMIT_TAG
|
202
|
-
|
203
|
-
# Multi-platform publish job (only on tags)
|
204
|
-
publish_multi_platform:
|
205
|
-
stage: publish
|
206
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
207
|
-
dependencies:
|
208
|
-
- test
|
209
|
-
script:
|
210
|
-
- echo "Creating multi-platform deployment for #{project_name}..."
|
211
|
-
- mkdir -p $PUBLISH_DIR
|
212
|
-
- |
|
213
|
-
runtimes=("linux-x64" "osx-x64" "win-x64")
|
214
|
-
for runtime in "${runtimes[@]}"; do
|
215
|
-
echo "Publishing for $runtime..."
|
216
|
-
dotnet publish $PROJECT_PATH --configuration $BUILD_CONFIGURATION --runtime $runtime --self-contained true --output $PUBLISH_DIR/#{project_name}-$runtime
|
217
|
-
done
|
218
|
-
- echo "Multi-platform deployment completed successfully!"
|
219
|
-
artifacts:
|
220
|
-
paths:
|
221
|
-
- $PUBLISH_DIR/
|
222
|
-
expire_in: 1 month
|
223
|
-
when: on_success
|
224
|
-
rules:
|
225
|
-
- if: $CI_COMMIT_TAG
|
226
|
-
|
227
|
-
# Code quality job (optional)
|
228
|
-
code_quality:
|
229
|
-
stage: test
|
230
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
231
|
-
dependencies:
|
232
|
-
- build
|
233
|
-
script:
|
234
|
-
- echo "Running code quality checks..."
|
235
|
-
- dotnet tool install --global dotnet-format
|
236
|
-
- dotnet format --verify-no-changes $PROJECT_PATH
|
237
|
-
- echo "Code quality checks completed!"
|
238
|
-
allow_failure: true
|
239
|
-
rules:
|
240
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
241
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
242
|
-
|
243
|
-
# Security scan job (optional)
|
244
|
-
security_scan:
|
245
|
-
stage: test
|
246
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
247
|
-
dependencies:
|
248
|
-
- build
|
249
|
-
script:
|
250
|
-
- echo "Running security scan..."
|
251
|
-
- dotnet tool install --global dotnet-outdated-tool
|
252
|
-
- dotnet outdated $PROJECT_PATH
|
253
|
-
- echo "Security scan completed!"
|
254
|
-
allow_failure: true
|
255
|
-
rules:
|
256
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
257
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
258
|
-
YAML
|
259
|
-
|
260
|
-
File.write(".gitlab-ci.yml", gitlab_ci_content)
|
261
|
-
end
|
262
|
-
end
|
263
|
-
end
|
264
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Makit
|
4
|
+
class DotNet
|
5
|
+
class SolutionConsole
|
6
|
+
def self.setup(name)
|
7
|
+
Makit::DotNet::Project.new_project("console", 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} Console Application Project Rakefile
|
24
|
+
#
|
25
|
+
desc "default task - builds and tests the console application"
|
26
|
+
task :default => [:build, :test]
|
27
|
+
|
28
|
+
desc "build the #{project_name} console application"
|
29
|
+
task :build do
|
30
|
+
puts "Building #{project_name} console application..."
|
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 "Console application 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} console application"
|
43
|
+
task :test do
|
44
|
+
puts "Testing #{project_name} console application..."
|
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 "Console application 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} console application"
|
57
|
+
task :run => [:build] do
|
58
|
+
puts "Running #{project_name} console application..."
|
59
|
+
project_path = "source/#{project_name}/#{project_name}.csproj"
|
60
|
+
#{" "}
|
61
|
+
if File.exist?(project_path)
|
62
|
+
sh "dotnet run --project \#{project_path} --configuration Release"
|
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 console application 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 console application packages..."
|
79
|
+
sh "dotnet restore source/#{project_name}/#{project_name}.csproj"
|
80
|
+
puts "Restore completed successfully!"
|
81
|
+
end
|
82
|
+
|
83
|
+
desc "publish the console application"
|
84
|
+
task :publish do
|
85
|
+
puts "Publishing #{project_name} console application..."
|
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 "Publish completed successfully! Output: \#{output_dir}"
|
90
|
+
end
|
91
|
+
|
92
|
+
desc "create self-contained deployment"
|
93
|
+
task :publish_self_contained do
|
94
|
+
puts "Creating self-contained deployment for #{project_name}..."
|
95
|
+
output_dir = "artifacts/publish/#{project_name}-self-contained"
|
96
|
+
FileUtils.mkdir_p(output_dir)
|
97
|
+
#{" "}
|
98
|
+
# Publish for multiple runtimes
|
99
|
+
runtimes = ["linux-x64", "osx-x64", "win-x64"]
|
100
|
+
runtimes.each do |runtime|
|
101
|
+
runtime_output = "\#{output_dir}/\#{runtime}"
|
102
|
+
puts "Publishing for \#{runtime}..."
|
103
|
+
sh "dotnet publish source/#{project_name}/#{project_name}.csproj --configuration Release --runtime \#{runtime} --self-contained true --output \#{runtime_output}"
|
104
|
+
end
|
105
|
+
#{" "}
|
106
|
+
puts "Self-contained deployment completed successfully! Output: \#{output_dir}"
|
107
|
+
end
|
108
|
+
RUBY
|
109
|
+
|
110
|
+
File.write("Rakefile", rakefile_content)
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.generate_gitlab_ci(project_name)
|
114
|
+
gitlab_ci_content = <<~YAML
|
115
|
+
# #{project_name} Console Application Project GitLab CI/CD Pipeline
|
116
|
+
# frozen_string_literal: true
|
117
|
+
|
118
|
+
stages:
|
119
|
+
- build
|
120
|
+
- test
|
121
|
+
- publish
|
122
|
+
|
123
|
+
variables:
|
124
|
+
DOTNET_VERSION: "8.0.x"
|
125
|
+
PROJECT_PATH: "source/#{project_name}/#{project_name}.csproj"
|
126
|
+
BUILD_CONFIGURATION: "Release"
|
127
|
+
TEST_RESULTS_DIR: "test-results"
|
128
|
+
COVERAGE_DIR: "coverage"
|
129
|
+
PUBLISH_DIR: "artifacts/publish"
|
130
|
+
|
131
|
+
# Cache NuGet packages between jobs
|
132
|
+
cache:
|
133
|
+
paths:
|
134
|
+
- "**/bin/"
|
135
|
+
- "**/obj/"
|
136
|
+
- "**/packages/"
|
137
|
+
- "~/.nuget/packages/"
|
138
|
+
|
139
|
+
# Build job
|
140
|
+
build:
|
141
|
+
stage: build
|
142
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
143
|
+
script:
|
144
|
+
- echo "Building #{project_name} console application..."
|
145
|
+
- dotnet --version
|
146
|
+
- dotnet restore $PROJECT_PATH
|
147
|
+
- dotnet build $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-restore
|
148
|
+
- echo "Console application build completed successfully!"
|
149
|
+
artifacts:
|
150
|
+
paths:
|
151
|
+
- "**/bin/"
|
152
|
+
- "**/obj/"
|
153
|
+
expire_in: 1 week
|
154
|
+
when: on_success
|
155
|
+
rules:
|
156
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
157
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
158
|
+
- if: $CI_COMMIT_TAG
|
159
|
+
|
160
|
+
# Test job
|
161
|
+
test:
|
162
|
+
stage: test
|
163
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
164
|
+
dependencies:
|
165
|
+
- build
|
166
|
+
script:
|
167
|
+
- echo "Testing #{project_name} console application..."
|
168
|
+
- dotnet test $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-build --verbosity normal
|
169
|
+
- echo "Console application tests completed successfully!"
|
170
|
+
artifacts:
|
171
|
+
paths:
|
172
|
+
- $TEST_RESULTS_DIR/
|
173
|
+
- $COVERAGE_DIR/
|
174
|
+
reports:
|
175
|
+
junit: $TEST_RESULTS_DIR/*.xml
|
176
|
+
expire_in: 1 week
|
177
|
+
when: always
|
178
|
+
rules:
|
179
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
180
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
181
|
+
- if: $CI_COMMIT_TAG
|
182
|
+
|
183
|
+
# Publish job
|
184
|
+
publish:
|
185
|
+
stage: publish
|
186
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
187
|
+
dependencies:
|
188
|
+
- test
|
189
|
+
script:
|
190
|
+
- echo "Publishing #{project_name} console application..."
|
191
|
+
- mkdir -p $PUBLISH_DIR
|
192
|
+
- dotnet publish $PROJECT_PATH --configuration $BUILD_CONFIGURATION --output $PUBLISH_DIR/#{project_name}
|
193
|
+
- echo "Publish completed successfully!"
|
194
|
+
artifacts:
|
195
|
+
paths:
|
196
|
+
- $PUBLISH_DIR/
|
197
|
+
expire_in: 1 month
|
198
|
+
when: on_success
|
199
|
+
rules:
|
200
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
201
|
+
- if: $CI_COMMIT_TAG
|
202
|
+
|
203
|
+
# Multi-platform publish job (only on tags)
|
204
|
+
publish_multi_platform:
|
205
|
+
stage: publish
|
206
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
207
|
+
dependencies:
|
208
|
+
- test
|
209
|
+
script:
|
210
|
+
- echo "Creating multi-platform deployment for #{project_name}..."
|
211
|
+
- mkdir -p $PUBLISH_DIR
|
212
|
+
- |
|
213
|
+
runtimes=("linux-x64" "osx-x64" "win-x64")
|
214
|
+
for runtime in "${runtimes[@]}"; do
|
215
|
+
echo "Publishing for $runtime..."
|
216
|
+
dotnet publish $PROJECT_PATH --configuration $BUILD_CONFIGURATION --runtime $runtime --self-contained true --output $PUBLISH_DIR/#{project_name}-$runtime
|
217
|
+
done
|
218
|
+
- echo "Multi-platform deployment completed successfully!"
|
219
|
+
artifacts:
|
220
|
+
paths:
|
221
|
+
- $PUBLISH_DIR/
|
222
|
+
expire_in: 1 month
|
223
|
+
when: on_success
|
224
|
+
rules:
|
225
|
+
- if: $CI_COMMIT_TAG
|
226
|
+
|
227
|
+
# Code quality job (optional)
|
228
|
+
code_quality:
|
229
|
+
stage: test
|
230
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
231
|
+
dependencies:
|
232
|
+
- build
|
233
|
+
script:
|
234
|
+
- echo "Running code quality checks..."
|
235
|
+
- dotnet tool install --global dotnet-format
|
236
|
+
- dotnet format --verify-no-changes $PROJECT_PATH
|
237
|
+
- echo "Code quality checks completed!"
|
238
|
+
allow_failure: true
|
239
|
+
rules:
|
240
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
241
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
242
|
+
|
243
|
+
# Security scan job (optional)
|
244
|
+
security_scan:
|
245
|
+
stage: test
|
246
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
247
|
+
dependencies:
|
248
|
+
- build
|
249
|
+
script:
|
250
|
+
- echo "Running security scan..."
|
251
|
+
- dotnet tool install --global dotnet-outdated-tool
|
252
|
+
- dotnet outdated $PROJECT_PATH
|
253
|
+
- echo "Security scan completed!"
|
254
|
+
allow_failure: true
|
255
|
+
rules:
|
256
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
257
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
258
|
+
YAML
|
259
|
+
|
260
|
+
File.write(".gitlab-ci.yml", gitlab_ci_content)
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|