makit 0.0.163 → 0.0.165
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/azure/blob_storage.rb +257 -257
- data/lib/makit/azure/cli.rb +284 -284
- data/lib/makit/cli/base.rb +17 -17
- 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 +41 -41
- 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 +78 -78
- data/lib/makit/cli/pipeline_commands.rb +311 -311
- 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 +207 -207
- 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 +386 -386
- data/lib/makit/commands/strategies/base.rb +171 -171
- data/lib/makit/commands/strategies/child_process.rb +162 -162
- 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 +48 -48
- data/lib/makit/configuration/gitlab_helper.rb +61 -61
- data/lib/makit/configuration/project.rb +292 -292
- 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 +21 -21
- 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 +170 -170
- 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 +224 -224
- 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 +110 -110
- 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 +32 -32
- data/lib/makit/files.rb +43 -43
- data/lib/makit/gems.rb +49 -49
- data/lib/makit/git/cli.rb +103 -103
- data/lib/makit/git/repository.rb +100 -100
- data/lib/makit/git.rb +104 -104
- data/lib/makit/gitlab/pipeline.rb +857 -857
- data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
- data/lib/makit/gitlab_runner.rb +59 -59
- data/lib/makit/humanize.rb +218 -218
- data/lib/makit/indexer.rb +47 -47
- data/lib/makit/io/filesystem.rb +111 -111
- data/lib/makit/io/filesystem_service_impl.rb +337 -337
- data/lib/makit/lint.rb +212 -212
- data/lib/makit/logging/configuration.rb +309 -309
- 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 +578 -578
- 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 +205 -205
- data/lib/makit/nuget.rb +454 -429
- data/lib/makit/podman/podman.rb +458 -458
- data/lib/makit/podman/podman_service_impl.rb +1081 -1081
- data/lib/makit/port.rb +32 -32
- data/lib/makit/process.rb +377 -377
- data/lib/makit/protoc.rb +112 -112
- data/lib/makit/rake/cli.rb +196 -196
- data/lib/makit/rake/trace_controller.rb +174 -174
- data/lib/makit/rake.rb +81 -81
- data/lib/makit/ruby/cli.rb +185 -185
- data/lib/makit/ruby.rb +25 -25
- data/lib/makit/rubygems.rb +137 -137
- data/lib/makit/secrets/azure_key_vault.rb +322 -322
- data/lib/makit/secrets/azure_secrets.rb +221 -183
- data/lib/makit/secrets/local_secrets.rb +72 -72
- data/lib/makit/secrets/secrets_manager.rb +105 -105
- data/lib/makit/secrets.rb +96 -16
- 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 +367 -367
- 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/pages.rb +11 -11
- 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 +175 -175
- 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/bump.rb +7 -7
- 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/info.rb +368 -368
- data/lib/makit/tasks/init.rb +49 -49
- data/lib/makit/tasks/integrate.rb +60 -60
- data/lib/makit/tasks/pull_incoming.rb +13 -13
- data/lib/makit/tasks/secrets.rb +7 -7
- data/lib/makit/tasks/setup.rb +16 -16
- data/lib/makit/tasks/sync.rb +14 -14
- data/lib/makit/tasks/tag.rb +27 -27
- data/lib/makit/tasks/task_monkey_patch.rb +81 -81
- data/lib/makit/tasks/test.rb +22 -22
- data/lib/makit/tasks/update.rb +21 -21
- data/lib/makit/tasks/version.rb +6 -6
- data/lib/makit/tasks.rb +24 -24
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
- data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
- data/lib/makit/v1/makit.v1_pb.rb +35 -35
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
- data/lib/makit/version.rb +661 -661
- 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 +119 -119
- metadata +2 -2
data/lib/makit/dotnet.rb
CHANGED
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "dotnet/solution"
|
|
4
|
-
require_relative "dotnet/project"
|
|
5
|
-
require_relative "dotnet/cli"
|
|
6
|
-
|
|
7
|
-
module Makit
|
|
8
|
-
# Main interface for .NET operations, providing a unified API for project management,
|
|
9
|
-
# solution handling, and CLI operations.
|
|
10
|
-
#
|
|
11
|
-
# This class serves as a backward-compatible facade that delegates to the organized
|
|
12
|
-
# DotNet::Project, DotNet::Solution, and DotNet::CLI classes while maintaining
|
|
13
|
-
# the existing public API.
|
|
14
|
-
#
|
|
15
|
-
# @example Basic usage
|
|
16
|
-
# Makit::DotNet.new_project("console", "MyApp", "src")
|
|
17
|
-
# Makit::DotNet.build("src/MyApp.csproj")
|
|
18
|
-
#
|
|
19
|
-
class DotNet
|
|
20
|
-
# Backward compatibility methods - delegate to appropriate classes
|
|
21
|
-
# These methods maintain the existing API while using the new organized structure
|
|
22
|
-
|
|
23
|
-
# Project-related methods
|
|
24
|
-
def self.installed?
|
|
25
|
-
Project.installed?
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Backward compatibility - deprecated method name
|
|
29
|
-
def self.is_installed?
|
|
30
|
-
installed?
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def self.version
|
|
34
|
-
Project.version
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def self.project_short_name(project_path)
|
|
38
|
-
Project.project_short_name(project_path)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def self.new_project(template, name, output, args = "")
|
|
42
|
-
Project.new_project(template, name, output, args)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def self.set_project_target_framework(project_hint, target_framework)
|
|
46
|
-
Project.set_project_target_framework(project_hint, target_framework)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def self.find_project(project_hint)
|
|
50
|
-
Project.find_project(project_hint)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def self.add_package(project_path, package_name)
|
|
54
|
-
Project.add_package(project_path, package_name)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def self.add_packages(project_path, packages)
|
|
58
|
-
Project.add_packages(project_path, packages)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def self.add_reference(project_path, reference_path)
|
|
62
|
-
Project.add_reference(project_path, reference_path)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def self.add_references(project_path, references)
|
|
66
|
-
Project.add_references(project_path, references)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def self.build(project_path, configuration = "Release", output = "artifacts")
|
|
70
|
-
Project.build(project_path, configuration, output)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def self.publish(project_path, configuration = "Release", output = "artifacts")
|
|
74
|
-
Project.publish(project_path, configuration, output)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def self.test(project_path, configuration = "Release", output = "artifacts")
|
|
78
|
-
Project.test(project_path, configuration, output)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def self.format_project(project_path)
|
|
82
|
-
Project.format_project(project_path)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def self.upgrade_project(project_path)
|
|
86
|
-
Project.upgrade_project(project_path)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
# CLI-related methods
|
|
90
|
-
def self.new_solution(name)
|
|
91
|
-
CLI.new_solution(name)
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def self.sln_add_projects(sln_name)
|
|
95
|
-
CLI.sln_add_projects(sln_name)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def self.generate_docs
|
|
99
|
-
CLI.generate_docs
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def self.install_global_tool(tool_name)
|
|
103
|
-
CLI.install_global_tool(tool_name)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def self.update_global_tool(tool_name)
|
|
107
|
-
CLI.update_global_tool(tool_name)
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "dotnet/solution"
|
|
4
|
+
require_relative "dotnet/project"
|
|
5
|
+
require_relative "dotnet/cli"
|
|
6
|
+
|
|
7
|
+
module Makit
|
|
8
|
+
# Main interface for .NET operations, providing a unified API for project management,
|
|
9
|
+
# solution handling, and CLI operations.
|
|
10
|
+
#
|
|
11
|
+
# This class serves as a backward-compatible facade that delegates to the organized
|
|
12
|
+
# DotNet::Project, DotNet::Solution, and DotNet::CLI classes while maintaining
|
|
13
|
+
# the existing public API.
|
|
14
|
+
#
|
|
15
|
+
# @example Basic usage
|
|
16
|
+
# Makit::DotNet.new_project("console", "MyApp", "src")
|
|
17
|
+
# Makit::DotNet.build("src/MyApp.csproj")
|
|
18
|
+
#
|
|
19
|
+
class DotNet
|
|
20
|
+
# Backward compatibility methods - delegate to appropriate classes
|
|
21
|
+
# These methods maintain the existing API while using the new organized structure
|
|
22
|
+
|
|
23
|
+
# Project-related methods
|
|
24
|
+
def self.installed?
|
|
25
|
+
Project.installed?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Backward compatibility - deprecated method name
|
|
29
|
+
def self.is_installed?
|
|
30
|
+
installed?
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.version
|
|
34
|
+
Project.version
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.project_short_name(project_path)
|
|
38
|
+
Project.project_short_name(project_path)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.new_project(template, name, output, args = "")
|
|
42
|
+
Project.new_project(template, name, output, args)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.set_project_target_framework(project_hint, target_framework)
|
|
46
|
+
Project.set_project_target_framework(project_hint, target_framework)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self.find_project(project_hint)
|
|
50
|
+
Project.find_project(project_hint)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def self.add_package(project_path, package_name)
|
|
54
|
+
Project.add_package(project_path, package_name)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.add_packages(project_path, packages)
|
|
58
|
+
Project.add_packages(project_path, packages)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.add_reference(project_path, reference_path)
|
|
62
|
+
Project.add_reference(project_path, reference_path)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.add_references(project_path, references)
|
|
66
|
+
Project.add_references(project_path, references)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.build(project_path, configuration = "Release", output = "artifacts")
|
|
70
|
+
Project.build(project_path, configuration, output)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def self.publish(project_path, configuration = "Release", output = "artifacts")
|
|
74
|
+
Project.publish(project_path, configuration, output)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.test(project_path, configuration = "Release", output = "artifacts")
|
|
78
|
+
Project.test(project_path, configuration, output)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def self.format_project(project_path)
|
|
82
|
+
Project.format_project(project_path)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def self.upgrade_project(project_path)
|
|
86
|
+
Project.upgrade_project(project_path)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# CLI-related methods
|
|
90
|
+
def self.new_solution(name)
|
|
91
|
+
CLI.new_solution(name)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def self.sln_add_projects(sln_name)
|
|
95
|
+
CLI.sln_add_projects(sln_name)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def self.generate_docs
|
|
99
|
+
CLI.generate_docs
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def self.install_global_tool(tool_name)
|
|
103
|
+
CLI.install_global_tool(tool_name)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def self.update_global_tool(tool_name)
|
|
107
|
+
CLI.update_global_tool(tool_name)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
data/lib/makit/email.rb
CHANGED
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Makit
|
|
4
|
-
# Provides email functionality for sending notifications and reports.
|
|
5
|
-
#
|
|
6
|
-
# This class handles SMTP configuration and email delivery, with built-in support
|
|
7
|
-
# for Gmail SMTP and graceful handling when the mail gem is not available.
|
|
8
|
-
#
|
|
9
|
-
# @example Basic usage
|
|
10
|
-
# email = Makit::Email.new
|
|
11
|
-
# email.configure_gmail_defaults
|
|
12
|
-
# email.send(subject: "Build Complete", body: "Your build finished successfully")
|
|
13
|
-
#
|
|
14
|
-
class Email
|
|
15
|
-
begin
|
|
16
|
-
require "mail"
|
|
17
|
-
MAIL_AVAILABLE = true
|
|
18
|
-
rescue LoadError
|
|
19
|
-
MAIL_AVAILABLE = false
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def configure_gmail_defaults
|
|
23
|
-
unless MAIL_AVAILABLE
|
|
24
|
-
raise LoadError, "Mail gem is not available. Add 'mail' to your Gemfile to use email functionality."
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
Mail.defaults do
|
|
28
|
-
delivery_method :smtp, {
|
|
29
|
-
address: "smtp.gmail.com",
|
|
30
|
-
port: 587,
|
|
31
|
-
domain: "gmail.com",
|
|
32
|
-
user_name: ENV.fetch("SMTP_USERNAME", nil),
|
|
33
|
-
password: ENV.fetch("SMTP_PASSWORD", nil),
|
|
34
|
-
authentication: "plain",
|
|
35
|
-
enable_starttls_auto: true,
|
|
36
|
-
}
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def send_test_email(subject:, body:, to: ENV.fetch("MAKIT_EMAIL_RECIPIENT", nil))
|
|
41
|
-
unless MAIL_AVAILABLE
|
|
42
|
-
raise LoadError, "Mail gem is not available. Add 'mail' to your Gemfile to use email functionality."
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
raise ArgumentError, "Recipient email not set. Please set MAKIT_EMAIL_RECIPIENT environment variable" unless to
|
|
46
|
-
|
|
47
|
-
mail = Mail.new do
|
|
48
|
-
from ENV.fetch("SMTP_USERNAME", nil)
|
|
49
|
-
to to
|
|
50
|
-
subject subject
|
|
51
|
-
body body
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
begin
|
|
55
|
-
mail.deliver!
|
|
56
|
-
true
|
|
57
|
-
rescue StandardError => e
|
|
58
|
-
puts "Failed to send email: #{e.message}"
|
|
59
|
-
false
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def send(subject:, body:)
|
|
64
|
-
send_to(to: ENV.fetch("MAKIT_EMAIL_RECIPIENT", nil), subject: subject, body: body)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def send_to(to:, subject:, body:)
|
|
68
|
-
unless MAIL_AVAILABLE
|
|
69
|
-
raise LoadError, "Mail gem is not available. Add 'mail' to your Gemfile to use email functionality."
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
raise ArgumentError, "Recipient email not set" unless to
|
|
73
|
-
|
|
74
|
-
mail = Mail.new do
|
|
75
|
-
from ENV.fetch("SMTP_USERNAME", nil)
|
|
76
|
-
to to
|
|
77
|
-
subject subject
|
|
78
|
-
body body
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
begin
|
|
82
|
-
mail.deliver!
|
|
83
|
-
true
|
|
84
|
-
rescue StandardError => e
|
|
85
|
-
puts "Failed to send email: #{e.message}"
|
|
86
|
-
false
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Makit
|
|
4
|
+
# Provides email functionality for sending notifications and reports.
|
|
5
|
+
#
|
|
6
|
+
# This class handles SMTP configuration and email delivery, with built-in support
|
|
7
|
+
# for Gmail SMTP and graceful handling when the mail gem is not available.
|
|
8
|
+
#
|
|
9
|
+
# @example Basic usage
|
|
10
|
+
# email = Makit::Email.new
|
|
11
|
+
# email.configure_gmail_defaults
|
|
12
|
+
# email.send(subject: "Build Complete", body: "Your build finished successfully")
|
|
13
|
+
#
|
|
14
|
+
class Email
|
|
15
|
+
begin
|
|
16
|
+
require "mail"
|
|
17
|
+
MAIL_AVAILABLE = true
|
|
18
|
+
rescue LoadError
|
|
19
|
+
MAIL_AVAILABLE = false
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def configure_gmail_defaults
|
|
23
|
+
unless MAIL_AVAILABLE
|
|
24
|
+
raise LoadError, "Mail gem is not available. Add 'mail' to your Gemfile to use email functionality."
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Mail.defaults do
|
|
28
|
+
delivery_method :smtp, {
|
|
29
|
+
address: "smtp.gmail.com",
|
|
30
|
+
port: 587,
|
|
31
|
+
domain: "gmail.com",
|
|
32
|
+
user_name: ENV.fetch("SMTP_USERNAME", nil),
|
|
33
|
+
password: ENV.fetch("SMTP_PASSWORD", nil),
|
|
34
|
+
authentication: "plain",
|
|
35
|
+
enable_starttls_auto: true,
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def send_test_email(subject:, body:, to: ENV.fetch("MAKIT_EMAIL_RECIPIENT", nil))
|
|
41
|
+
unless MAIL_AVAILABLE
|
|
42
|
+
raise LoadError, "Mail gem is not available. Add 'mail' to your Gemfile to use email functionality."
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
raise ArgumentError, "Recipient email not set. Please set MAKIT_EMAIL_RECIPIENT environment variable" unless to
|
|
46
|
+
|
|
47
|
+
mail = Mail.new do
|
|
48
|
+
from ENV.fetch("SMTP_USERNAME", nil)
|
|
49
|
+
to to
|
|
50
|
+
subject subject
|
|
51
|
+
body body
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
begin
|
|
55
|
+
mail.deliver!
|
|
56
|
+
true
|
|
57
|
+
rescue StandardError => e
|
|
58
|
+
puts "Failed to send email: #{e.message}"
|
|
59
|
+
false
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def send(subject:, body:)
|
|
64
|
+
send_to(to: ENV.fetch("MAKIT_EMAIL_RECIPIENT", nil), subject: subject, body: body)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def send_to(to:, subject:, body:)
|
|
68
|
+
unless MAIL_AVAILABLE
|
|
69
|
+
raise LoadError, "Mail gem is not available. Add 'mail' to your Gemfile to use email functionality."
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
raise ArgumentError, "Recipient email not set" unless to
|
|
73
|
+
|
|
74
|
+
mail = Mail.new do
|
|
75
|
+
from ENV.fetch("SMTP_USERNAME", nil)
|
|
76
|
+
to to
|
|
77
|
+
subject subject
|
|
78
|
+
body body
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
begin
|
|
82
|
+
mail.deliver!
|
|
83
|
+
true
|
|
84
|
+
rescue StandardError => e
|
|
85
|
+
puts "Failed to send email: #{e.message}"
|
|
86
|
+
false
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|