makit 0.0.147 → 0.0.153
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/lib/generated/makit/v1/configuration/project_pb.rb +22 -0
- data/lib/generated/makit/v1/configuration/project_service_pb.rb +34 -0
- data/lib/generated/makit/v1/configuration/project_service_services_pb.rb +51 -0
- data/lib/generated/makit/v1/git/git_repository_model_pb.rb +22 -0
- data/lib/generated/makit/v1/git/git_repository_service_pb.rb +29 -0
- data/lib/generated/makit/v1/git/git_repository_service_services_pb.rb +39 -0
- data/lib/generated/makit/v1/gitlab/pipeline_pb.rb +26 -0
- data/lib/generated/makit/v1/gitlab/pipeline_result_pb.rb +29 -0
- data/lib/generated/makit/v1/gitlab/pipeline_service_pb.rb +36 -0
- data/lib/generated/makit/v1/gitlab/pipeline_service_services_pb.rb +41 -0
- data/lib/generated/makit/v1/grpc/service_specification_pb.rb +27 -0
- data/lib/generated/makit/v1/grpc/test_specification_pb.rb +29 -0
- data/lib/generated/makit/v1/io/filesystem_pb.rb +27 -0
- data/lib/generated/makit/v1/io/filesystem_services_pb.rb +47 -0
- data/lib/generated/makit/v1/makit.v1_pb.rb +35 -0
- data/lib/generated/makit/v1/makit.v1_services_pb.rb +26 -0
- data/lib/generated/makit/v1/podman/podman_service_pb.rb +64 -0
- data/lib/generated/makit/v1/podman/podman_service_services_pb.rb +52 -0
- data/lib/generated/makit/v1/services/repository_manager_model_pb.rb +23 -0
- data/lib/generated/makit/v1/services/repository_manager_service_pb.rb +32 -0
- data/lib/generated/makit/v1/services/repository_manager_service_services_pb.rb +35 -0
- data/lib/generated/makit/v1/spec/message_proto_generator_pb.rb +33 -0
- data/lib/generated/makit/v1/spec/message_proto_generator_services_pb.rb +38 -0
- data/lib/generated/makit/v1/spec/message_spec_pb.rb +31 -0
- data/lib/generated/makit/v1/spec/message_spec_suite_pb.rb +30 -0
- data/lib/generated/makit/v1/spec/message_spec_test_pb.rb +34 -0
- data/lib/generated/makit/v1/spec/proto_service_pb.rb +53 -0
- data/lib/generated/makit/v1/spec/proto_service_services_pb.rb +42 -0
- data/lib/generated/makit/v1/spec/spec_manifest_pb.rb +44 -0
- data/lib/generated/makit/v1/web/link_pb.rb +20 -0
- data/lib/makit/azure/blob_storage.rb +257 -0
- data/lib/makit/azure/cli.rb +285 -0
- data/lib/makit/configuration/project.rb +137 -291
- data/lib/makit/git/repository.rb +24 -190
- data/lib/makit/gitlab/pipeline.rb +16 -16
- data/lib/makit/gitlab/pipeline_service_impl.rb +43 -43
- data/lib/makit/io/filesystem_service_impl.rb +6 -6
- data/lib/makit/lint.rb +212 -0
- data/lib/makit/logging/configuration.rb +2 -1
- data/lib/makit/logging.rb +15 -2
- data/lib/makit/podman/podman.rb +20 -20
- data/lib/makit/podman/podman_service_impl.rb +41 -41
- data/lib/makit/secrets/azure_key_vault.rb +323 -0
- data/lib/makit/secrets/azure_secrets.rb +183 -0
- data/lib/makit/secrets/local_secrets.rb +72 -0
- data/lib/makit/secrets/secrets_manager.rb +105 -0
- data/lib/makit/secrets.rb +10 -45
- data/lib/makit/tasks/bump.rb +7 -0
- data/lib/makit/tasks/info.rb +204 -0
- data/lib/makit/tasks/integrate.rb +28 -1
- data/lib/makit/tasks/secrets.rb +7 -0
- data/lib/makit/tasks/version.rb +6 -0
- data/lib/makit/tasks.rb +4 -0
- data/lib/makit/v1/configuration/project_service_impl.rb +1 -1
- data/lib/makit/version.rb +382 -1
- data/lib/makit.rb +21 -18
- metadata +46 -5
data/lib/makit/version.rb
CHANGED
|
@@ -2,18 +2,189 @@
|
|
|
2
2
|
|
|
3
3
|
module Makit
|
|
4
4
|
# Static version for now to avoid circular dependency issues
|
|
5
|
-
VERSION = "0.0.
|
|
5
|
+
#VERSION = "0.0.153"
|
|
6
6
|
|
|
7
7
|
# Version management utilities for various file formats
|
|
8
8
|
#
|
|
9
9
|
# This class provides methods for detecting, extracting, and updating version
|
|
10
10
|
# numbers in various file formats including .csproj, .wxs, .yml, .gemspec,
|
|
11
11
|
# .nuspec, and .toml files.
|
|
12
|
+
#
|
|
13
|
+
# == Semantic Versioning
|
|
14
|
+
#
|
|
15
|
+
# This class follows Semantic Versioning (SemVer) specification (https://semver.org/).
|
|
16
|
+
# Version numbers use the format: MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
|
|
17
|
+
#
|
|
18
|
+
# === Version Number Components
|
|
19
|
+
#
|
|
20
|
+
# * MAJOR: Incremented for incompatible API changes that break backward compatibility.
|
|
21
|
+
# Example: 1.0.0 -> 2.0.0 indicates breaking changes.
|
|
22
|
+
#
|
|
23
|
+
# * MINOR: Incremented for new functionality added in a backward-compatible manner.
|
|
24
|
+
# Example: 1.0.0 -> 1.1.0 indicates new features that don't break existing code.
|
|
25
|
+
#
|
|
26
|
+
# * PATCH: Incremented for backward-compatible bug fixes.
|
|
27
|
+
# Example: 1.0.0 -> 1.0.1 indicates bug fixes only.
|
|
28
|
+
#
|
|
29
|
+
# === Pre-release Versions
|
|
30
|
+
#
|
|
31
|
+
# Pre-release versions can be appended with a hyphen and identifier(s):
|
|
32
|
+
# * 1.0.0-alpha.1 (alpha release)
|
|
33
|
+
# * 1.0.0-beta.2 (beta release)
|
|
34
|
+
# * 1.0.0-rc.1 (release candidate)
|
|
35
|
+
# * 1.0.0-preview (preview release)
|
|
36
|
+
#
|
|
37
|
+
# Pre-release versions have lower precedence than normal versions:
|
|
38
|
+
# * 1.0.0-alpha.1 < 1.0.0
|
|
39
|
+
# * 1.0.0-beta.1 < 1.0.0-rc.1
|
|
40
|
+
#
|
|
41
|
+
# === Version Comparison
|
|
42
|
+
#
|
|
43
|
+
# Versions are compared using semantic versioning rules:
|
|
44
|
+
# * Compare MAJOR first, then MINOR, then PATCH
|
|
45
|
+
# * Pre-release versions are always less than normal versions
|
|
46
|
+
# * Numeric identifiers are compared numerically
|
|
47
|
+
# * Non-numeric identifiers are compared lexicographically
|
|
48
|
+
#
|
|
49
|
+
# Examples:
|
|
50
|
+
# * 1.0.0 < 2.0.0 (major version difference)
|
|
51
|
+
# * 1.0.0 < 1.1.0 (minor version difference)
|
|
52
|
+
# * 1.0.0 < 1.0.1 (patch version difference)
|
|
53
|
+
# * 1.0.0-alpha < 1.0.0 (pre-release is less than release)
|
|
54
|
+
#
|
|
55
|
+
# === Usage in This Class
|
|
56
|
+
#
|
|
57
|
+
# * {parse} - Parses a version string into MAJOR, MINOR, PATCH, and suffix components
|
|
58
|
+
# * {get_highest_version} - Compares versions using semantic versioning rules to find the highest
|
|
59
|
+
# * {version} - Reads the current version from the gemspec file
|
|
60
|
+
# * {get_version_from_file} - Extracts version from various file formats
|
|
61
|
+
# * {set_version_in_file} - Updates version in various file formats
|
|
62
|
+
#
|
|
12
63
|
class Version
|
|
64
|
+
|
|
65
|
+
# Attempt to detect the version from the gemspec file
|
|
66
|
+
# First tries to find a gemspec in the current project root
|
|
67
|
+
# Falls back to makit.gemspec only if we're in the makit gem directory
|
|
68
|
+
# @return [String] The version string, or "0.0.0" if no gemspec is found
|
|
69
|
+
# @raise [RuntimeError] If a gemspec is found but version cannot be detected
|
|
70
|
+
def self.version
|
|
71
|
+
# Try to find gemspec in project root first (for projects using makit)
|
|
72
|
+
project_root = begin
|
|
73
|
+
require_relative "directories" unless defined?(Makit::Directories)
|
|
74
|
+
Makit::Directories::PROJECT_ROOT
|
|
75
|
+
rescue NameError, LoadError
|
|
76
|
+
find_project_root(Dir.pwd)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Look for any .gemspec file in project root
|
|
80
|
+
if project_root && Dir.exist?(project_root)
|
|
81
|
+
gemspec_files = Dir.glob(File.join(project_root, "*.gemspec"))
|
|
82
|
+
if gemspec_files.any?
|
|
83
|
+
gemspec = gemspec_files.first
|
|
84
|
+
gemspec_content = File.read(gemspec)
|
|
85
|
+
match = gemspec_content.match(/spec\.version\s*=\s*["']([^"']+)["']/)
|
|
86
|
+
return match[1] if match
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Fallback to makit.gemspec (for the makit gem itself)
|
|
91
|
+
# Check if makit.gemspec exists relative to this file
|
|
92
|
+
makit_gemspec = File.join(File.dirname(__FILE__), "..", "..", "makit.gemspec")
|
|
93
|
+
makit_gemspec = File.expand_path(makit_gemspec)
|
|
94
|
+
|
|
95
|
+
# Use makit.gemspec if:
|
|
96
|
+
# 1. It exists, AND
|
|
97
|
+
# 2. Either we're in the makit gem directory (project_root matches), OR
|
|
98
|
+
# project_root is nil (running outside a project context, likely from installed gem)
|
|
99
|
+
if File.exist?(makit_gemspec)
|
|
100
|
+
makit_gem_dir = File.dirname(makit_gemspec)
|
|
101
|
+
use_makit_gemspec = if project_root
|
|
102
|
+
# If we have a project root, only use makit.gemspec if we're in the makit gem directory
|
|
103
|
+
File.expand_path(project_root) == File.expand_path(makit_gem_dir)
|
|
104
|
+
else
|
|
105
|
+
# If no project root, check if current directory is makit gem or if makit.gemspec is nearby
|
|
106
|
+
# This handles the case when running from installed gem or outside project context
|
|
107
|
+
Dir.pwd == makit_gem_dir || File.expand_path(Dir.pwd).start_with?(File.expand_path(makit_gem_dir))
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
if use_makit_gemspec
|
|
111
|
+
gemspec_content = File.read(makit_gemspec)
|
|
112
|
+
match = gemspec_content.match(/spec\.version\s*=\s*["']([^"']+)["']/)
|
|
113
|
+
raise "Version not found in gemspec file" if match.nil?
|
|
114
|
+
return match[1]
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# If no gemspec found, return default version (for non-gem projects)
|
|
119
|
+
"0.0.0"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Parse a semantic version string into its components
|
|
123
|
+
#
|
|
124
|
+
# Parses a version string following Semantic Versioning (SemVer) format:
|
|
125
|
+
# MAJOR.MINOR.PATCH[-PRERELEASE]
|
|
126
|
+
#
|
|
127
|
+
# @param version_string [String] Version string in SemVer format (e.g., "1.2.3" or "1.2.3-alpha.1")
|
|
128
|
+
# @return [Hash] Hash with keys: :major, :minor, :patch, :suffix
|
|
129
|
+
# - :major [Integer] Major version number
|
|
130
|
+
# - :minor [Integer] Minor version number
|
|
131
|
+
# - :patch [Integer] Patch version number
|
|
132
|
+
# - :suffix [String] Pre-release suffix (e.g., "-alpha.1") or empty string
|
|
133
|
+
# @raise [RuntimeError] If version string doesn't match MAJOR.MINOR.PATCH format
|
|
134
|
+
#
|
|
135
|
+
# @example Basic version
|
|
136
|
+
# Makit::Version.parse("1.2.3")
|
|
137
|
+
# # => { major: 1, minor: 2, patch: 3, suffix: "" }
|
|
138
|
+
#
|
|
139
|
+
# @example Version with pre-release suffix
|
|
140
|
+
# Makit::Version.parse("1.2.3-alpha")
|
|
141
|
+
# # => { major: 1, minor: 2, patch: 3, suffix: "-alpha" }
|
|
142
|
+
#
|
|
143
|
+
# @example Invalid format
|
|
144
|
+
# Makit::Version.parse("1.2")
|
|
145
|
+
# # => RuntimeError: Invalid version format: 1.2. Expected format: Major.Minor.Patch
|
|
146
|
+
#
|
|
147
|
+
def self.parse(version_string)
|
|
148
|
+
parts = version_string.split(".")
|
|
149
|
+
if parts.length < 3
|
|
150
|
+
raise "Invalid version format: #{version_string}. Expected format: Major.Minor.Patch"
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
major = parts[0].to_i
|
|
154
|
+
minor = parts[1].to_i
|
|
155
|
+
patch = parts[2].to_i
|
|
156
|
+
|
|
157
|
+
# Handle pre-release suffixes (e.g., "0.1.0-preview" -> patch = 0, suffix = "-preview")
|
|
158
|
+
# Note: If suffix contains dots (e.g., "1.2.3-preview.1"), the split by "." will separate
|
|
159
|
+
# the patch and suffix parts, so only the part before the first "-" in parts[2] is used as patch.
|
|
160
|
+
patch_part = parts[2]
|
|
161
|
+
if patch_part.include?("-")
|
|
162
|
+
patch, suffix = patch_part.split("-", 2)
|
|
163
|
+
patch = patch.to_i
|
|
164
|
+
suffix = "-#{suffix}"
|
|
165
|
+
else
|
|
166
|
+
suffix = ""
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
{ major: major, minor: minor, patch: patch, suffix: suffix }
|
|
170
|
+
end
|
|
171
|
+
|
|
13
172
|
# Find the highest version from an array of version strings
|
|
14
173
|
#
|
|
174
|
+
# Compares versions using semantic versioning rules (see class documentation).
|
|
175
|
+
# Uses Ruby's Gem::Version for comparison, which follows SemVer specification.
|
|
176
|
+
#
|
|
15
177
|
# @param versions [Array<String>] Array of version strings to compare
|
|
16
178
|
# @return [String] The highest version string using semantic versioning comparison
|
|
179
|
+
#
|
|
180
|
+
# @example
|
|
181
|
+
# Makit::Version.get_highest_version(["1.0.0", "2.0.0", "1.5.0", "1.0.1"])
|
|
182
|
+
# # => "2.0.0"
|
|
183
|
+
#
|
|
184
|
+
# @example Pre-release versions
|
|
185
|
+
# Makit::Version.get_highest_version(["1.0.0-alpha", "1.0.0", "1.0.0-beta"])
|
|
186
|
+
# # => "1.0.0" (pre-release versions are lower than release versions)
|
|
187
|
+
#
|
|
17
188
|
def self.get_highest_version(versions)
|
|
18
189
|
versions.max { |a, b| Gem::Version.new(a) <=> Gem::Version.new(b) }
|
|
19
190
|
end
|
|
@@ -96,5 +267,215 @@ module Makit
|
|
|
96
267
|
set_version_in_file(filename, version)
|
|
97
268
|
end
|
|
98
269
|
end
|
|
270
|
+
|
|
271
|
+
# Display version information for the current project
|
|
272
|
+
#
|
|
273
|
+
# Finds the Single Source of Truth (SSOT) version file in the project root
|
|
274
|
+
# and displays the file path and current version value.
|
|
275
|
+
#
|
|
276
|
+
# Searches for common version files in priority order:
|
|
277
|
+
# * *.gemspec (Ruby gems)
|
|
278
|
+
# * Directory.Build.props (.NET projects)
|
|
279
|
+
# * Cargo.toml (Rust projects)
|
|
280
|
+
# * package.json (Node.js projects)
|
|
281
|
+
# * pyproject.toml (Python projects)
|
|
282
|
+
# * pom.xml (Maven/Java projects)
|
|
283
|
+
#
|
|
284
|
+
# If no version file is found, issues a warning and suggests defining a VERSION_FILE
|
|
285
|
+
# constant to manually specify the version file path.
|
|
286
|
+
#
|
|
287
|
+
# @return [nil] Outputs version information to stdout, or returns early with warning if no file found
|
|
288
|
+
# @raise [RuntimeError] If project root cannot be determined or version cannot be extracted from file
|
|
289
|
+
#
|
|
290
|
+
# @example Output format
|
|
291
|
+
# Version File: makit.gemspec
|
|
292
|
+
# Version: 0.0.147
|
|
293
|
+
#
|
|
294
|
+
# @example With VERSION_FILE constant defined
|
|
295
|
+
# VERSION_FILE = "custom/version.txt"
|
|
296
|
+
# Makit::Version.info
|
|
297
|
+
# # Uses the file specified by VERSION_FILE constant
|
|
298
|
+
#
|
|
299
|
+
def self.info
|
|
300
|
+
# Access Directories lazily to avoid circular dependency
|
|
301
|
+
project_root = begin
|
|
302
|
+
require_relative "directories" unless defined?(Makit::Directories)
|
|
303
|
+
Makit::Directories::PROJECT_ROOT
|
|
304
|
+
rescue NameError, LoadError
|
|
305
|
+
# Fallback: try to find project root from current directory
|
|
306
|
+
find_project_root(Dir.pwd)
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
raise "Project root not found" if project_root.nil? || !Dir.exist?(project_root)
|
|
310
|
+
|
|
311
|
+
version_file = find_ssot_version_file(project_root)
|
|
312
|
+
|
|
313
|
+
if version_file.nil?
|
|
314
|
+
warn " Warning: No version file found in project root: #{project_root}"
|
|
315
|
+
warn " You may define a constant VERSION_FILE to manually set the version file path"
|
|
316
|
+
return
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# Extract version based on file type
|
|
320
|
+
version = extract_version_from_ssot_file(version_file)
|
|
321
|
+
|
|
322
|
+
raise "Version not found in #{version_file}" if version.nil?
|
|
323
|
+
|
|
324
|
+
# Display information with relative path
|
|
325
|
+
relative_path = version_file.sub(project_root + "/", "")
|
|
326
|
+
puts " Version File: #{relative_path}"
|
|
327
|
+
puts " Version: #{version}"
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
# Bump the patch version in the SSOT version file
|
|
331
|
+
#
|
|
332
|
+
# Finds the Single Source of Truth (SSOT) version file in the project root,
|
|
333
|
+
# reads the current version, increments the patch version, and updates the file.
|
|
334
|
+
#
|
|
335
|
+
# @return [String] The new version string after bumping
|
|
336
|
+
# @raise [RuntimeError] If project root cannot be determined, no version file is found,
|
|
337
|
+
# or version cannot be parsed/updated
|
|
338
|
+
#
|
|
339
|
+
# @example
|
|
340
|
+
# # Current version: 1.2.3
|
|
341
|
+
# Makit::Version.bump
|
|
342
|
+
# # => "1.2.4"
|
|
343
|
+
#
|
|
344
|
+
# @example With pre-release suffix
|
|
345
|
+
# # Current version: 1.2.3-alpha
|
|
346
|
+
# Makit::Version.bump
|
|
347
|
+
# # => "1.2.4" (removes pre-release suffix when bumping)
|
|
348
|
+
#
|
|
349
|
+
def self.bump
|
|
350
|
+
# Find the SSOT version file
|
|
351
|
+
project_root = begin
|
|
352
|
+
require_relative "directories" unless defined?(Makit::Directories)
|
|
353
|
+
Makit::Directories::PROJECT_ROOT
|
|
354
|
+
rescue NameError, LoadError
|
|
355
|
+
find_project_root(Dir.pwd)
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
raise "Project root not found" if project_root.nil? || !Dir.exist?(project_root)
|
|
359
|
+
|
|
360
|
+
version_file = find_ssot_version_file(project_root)
|
|
361
|
+
if version_file.nil?
|
|
362
|
+
warn " Warning: No version file found in project root: #{project_root}"
|
|
363
|
+
warn " You may define a constant VERSION_FILE to manually set the version file path"
|
|
364
|
+
raise "Cannot bump version: no version file found"
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
# Read current version
|
|
368
|
+
current_version = extract_version_from_ssot_file(version_file)
|
|
369
|
+
raise "Version not found in #{version_file}" if current_version.nil?
|
|
370
|
+
|
|
371
|
+
# Parse and bump patch version
|
|
372
|
+
parsed = parse(current_version)
|
|
373
|
+
new_version = "#{parsed[:major]}.#{parsed[:minor]}.#{parsed[:patch] + 1}"
|
|
374
|
+
|
|
375
|
+
# Update the version file
|
|
376
|
+
set_version_in_file(version_file, new_version)
|
|
377
|
+
|
|
378
|
+
# Verify the update
|
|
379
|
+
updated_version = extract_version_from_ssot_file(version_file)
|
|
380
|
+
if updated_version != new_version
|
|
381
|
+
raise "Version bump failed: expected #{new_version}, got #{updated_version}"
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
new_version
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
private
|
|
388
|
+
|
|
389
|
+
# Find the SSOT version file in the project root
|
|
390
|
+
#
|
|
391
|
+
# Checks for VERSION_FILE constant first (if defined), then searches for common version files.
|
|
392
|
+
#
|
|
393
|
+
# @param project_root [String] Path to the project root directory
|
|
394
|
+
# @return [String, nil] Path to the version file, or nil if not found
|
|
395
|
+
def self.find_ssot_version_file(project_root)
|
|
396
|
+
# Check for manually defined VERSION_FILE constant first
|
|
397
|
+
if defined?(VERSION_FILE) && !VERSION_FILE.nil?
|
|
398
|
+
version_file = File.expand_path(VERSION_FILE, project_root)
|
|
399
|
+
return version_file if File.exist?(version_file)
|
|
400
|
+
warn " Warning: VERSION_FILE constant points to non-existent file: #{VERSION_FILE}"
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
# Priority order for version files (SSOT)
|
|
404
|
+
version_file_patterns = [
|
|
405
|
+
"*.gemspec", # Ruby gems
|
|
406
|
+
"Directory.Build.props", # .NET projects
|
|
407
|
+
"Cargo.toml", # Rust projects
|
|
408
|
+
"package.json", # Node.js projects
|
|
409
|
+
"pyproject.toml", # Python projects
|
|
410
|
+
"pom.xml" # Maven/Java projects
|
|
411
|
+
]
|
|
412
|
+
|
|
413
|
+
version_file_patterns.each do |pattern|
|
|
414
|
+
matches = Dir.glob(File.join(project_root, pattern))
|
|
415
|
+
next if matches.empty?
|
|
416
|
+
|
|
417
|
+
# For gemspec, prefer the one matching the project name or take the first
|
|
418
|
+
version_file = matches.first
|
|
419
|
+
return version_file if version_file
|
|
420
|
+
end
|
|
421
|
+
|
|
422
|
+
nil
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
# Find project root by looking for common markers
|
|
426
|
+
def self.find_project_root(start_dir)
|
|
427
|
+
current = File.expand_path(start_dir)
|
|
428
|
+
root = File.expand_path("/")
|
|
429
|
+
|
|
430
|
+
while current != root
|
|
431
|
+
markers = ["Rakefile", "rakefile.rb", ".gitignore", ".git"]
|
|
432
|
+
return current if markers.any? { |marker| File.exist?(File.join(current, marker)) }
|
|
433
|
+
current = File.dirname(current)
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
nil
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
# Extract version from SSOT file based on file type
|
|
440
|
+
def self.extract_version_from_ssot_file(file_path)
|
|
441
|
+
case File.basename(file_path)
|
|
442
|
+
when /\.gemspec$/
|
|
443
|
+
# Extract from gemspec: spec.version = "x.y.z"
|
|
444
|
+
content = File.read(file_path)
|
|
445
|
+
match = content.match(/spec\.version\s*=\s*["']([^"']+)["']/)
|
|
446
|
+
match ? match[1] : nil
|
|
447
|
+
when "Directory.Build.props"
|
|
448
|
+
# Extract from Directory.Build.props: <Version>x.y.z</Version>
|
|
449
|
+
content = File.read(file_path)
|
|
450
|
+
match = content.match(%r{<Version>([^<]+)</Version>})
|
|
451
|
+
match ? match[1] : nil
|
|
452
|
+
when "Cargo.toml"
|
|
453
|
+
# Extract from Cargo.toml: version = "x.y.z"
|
|
454
|
+
content = File.read(file_path)
|
|
455
|
+
match = content.match(/version\s*=\s*["']([^"']+)["']/)
|
|
456
|
+
match ? match[1] : nil
|
|
457
|
+
when "package.json"
|
|
458
|
+
# Extract from package.json: "version": "x.y.z"
|
|
459
|
+
require "json"
|
|
460
|
+
json = JSON.parse(File.read(file_path))
|
|
461
|
+
json["version"]
|
|
462
|
+
when "pyproject.toml"
|
|
463
|
+
# Extract from pyproject.toml: version = "x.y.z" (in [project] or [tool.poetry] section)
|
|
464
|
+
content = File.read(file_path)
|
|
465
|
+
# Try [project] section first
|
|
466
|
+
match = content.match(/\[project\]\s*version\s*=\s*["']([^"']+)["']/)
|
|
467
|
+
return match[1] if match
|
|
468
|
+
# Try [tool.poetry] section
|
|
469
|
+
match = content.match(/\[tool\.poetry\]\s*version\s*=\s*["']([^"']+)["']/)
|
|
470
|
+
match ? match[1] : nil
|
|
471
|
+
when "pom.xml"
|
|
472
|
+
# Extract from pom.xml: <version>x.y.z</version>
|
|
473
|
+
content = File.read(file_path)
|
|
474
|
+
match = content.match(%r{<version>([^<]+)</version>})
|
|
475
|
+
match ? match[1] : nil
|
|
476
|
+
else
|
|
477
|
+
nil
|
|
478
|
+
end
|
|
479
|
+
end
|
|
99
480
|
end
|
|
100
481
|
end
|
data/lib/makit.rb
CHANGED
|
@@ -20,9 +20,12 @@ require_relative "makit/logging"
|
|
|
20
20
|
require_relative "makit/commands"
|
|
21
21
|
require_relative "makit/serializer"
|
|
22
22
|
require_relative "makit/secrets"
|
|
23
|
+
require_relative "makit/azure/cli"
|
|
24
|
+
require_relative "makit/azure/blob_storage"
|
|
23
25
|
require_relative "makit/humanize"
|
|
24
26
|
require_relative "makit/directories"
|
|
25
27
|
require_relative "makit/exceptions"
|
|
28
|
+
require_relative "makit/lint"
|
|
26
29
|
|
|
27
30
|
# Load generated protobuf files only if they exist
|
|
28
31
|
if File.exist?(File.join(__dir__, "generated", "makit", "v1", "configuration", "project_pb.rb"))
|
|
@@ -37,31 +40,31 @@ if File.exist?(File.join(__dir__, "generated", "makit", "v1", "git", "git_reposi
|
|
|
37
40
|
require_relative "generated/makit/v1/git/git_repository_service_services_pb"
|
|
38
41
|
end
|
|
39
42
|
|
|
40
|
-
if File.exist?(File.join(__dir__, "generated", "makit", "gitlab", "pipeline_pb.rb"))
|
|
41
|
-
require_relative "generated/makit/gitlab/pipeline_pb"
|
|
42
|
-
require_relative "generated/makit/gitlab/pipeline_service_pb"
|
|
43
|
-
require_relative "generated/makit/gitlab/pipeline_service_services_pb"
|
|
44
|
-
require_relative "generated/makit/gitlab/pipeline_result_pb"
|
|
43
|
+
if File.exist?(File.join(__dir__, "generated", "makit", "v1", "gitlab", "pipeline_pb.rb"))
|
|
44
|
+
require_relative "generated/makit/v1/gitlab/pipeline_pb"
|
|
45
|
+
require_relative "generated/makit/v1/gitlab/pipeline_service_pb"
|
|
46
|
+
require_relative "generated/makit/v1/gitlab/pipeline_service_services_pb"
|
|
47
|
+
require_relative "generated/makit/v1/gitlab/pipeline_result_pb"
|
|
45
48
|
end
|
|
46
49
|
|
|
47
|
-
if File.exist?(File.join(__dir__, "generated", "makit", "podman", "podman_service_pb.rb"))
|
|
48
|
-
require_relative "generated/makit/podman/podman_service_pb"
|
|
49
|
-
require_relative "generated/makit/podman/podman_service_services_pb"
|
|
50
|
+
if File.exist?(File.join(__dir__, "generated", "makit", "v1", "podman", "podman_service_pb.rb"))
|
|
51
|
+
require_relative "generated/makit/v1/podman/podman_service_pb"
|
|
52
|
+
require_relative "generated/makit/v1/podman/podman_service_services_pb"
|
|
50
53
|
end
|
|
51
54
|
|
|
52
55
|
# Load specification protobuf files
|
|
53
|
-
if File.exist?(File.join(__dir__, "generated", "makit", "
|
|
54
|
-
require_relative "generated/makit/
|
|
55
|
-
require_relative "generated/makit/
|
|
56
|
-
require_relative "generated/makit/
|
|
57
|
-
require_relative "generated/makit/
|
|
58
|
-
require_relative "generated/makit/
|
|
59
|
-
require_relative "generated/makit/
|
|
56
|
+
if File.exist?(File.join(__dir__, "generated", "makit", "v1", "spec", "message_spec_pb.rb"))
|
|
57
|
+
require_relative "generated/makit/v1/spec/message_spec_pb"
|
|
58
|
+
require_relative "generated/makit/v1/spec/message_spec_suite_pb"
|
|
59
|
+
require_relative "generated/makit/v1/spec/message_spec_test_pb"
|
|
60
|
+
require_relative "generated/makit/v1/spec/proto_service_pb"
|
|
61
|
+
require_relative "generated/makit/v1/spec/spec_manifest_pb"
|
|
62
|
+
require_relative "generated/makit/v1/spec/message_proto_generator_pb"
|
|
60
63
|
end
|
|
61
64
|
|
|
62
|
-
if File.exist?(File.join(__dir__, "generated", "makit", "io", "filesystem_pb.rb"))
|
|
63
|
-
require_relative "generated/makit/io/filesystem_pb"
|
|
64
|
-
require_relative "generated/makit/io/filesystem_services_pb"
|
|
65
|
+
if File.exist?(File.join(__dir__, "generated", "makit", "v1", "io", "filesystem_pb.rb"))
|
|
66
|
+
require_relative "generated/makit/v1/io/filesystem_pb"
|
|
67
|
+
require_relative "generated/makit/v1/io/filesystem_services_pb"
|
|
65
68
|
end
|
|
66
69
|
require_relative "makit/files"
|
|
67
70
|
require_relative "makit/task_info"
|
metadata
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: makit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.153
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
7
|
+
- Lou Parslow
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
@@ -191,9 +191,9 @@ dependencies:
|
|
|
191
191
|
- - "~>"
|
|
192
192
|
- !ruby/object:Gem::Version
|
|
193
193
|
version: '13.0'
|
|
194
|
-
description: A
|
|
194
|
+
description: A suit of rake task to help with CI/CD tasks
|
|
195
195
|
email:
|
|
196
|
-
-
|
|
196
|
+
- lou.parslow@gmail.com
|
|
197
197
|
executables:
|
|
198
198
|
- makit
|
|
199
199
|
extensions: []
|
|
@@ -201,10 +201,42 @@ extra_rdoc_files: []
|
|
|
201
201
|
files:
|
|
202
202
|
- README.md
|
|
203
203
|
- exe/makit
|
|
204
|
+
- lib/generated/makit/v1/configuration/project_pb.rb
|
|
205
|
+
- lib/generated/makit/v1/configuration/project_service_pb.rb
|
|
206
|
+
- lib/generated/makit/v1/configuration/project_service_services_pb.rb
|
|
207
|
+
- lib/generated/makit/v1/git/git_repository_model_pb.rb
|
|
208
|
+
- lib/generated/makit/v1/git/git_repository_service_pb.rb
|
|
209
|
+
- lib/generated/makit/v1/git/git_repository_service_services_pb.rb
|
|
210
|
+
- lib/generated/makit/v1/gitlab/pipeline_pb.rb
|
|
211
|
+
- lib/generated/makit/v1/gitlab/pipeline_result_pb.rb
|
|
212
|
+
- lib/generated/makit/v1/gitlab/pipeline_service_pb.rb
|
|
213
|
+
- lib/generated/makit/v1/gitlab/pipeline_service_services_pb.rb
|
|
214
|
+
- lib/generated/makit/v1/grpc/service_specification_pb.rb
|
|
215
|
+
- lib/generated/makit/v1/grpc/test_specification_pb.rb
|
|
216
|
+
- lib/generated/makit/v1/io/filesystem_pb.rb
|
|
217
|
+
- lib/generated/makit/v1/io/filesystem_services_pb.rb
|
|
218
|
+
- lib/generated/makit/v1/makit.v1_pb.rb
|
|
219
|
+
- lib/generated/makit/v1/makit.v1_services_pb.rb
|
|
220
|
+
- lib/generated/makit/v1/podman/podman_service_pb.rb
|
|
221
|
+
- lib/generated/makit/v1/podman/podman_service_services_pb.rb
|
|
222
|
+
- lib/generated/makit/v1/services/repository_manager_model_pb.rb
|
|
223
|
+
- lib/generated/makit/v1/services/repository_manager_service_pb.rb
|
|
224
|
+
- lib/generated/makit/v1/services/repository_manager_service_services_pb.rb
|
|
225
|
+
- lib/generated/makit/v1/spec/message_proto_generator_pb.rb
|
|
226
|
+
- lib/generated/makit/v1/spec/message_proto_generator_services_pb.rb
|
|
227
|
+
- lib/generated/makit/v1/spec/message_spec_pb.rb
|
|
228
|
+
- lib/generated/makit/v1/spec/message_spec_suite_pb.rb
|
|
229
|
+
- lib/generated/makit/v1/spec/message_spec_test_pb.rb
|
|
230
|
+
- lib/generated/makit/v1/spec/proto_service_pb.rb
|
|
231
|
+
- lib/generated/makit/v1/spec/proto_service_services_pb.rb
|
|
232
|
+
- lib/generated/makit/v1/spec/spec_manifest_pb.rb
|
|
233
|
+
- lib/generated/makit/v1/web/link_pb.rb
|
|
204
234
|
- lib/makit copy.rb
|
|
205
235
|
- lib/makit.rb
|
|
206
236
|
- lib/makit/apache.rb
|
|
207
237
|
- lib/makit/auto.rb
|
|
238
|
+
- lib/makit/azure/blob_storage.rb
|
|
239
|
+
- lib/makit/azure/cli.rb
|
|
208
240
|
- lib/makit/cli/base.rb
|
|
209
241
|
- lib/makit/cli/build_commands.rb
|
|
210
242
|
- lib/makit/cli/generators/base_generator.rb
|
|
@@ -286,6 +318,7 @@ files:
|
|
|
286
318
|
- lib/makit/indexer.rb
|
|
287
319
|
- lib/makit/io/filesystem.rb
|
|
288
320
|
- lib/makit/io/filesystem_service_impl.rb
|
|
321
|
+
- lib/makit/lint.rb
|
|
289
322
|
- lib/makit/logging.rb
|
|
290
323
|
- lib/makit/logging/configuration.rb
|
|
291
324
|
- lib/makit/logging/format_registry.rb
|
|
@@ -319,6 +352,10 @@ files:
|
|
|
319
352
|
- lib/makit/ruby.rb
|
|
320
353
|
- lib/makit/ruby/cli.rb
|
|
321
354
|
- lib/makit/secrets.rb
|
|
355
|
+
- lib/makit/secrets/azure_key_vault.rb
|
|
356
|
+
- lib/makit/secrets/azure_secrets.rb
|
|
357
|
+
- lib/makit/secrets/local_secrets.rb
|
|
358
|
+
- lib/makit/secrets/secrets_manager.rb
|
|
322
359
|
- lib/makit/serializer.rb
|
|
323
360
|
- lib/makit/services/builder.rb
|
|
324
361
|
- lib/makit/services/error_handler.rb
|
|
@@ -337,19 +374,23 @@ files:
|
|
|
337
374
|
- lib/makit/tasks.rb
|
|
338
375
|
- lib/makit/tasks/at_exit.rb
|
|
339
376
|
- lib/makit/tasks/build.rb
|
|
377
|
+
- lib/makit/tasks/bump.rb
|
|
340
378
|
- lib/makit/tasks/clean.rb
|
|
341
379
|
- lib/makit/tasks/configure.rb
|
|
342
380
|
- lib/makit/tasks/format.rb
|
|
343
381
|
- lib/makit/tasks/hook_manager.rb
|
|
382
|
+
- lib/makit/tasks/info.rb
|
|
344
383
|
- lib/makit/tasks/init.rb
|
|
345
384
|
- lib/makit/tasks/integrate.rb
|
|
346
385
|
- lib/makit/tasks/pull_incoming.rb
|
|
386
|
+
- lib/makit/tasks/secrets.rb
|
|
347
387
|
- lib/makit/tasks/setup.rb
|
|
348
388
|
- lib/makit/tasks/sync.rb
|
|
349
389
|
- lib/makit/tasks/tag.rb
|
|
350
390
|
- lib/makit/tasks/task_monkey_patch.rb
|
|
351
391
|
- lib/makit/tasks/test.rb
|
|
352
392
|
- lib/makit/tasks/update.rb
|
|
393
|
+
- lib/makit/tasks/version.rb
|
|
353
394
|
- lib/makit/test_cache.rb
|
|
354
395
|
- lib/makit/tree.rb
|
|
355
396
|
- lib/makit/v1/configuration/project_service_impl.rb
|
|
@@ -383,5 +424,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
383
424
|
requirements: []
|
|
384
425
|
rubygems_version: 3.7.0
|
|
385
426
|
specification_version: 4
|
|
386
|
-
summary: A Ruby gem
|
|
427
|
+
summary: A Ruby gem to help with CI/CD tasks
|
|
387
428
|
test_files: []
|