makit 0.0.138 → 0.0.140
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 -67
- 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 +51 -0
- 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 +385 -385
- data/lib/makit/commands/strategies/base.rb +171 -171
- data/lib/makit/commands/strategies/child_process.rb +1 -1
- 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 -0
- data/lib/makit/configuration.rb +15 -14
- 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 +191 -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.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 +42 -42
- metadata +3 -2
@@ -1,239 +1,239 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Makit
|
4
|
-
class DotNet
|
5
|
-
class SolutionClassLib
|
6
|
-
def self.setup(name)
|
7
|
-
Makit::DotNet::Project.new_project("razorclasslib", 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} Class Library Project Rakefile
|
24
|
-
#
|
25
|
-
desc "default task - builds and tests the class library"
|
26
|
-
task :default => [:build, :test]
|
27
|
-
|
28
|
-
desc "build the #{project_name} class library"
|
29
|
-
task :build do
|
30
|
-
puts "Building #{project_name} class library..."
|
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 "Class library 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} class library"
|
43
|
-
task :test do
|
44
|
-
puts "Testing #{project_name} class library..."
|
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 "Class library 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 "clean build artifacts"
|
57
|
-
task :clean do
|
58
|
-
puts "Cleaning class library build artifacts..."
|
59
|
-
sh "dotnet clean source/#{project_name}/#{project_name}.csproj"
|
60
|
-
puts "Clean completed successfully!"
|
61
|
-
end
|
62
|
-
|
63
|
-
desc "restore packages"
|
64
|
-
task :restore do
|
65
|
-
puts "Restoring class library packages..."
|
66
|
-
sh "dotnet restore source/#{project_name}/#{project_name}.csproj"
|
67
|
-
puts "Restore completed successfully!"
|
68
|
-
end
|
69
|
-
|
70
|
-
desc "pack the class library as NuGet package"
|
71
|
-
task :pack do
|
72
|
-
puts "Packing #{project_name} class library..."
|
73
|
-
output_dir = "artifacts/packages"
|
74
|
-
FileUtils.mkdir_p(output_dir)
|
75
|
-
sh "dotnet pack source/#{project_name}/#{project_name}.csproj --configuration Release --output \#{output_dir}"
|
76
|
-
puts "Pack completed successfully! Package: \#{output_dir}/#{project_name}.*.nupkg"
|
77
|
-
end
|
78
|
-
|
79
|
-
desc "publish the class library package"
|
80
|
-
task :publish => [:pack] do
|
81
|
-
puts "Publishing #{project_name} class library package..."
|
82
|
-
package_files = Dir.glob("artifacts/packages/#{project_name}.*.nupkg")
|
83
|
-
if package_files.any?
|
84
|
-
package_files.each do |package|
|
85
|
-
sh "dotnet nuget push \#{package} --api-key ${NUGET_API_KEY} --source ${NUGET_SOURCE:-https://api.nuget.org/v3/index.json}"
|
86
|
-
end
|
87
|
-
puts "Publish completed successfully!"
|
88
|
-
else
|
89
|
-
puts "Error: No package files found to publish"
|
90
|
-
exit 1
|
91
|
-
end
|
92
|
-
end
|
93
|
-
RUBY
|
94
|
-
|
95
|
-
File.write("Rakefile", rakefile_content)
|
96
|
-
end
|
97
|
-
|
98
|
-
def self.generate_gitlab_ci(project_name)
|
99
|
-
gitlab_ci_content = <<~YAML
|
100
|
-
# #{project_name} Class Library Project GitLab CI/CD Pipeline
|
101
|
-
# frozen_string_literal: true
|
102
|
-
|
103
|
-
stages:
|
104
|
-
- build
|
105
|
-
- test
|
106
|
-
- pack
|
107
|
-
- publish
|
108
|
-
|
109
|
-
variables:
|
110
|
-
DOTNET_VERSION: "8.0.x"
|
111
|
-
PROJECT_PATH: "source/#{project_name}/#{project_name}.csproj"
|
112
|
-
BUILD_CONFIGURATION: "Release"
|
113
|
-
TEST_RESULTS_DIR: "test-results"
|
114
|
-
COVERAGE_DIR: "coverage"
|
115
|
-
PACKAGE_DIR: "artifacts/packages"
|
116
|
-
|
117
|
-
# Cache NuGet packages between jobs
|
118
|
-
cache:
|
119
|
-
paths:
|
120
|
-
- "**/bin/"
|
121
|
-
- "**/obj/"
|
122
|
-
- "**/packages/"
|
123
|
-
- "~/.nuget/packages/"
|
124
|
-
|
125
|
-
# Build job
|
126
|
-
build:
|
127
|
-
stage: build
|
128
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
129
|
-
script:
|
130
|
-
- echo "Building #{project_name} class library..."
|
131
|
-
- dotnet --version
|
132
|
-
- dotnet restore $PROJECT_PATH
|
133
|
-
- dotnet build $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-restore
|
134
|
-
- echo "Class library build completed successfully!"
|
135
|
-
artifacts:
|
136
|
-
paths:
|
137
|
-
- "**/bin/"
|
138
|
-
- "**/obj/"
|
139
|
-
expire_in: 1 week
|
140
|
-
when: on_success
|
141
|
-
rules:
|
142
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
143
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
144
|
-
- if: $CI_COMMIT_TAG
|
145
|
-
|
146
|
-
# Test job
|
147
|
-
test:
|
148
|
-
stage: test
|
149
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
150
|
-
dependencies:
|
151
|
-
- build
|
152
|
-
script:
|
153
|
-
- echo "Testing #{project_name} class library..."
|
154
|
-
- dotnet test $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-build --verbosity normal
|
155
|
-
- echo "Class library tests completed successfully!"
|
156
|
-
artifacts:
|
157
|
-
paths:
|
158
|
-
- $TEST_RESULTS_DIR/
|
159
|
-
- $COVERAGE_DIR/
|
160
|
-
reports:
|
161
|
-
junit: $TEST_RESULTS_DIR/*.xml
|
162
|
-
expire_in: 1 week
|
163
|
-
when: always
|
164
|
-
rules:
|
165
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
166
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
167
|
-
- if: $CI_COMMIT_TAG
|
168
|
-
|
169
|
-
# Pack job
|
170
|
-
pack:
|
171
|
-
stage: pack
|
172
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
173
|
-
dependencies:
|
174
|
-
- test
|
175
|
-
script:
|
176
|
-
- echo "Packing #{project_name} class library..."
|
177
|
-
- mkdir -p $PACKAGE_DIR
|
178
|
-
- dotnet pack $PROJECT_PATH --configuration $BUILD_CONFIGURATION --output $PACKAGE_DIR
|
179
|
-
- echo "Pack completed successfully!"
|
180
|
-
artifacts:
|
181
|
-
paths:
|
182
|
-
- $PACKAGE_DIR/
|
183
|
-
expire_in: 1 month
|
184
|
-
when: on_success
|
185
|
-
rules:
|
186
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
187
|
-
- if: $CI_COMMIT_TAG
|
188
|
-
|
189
|
-
# Publish job (only on tags)
|
190
|
-
publish:
|
191
|
-
stage: publish
|
192
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
193
|
-
dependencies:
|
194
|
-
- pack
|
195
|
-
script:
|
196
|
-
- echo "Publishing #{project_name} class library package..."
|
197
|
-
- dotnet nuget push $PACKAGE_DIR/*.nupkg --api-key $NUGET_API_KEY --source $NUGET_SOURCE
|
198
|
-
- echo "Publish completed successfully!"
|
199
|
-
rules:
|
200
|
-
- if: $CI_COMMIT_TAG
|
201
|
-
|
202
|
-
# Code quality job (optional)
|
203
|
-
code_quality:
|
204
|
-
stage: test
|
205
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
206
|
-
dependencies:
|
207
|
-
- build
|
208
|
-
script:
|
209
|
-
- echo "Running code quality checks..."
|
210
|
-
- dotnet tool install --global dotnet-format
|
211
|
-
- dotnet format --verify-no-changes $PROJECT_PATH
|
212
|
-
- echo "Code quality checks completed!"
|
213
|
-
allow_failure: true
|
214
|
-
rules:
|
215
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
216
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
217
|
-
|
218
|
-
# Security scan job (optional)
|
219
|
-
security_scan:
|
220
|
-
stage: test
|
221
|
-
image: mcr.microsoft.com/dotnet/sdk:8.0
|
222
|
-
dependencies:
|
223
|
-
- build
|
224
|
-
script:
|
225
|
-
- echo "Running security scan..."
|
226
|
-
- dotnet tool install --global dotnet-outdated-tool
|
227
|
-
- dotnet outdated $PROJECT_PATH
|
228
|
-
- echo "Security scan completed!"
|
229
|
-
allow_failure: true
|
230
|
-
rules:
|
231
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
232
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
233
|
-
YAML
|
234
|
-
|
235
|
-
File.write(".gitlab-ci.yml", gitlab_ci_content)
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Makit
|
4
|
+
class DotNet
|
5
|
+
class SolutionClassLib
|
6
|
+
def self.setup(name)
|
7
|
+
Makit::DotNet::Project.new_project("razorclasslib", 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} Class Library Project Rakefile
|
24
|
+
#
|
25
|
+
desc "default task - builds and tests the class library"
|
26
|
+
task :default => [:build, :test]
|
27
|
+
|
28
|
+
desc "build the #{project_name} class library"
|
29
|
+
task :build do
|
30
|
+
puts "Building #{project_name} class library..."
|
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 "Class library 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} class library"
|
43
|
+
task :test do
|
44
|
+
puts "Testing #{project_name} class library..."
|
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 "Class library 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 "clean build artifacts"
|
57
|
+
task :clean do
|
58
|
+
puts "Cleaning class library build artifacts..."
|
59
|
+
sh "dotnet clean source/#{project_name}/#{project_name}.csproj"
|
60
|
+
puts "Clean completed successfully!"
|
61
|
+
end
|
62
|
+
|
63
|
+
desc "restore packages"
|
64
|
+
task :restore do
|
65
|
+
puts "Restoring class library packages..."
|
66
|
+
sh "dotnet restore source/#{project_name}/#{project_name}.csproj"
|
67
|
+
puts "Restore completed successfully!"
|
68
|
+
end
|
69
|
+
|
70
|
+
desc "pack the class library as NuGet package"
|
71
|
+
task :pack do
|
72
|
+
puts "Packing #{project_name} class library..."
|
73
|
+
output_dir = "artifacts/packages"
|
74
|
+
FileUtils.mkdir_p(output_dir)
|
75
|
+
sh "dotnet pack source/#{project_name}/#{project_name}.csproj --configuration Release --output \#{output_dir}"
|
76
|
+
puts "Pack completed successfully! Package: \#{output_dir}/#{project_name}.*.nupkg"
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "publish the class library package"
|
80
|
+
task :publish => [:pack] do
|
81
|
+
puts "Publishing #{project_name} class library package..."
|
82
|
+
package_files = Dir.glob("artifacts/packages/#{project_name}.*.nupkg")
|
83
|
+
if package_files.any?
|
84
|
+
package_files.each do |package|
|
85
|
+
sh "dotnet nuget push \#{package} --api-key ${NUGET_API_KEY} --source ${NUGET_SOURCE:-https://api.nuget.org/v3/index.json}"
|
86
|
+
end
|
87
|
+
puts "Publish completed successfully!"
|
88
|
+
else
|
89
|
+
puts "Error: No package files found to publish"
|
90
|
+
exit 1
|
91
|
+
end
|
92
|
+
end
|
93
|
+
RUBY
|
94
|
+
|
95
|
+
File.write("Rakefile", rakefile_content)
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.generate_gitlab_ci(project_name)
|
99
|
+
gitlab_ci_content = <<~YAML
|
100
|
+
# #{project_name} Class Library Project GitLab CI/CD Pipeline
|
101
|
+
# frozen_string_literal: true
|
102
|
+
|
103
|
+
stages:
|
104
|
+
- build
|
105
|
+
- test
|
106
|
+
- pack
|
107
|
+
- publish
|
108
|
+
|
109
|
+
variables:
|
110
|
+
DOTNET_VERSION: "8.0.x"
|
111
|
+
PROJECT_PATH: "source/#{project_name}/#{project_name}.csproj"
|
112
|
+
BUILD_CONFIGURATION: "Release"
|
113
|
+
TEST_RESULTS_DIR: "test-results"
|
114
|
+
COVERAGE_DIR: "coverage"
|
115
|
+
PACKAGE_DIR: "artifacts/packages"
|
116
|
+
|
117
|
+
# Cache NuGet packages between jobs
|
118
|
+
cache:
|
119
|
+
paths:
|
120
|
+
- "**/bin/"
|
121
|
+
- "**/obj/"
|
122
|
+
- "**/packages/"
|
123
|
+
- "~/.nuget/packages/"
|
124
|
+
|
125
|
+
# Build job
|
126
|
+
build:
|
127
|
+
stage: build
|
128
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
129
|
+
script:
|
130
|
+
- echo "Building #{project_name} class library..."
|
131
|
+
- dotnet --version
|
132
|
+
- dotnet restore $PROJECT_PATH
|
133
|
+
- dotnet build $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-restore
|
134
|
+
- echo "Class library build completed successfully!"
|
135
|
+
artifacts:
|
136
|
+
paths:
|
137
|
+
- "**/bin/"
|
138
|
+
- "**/obj/"
|
139
|
+
expire_in: 1 week
|
140
|
+
when: on_success
|
141
|
+
rules:
|
142
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
143
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
144
|
+
- if: $CI_COMMIT_TAG
|
145
|
+
|
146
|
+
# Test job
|
147
|
+
test:
|
148
|
+
stage: test
|
149
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
150
|
+
dependencies:
|
151
|
+
- build
|
152
|
+
script:
|
153
|
+
- echo "Testing #{project_name} class library..."
|
154
|
+
- dotnet test $PROJECT_PATH --configuration $BUILD_CONFIGURATION --no-build --verbosity normal
|
155
|
+
- echo "Class library tests completed successfully!"
|
156
|
+
artifacts:
|
157
|
+
paths:
|
158
|
+
- $TEST_RESULTS_DIR/
|
159
|
+
- $COVERAGE_DIR/
|
160
|
+
reports:
|
161
|
+
junit: $TEST_RESULTS_DIR/*.xml
|
162
|
+
expire_in: 1 week
|
163
|
+
when: always
|
164
|
+
rules:
|
165
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
166
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
167
|
+
- if: $CI_COMMIT_TAG
|
168
|
+
|
169
|
+
# Pack job
|
170
|
+
pack:
|
171
|
+
stage: pack
|
172
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
173
|
+
dependencies:
|
174
|
+
- test
|
175
|
+
script:
|
176
|
+
- echo "Packing #{project_name} class library..."
|
177
|
+
- mkdir -p $PACKAGE_DIR
|
178
|
+
- dotnet pack $PROJECT_PATH --configuration $BUILD_CONFIGURATION --output $PACKAGE_DIR
|
179
|
+
- echo "Pack completed successfully!"
|
180
|
+
artifacts:
|
181
|
+
paths:
|
182
|
+
- $PACKAGE_DIR/
|
183
|
+
expire_in: 1 month
|
184
|
+
when: on_success
|
185
|
+
rules:
|
186
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
187
|
+
- if: $CI_COMMIT_TAG
|
188
|
+
|
189
|
+
# Publish job (only on tags)
|
190
|
+
publish:
|
191
|
+
stage: publish
|
192
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
193
|
+
dependencies:
|
194
|
+
- pack
|
195
|
+
script:
|
196
|
+
- echo "Publishing #{project_name} class library package..."
|
197
|
+
- dotnet nuget push $PACKAGE_DIR/*.nupkg --api-key $NUGET_API_KEY --source $NUGET_SOURCE
|
198
|
+
- echo "Publish completed successfully!"
|
199
|
+
rules:
|
200
|
+
- if: $CI_COMMIT_TAG
|
201
|
+
|
202
|
+
# Code quality job (optional)
|
203
|
+
code_quality:
|
204
|
+
stage: test
|
205
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
206
|
+
dependencies:
|
207
|
+
- build
|
208
|
+
script:
|
209
|
+
- echo "Running code quality checks..."
|
210
|
+
- dotnet tool install --global dotnet-format
|
211
|
+
- dotnet format --verify-no-changes $PROJECT_PATH
|
212
|
+
- echo "Code quality checks completed!"
|
213
|
+
allow_failure: true
|
214
|
+
rules:
|
215
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
216
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
217
|
+
|
218
|
+
# Security scan job (optional)
|
219
|
+
security_scan:
|
220
|
+
stage: test
|
221
|
+
image: mcr.microsoft.com/dotnet/sdk:8.0
|
222
|
+
dependencies:
|
223
|
+
- build
|
224
|
+
script:
|
225
|
+
- echo "Running security scan..."
|
226
|
+
- dotnet tool install --global dotnet-outdated-tool
|
227
|
+
- dotnet outdated $PROJECT_PATH
|
228
|
+
- echo "Security scan completed!"
|
229
|
+
allow_failure: true
|
230
|
+
rules:
|
231
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
232
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
233
|
+
YAML
|
234
|
+
|
235
|
+
File.write(".gitlab-ci.yml", gitlab_ci_content)
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|