makit 0.0.0

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.
Files changed (80) hide show
  1. checksums.yaml +7 -0
  2. data/.makit.project.json +4 -0
  3. data/.makit.project.yml +2 -0
  4. data/.rubocop.yml +22 -0
  5. data/.ruby-version +1 -0
  6. data/CHANGELOG.md +8 -0
  7. data/CODE_OF_CONDUCT.md +84 -0
  8. data/LICENSE +21 -0
  9. data/README.md +119 -0
  10. data/Rakefile +190 -0
  11. data/docs/Commands.md +50 -0
  12. data/docs_/Commands.md +166 -0
  13. data/docs_/Minitest.Timeouts.md +332 -0
  14. data/examples/protoc/Rakefile +31 -0
  15. data/examples/rake_default/Rakefile +5 -0
  16. data/examples/rubygem-foo/.gitkeep +0 -0
  17. data/examples/rubygem-foo/Rakefile +3 -0
  18. data/examples/run_mp/Rakefile +8 -0
  19. data/exe/makit +5 -0
  20. data/lib/makit/apache.rb +32 -0
  21. data/lib/makit/cli/clean.rb +14 -0
  22. data/lib/makit/cli/clone.rb +59 -0
  23. data/lib/makit/cli/init.rb +38 -0
  24. data/lib/makit/cli/main.rb +33 -0
  25. data/lib/makit/cli/make.rb +54 -0
  26. data/lib/makit/cli/new.rb +37 -0
  27. data/lib/makit/cli/nuget_cache.rb +38 -0
  28. data/lib/makit/cli/pull.rb +31 -0
  29. data/lib/makit/cli/setup.rb +71 -0
  30. data/lib/makit/cli/work.rb +21 -0
  31. data/lib/makit/command_runner.rb +237 -0
  32. data/lib/makit/commands.rb +21 -0
  33. data/lib/makit/content/default_gitignore.rb +5 -0
  34. data/lib/makit/content/default_gitignore.txt +222 -0
  35. data/lib/makit/content/default_rakefile.rb +11 -0
  36. data/lib/makit/content/gem_rakefile.rb +14 -0
  37. data/lib/makit/content/ruby_gitlab-ci.yml +15 -0
  38. data/lib/makit/data.rb +50 -0
  39. data/lib/makit/directories.rb +140 -0
  40. data/lib/makit/directory.rb +120 -0
  41. data/lib/makit/dotnet.rb +16 -0
  42. data/lib/makit/environment.rb +123 -0
  43. data/lib/makit/files.rb +47 -0
  44. data/lib/makit/git.rb +66 -0
  45. data/lib/makit/gitlab_runner.rb +60 -0
  46. data/lib/makit/humanize.rb +89 -0
  47. data/lib/makit/logging.rb +96 -0
  48. data/lib/makit/markdown.rb +75 -0
  49. data/lib/makit/mp/basic_object_mp.rb +16 -0
  50. data/lib/makit/mp/project_mp.rb +160 -0
  51. data/lib/makit/mp/string_mp.rb +101 -0
  52. data/lib/makit/nuget.rb +57 -0
  53. data/lib/makit/protoc.rb +61 -0
  54. data/lib/makit/serializer.rb +70 -0
  55. data/lib/makit/storage.rb +131 -0
  56. data/lib/makit/symbols.rb +149 -0
  57. data/lib/makit/tasks.rb +63 -0
  58. data/lib/makit/tree.rb +37 -0
  59. data/lib/makit/v1/makit.v1.proto +103 -0
  60. data/lib/makit/v1/makit.v1_pb.rb +30 -0
  61. data/lib/makit/v1/makit.v1_services_pb.rb +26 -0
  62. data/lib/makit/version.rb +12 -0
  63. data/lib/makit/wix.rb +92 -0
  64. data/lib/makit/zip.rb +17 -0
  65. data/lib/makit.rb +243 -0
  66. data/makit.generated.sln +30 -0
  67. data/makit.sln +69 -0
  68. data/pages/.gitignore +5 -0
  69. data/pages/404.html +25 -0
  70. data/pages/Gemfile +33 -0
  71. data/pages/Gemfile.lock +88 -0
  72. data/pages/_config.yml +55 -0
  73. data/pages/_layouts/default.html +1 -0
  74. data/pages/_posts/2024-10-05-welcome-to-jekyll.markdown +29 -0
  75. data/pages/about.markdown +18 -0
  76. data/pages/index.markdown +6 -0
  77. data/sig/makit.rbs +4 -0
  78. data/src/ClassLib/Class1.cs +6 -0
  79. data/src/ClassLib/ClassLib.csproj +13 -0
  80. metadata +251 -0
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rainbow"
4
+
5
+ # https://symbl.cc/en/unicode/table/
6
+ module Makit
7
+ class Symbols
8
+ def self.checkmark
9
+ "\u2713"
10
+ end
11
+
12
+ def self.success
13
+ "\u2713"
14
+ end
15
+
16
+ def self.error
17
+ Rainbow("\u0058").red
18
+ end
19
+
20
+ def self.warning
21
+ Rainbow("\u26A0").yellow
22
+ end
23
+
24
+ def self.debug
25
+ Rainbow("\u24D8").blue # Circle with "i"
26
+ end
27
+
28
+ def self.info
29
+ Rainbow("\u2139").blue # Information source
30
+ end
31
+
32
+ def self.fatal
33
+ Rainbow("\u25A0").bright.red # Filled square, indicating stop/critical
34
+ end
35
+
36
+ def self.warn
37
+ Rainbow("\u26A0").yellow # Warning sign
38
+ end
39
+
40
+ def self.star
41
+ Rainbow("\u2605").yellow # Star
42
+ end
43
+
44
+ def self.coffee
45
+ Rainbow("\u2615").yellow # Hot beverage
46
+ end
47
+
48
+ def self.heart
49
+ Rainbow("\u2764").red # Heavy black heart
50
+ end
51
+
52
+ def self.bug
53
+ Rainbow("\u1F41E").yellow # Bug
54
+ end
55
+
56
+ def self.gear
57
+ Rainbow("\u2699").yellow # Gear
58
+ end
59
+
60
+ def self.magnifying_glass
61
+ Rainbow("\u1F50D").yellow # Left-pointing magnifying glass
62
+ end
63
+
64
+ def self.question
65
+ Rainbow("\u003F").yellow # Question mark
66
+ end
67
+
68
+ def self.arrow_right
69
+ Rainbow("\u27A4").yellow # Arrow pointing rightwards then curving upwards
70
+ end
71
+
72
+ def self.arrow_left
73
+ Rainbow("\u2B05").yellow # Left arrow
74
+ end
75
+
76
+ def self.arrow_up
77
+ Rainbow("\u2B06").yellow # Up arrow
78
+ end
79
+
80
+ def self.arrow_down
81
+ Rainbow("\u2B07").yellow # Down arrow
82
+ end
83
+
84
+ def self.arrow_up_down
85
+ Rainbow("\u2195").yellow # Up/down arrow
86
+ end
87
+
88
+ def self.arrow_left_right
89
+ Rainbow("\u2194").yellow # Left/right arrow
90
+ end
91
+
92
+ def self.arrow_upper_right
93
+ Rainbow("\u2197").yellow # North east arrow
94
+ end
95
+
96
+ def self.arrow_lower_right
97
+ Rainbow("\u2198").yellow # South east arrow
98
+ end
99
+
100
+ def self.arrow_lower_left
101
+ Rainbow("\u2199").yellow # South west arrow
102
+ end
103
+
104
+ def self.arrow_upper_left
105
+ Rainbow("\u2196").yellow # North west arrow
106
+ end
107
+
108
+ def self.arrow_up_small
109
+ Rainbow("\u2B06").yellow # Up arrow
110
+ end
111
+
112
+ def self.arrow_down_small
113
+ Rainbow("\u2B07").yellow # Down arrow
114
+ end
115
+
116
+ def self.arrow_right_small
117
+ Rainbow("\u27A1").yellow # Black rightwards arrow
118
+ end
119
+
120
+ def self.arrow_left_small
121
+ Rainbow("\u2B05").yellow # Left arrow
122
+ end
123
+
124
+ def self.arrow_up_down_small
125
+ Rainbow("\u2195").yellow # Up/down arrow
126
+ end
127
+
128
+ def self.music
129
+ Rainbow("\u266B").yellow # Beamed eighth notes
130
+ end
131
+
132
+ def self.get_severity_symbol(severity)
133
+ case severity
134
+ when "DEBUG"
135
+ question
136
+ # when "INFO"
137
+ # info
138
+ when "WARN"
139
+ warning
140
+ when "ERROR"
141
+ error
142
+ when "FATAL"
143
+ fatal
144
+ else
145
+ " "
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+ require "digest"
3
+ require "rake/clean"
4
+ #require "sqlite3"
5
+
6
+ # Register the at_exit hook for cleanup
7
+ at_exit do
8
+ puts "Performing cleanup for Makit..."
9
+ # Add your cleanup code here
10
+ # For example, close files, remove temporary files, etc.
11
+ # store current state of Makit::PROJECT to a file
12
+ #json_filename = File.join(Makit::Directories::PROJECT_ROOT, ".makit.project.json")
13
+ #puts "Saving project state to #{json_filename}"
14
+ #Makit::PROJECT.save_as(json_filename)
15
+ yml_filename = File.join(Makit::Directories::PROJECT_ROOT, ".makit.project.yml")
16
+ puts "Saving project state to #{yml_filename}"
17
+ Makit::PROJECT.save_as(yml_filename)
18
+ end
19
+
20
+ # This module provides classes for the Makit gem.
21
+ module Makit
22
+ # This class provide methods for managing persistent data for the makit gem
23
+ class Tasks
24
+ def self.run_default_commands(task_name)
25
+ Makit::LOGGER.debug("Running default commands for task: #{task_name}")
26
+ end
27
+ end
28
+ end
29
+
30
+ desc "Remove any temporary products."
31
+ task :clean do
32
+ puts ":clean".colorize(:blue)
33
+ Makit::RUNNER.run(Makit::RUNNER.parse_command_request("git clean -dXf"))
34
+ end
35
+
36
+ desc "Integrate changes into the git repository."
37
+ task :integrate do
38
+ puts ":integrate".colorize(:blue)
39
+ Makit::Git.integrate
40
+ end
41
+
42
+ desc "Sync changes with the git repository."
43
+ task :sync do
44
+ puts ":sync".colorize(:blue)
45
+ Makit::Git.sync
46
+ end
47
+
48
+ desc "Format source code."
49
+ task :format do
50
+ puts ":format".colorize(:blue)
51
+ Makit::RUNNER.try("rufo .") if File.exist?("Gemfile") || File.exist?("Rakefile")
52
+ end
53
+
54
+ desc "Update dependencies."
55
+ task :update do
56
+ puts ":update".colorize(:blue)
57
+ system("bundle update") if File.exist?("Gemfile")
58
+ # glob all *.csproj files
59
+ Dir.glob("**/*.csproj").each do |file|
60
+ "dotnet format #{file}".run
61
+ end
62
+ end
63
+
data/lib/makit/tree.rb ADDED
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This module provides classes for the Makit gem.
4
+ module Makit
5
+ class Tree
6
+ def get_source_tree
7
+ files = `git ls-files`.split("\n")
8
+ tree = {}
9
+
10
+ # Build a nested hash representing the file structure
11
+ files.each do |file|
12
+ parts = file.split("/")
13
+ current = tree
14
+
15
+ parts.each_with_index do |part, index|
16
+ current[part] ||= (index == parts.length - 1 ? nil : {})
17
+ current = current[part] unless current[part].nil?
18
+ end
19
+ end
20
+
21
+ generate_tree_string(tree)
22
+ end
23
+
24
+ def generate_tree_string(tree, indent = "")
25
+ result = ""
26
+ tree.each do |key, value|
27
+ if value.is_a?(Hash)
28
+ result << "#{indent}#{key}/\n"
29
+ result << generate_tree_string(value, "#{indent} ")
30
+ else
31
+ result << "#{indent}#{key}\n"
32
+ end
33
+ end
34
+ result
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,103 @@
1
+ syntax = "proto3";
2
+
3
+ package makit.v1;
4
+
5
+ import "google/protobuf/timestamp.proto";
6
+ import "google/protobuf/duration.proto";
7
+
8
+
9
+ // docker run -p 9011:9011 -v /tmp/liget-set/:/data tomzo/liget:latest
10
+
11
+ enum Language {
12
+ RUBY = 0;
13
+ CSHARP = 1;
14
+ RUST = 2;
15
+ }
16
+
17
+ message DotNetProject{
18
+ string template = 1;
19
+ string name = 2;
20
+ string output = 3;
21
+ }
22
+
23
+ message Project {
24
+ string git_remote_url = 1;
25
+ string name = 2;
26
+ repeated DotNetProject dotnet_projects = 5;
27
+ }
28
+
29
+
30
+
31
+ enum PackageType{
32
+ GEM = 0;
33
+ NUGET = 1;
34
+ CRATE = 3;
35
+ }
36
+
37
+ message CommandRequest {
38
+ string name = 1;
39
+ repeated string arguments = 2;
40
+ google.protobuf.Timestamp timeout = 3;
41
+ string directory = 4;
42
+ string task = 5;
43
+ bytes input = 6;
44
+ bool exit_on_error = 7;
45
+ }
46
+
47
+ // Command represents a command to be executed on a device.
48
+ message Command {
49
+ int64 id = 1;
50
+ string name = 2;
51
+ repeated string arguments = 3;
52
+ int32 exit_code = 4;
53
+ bytes input = 5;
54
+ bytes output = 6;
55
+ bytes error = 7;
56
+ google.protobuf.Timestamp started_at = 8;
57
+ google.protobuf.Duration duration = 9;
58
+ string user = 10;
59
+ string device = 11;
60
+ string os = 12;
61
+ string directory = 13;
62
+ }
63
+
64
+ // Service to execute commands on devices.
65
+ service CommandService {
66
+ // Execute a command on a device.
67
+ rpc Execute(CommandRequest) returns (Command);
68
+ }
69
+
70
+ message Configuration {
71
+ string name = 1;
72
+ repeated CommandRequest commands = 2;
73
+ }
74
+
75
+ message GitRepository {
76
+ string url = 1;
77
+ string relative_path = 2;
78
+ }
79
+
80
+ message GitLogEntry{
81
+ string commit = 1;
82
+ string author = 2;
83
+ google.protobuf.Timestamp date = 3;
84
+ string message = 4;
85
+ }
86
+
87
+ message MakeResult{
88
+ string repository = 1;
89
+ string commit = 2;
90
+ string branch = 3;
91
+ string tag = 4;
92
+ string device = 5;
93
+ string runtime_identifier = 6;
94
+ repeated Command commands = 7;
95
+ int32 initial_size = 8;
96
+ int32 final_size = 9;
97
+ }
98
+
99
+ message DotNetNewArgs{
100
+ string template = 1;
101
+ string name = 2;
102
+ string output = 3;
103
+ }
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: lib/makit/v1/makit.v1.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'google/protobuf/timestamp_pb'
8
+ require 'google/protobuf/duration_pb'
9
+
10
+
11
+ descriptor_data = "\n\x1blib/makit/v1/makit.v1.proto\x12\x08makit.v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\"?\n\rDotNetProject\x12\x10\n\x08template\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06output\x18\x03 \x01(\t\"a\n\x07Project\x12\x16\n\x0egit_remote_url\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x30\n\x0f\x64otnet_projects\x18\x05 \x03(\x0b\x32\x17.makit.v1.DotNetProject\"\xa5\x01\n\x0e\x43ommandRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\targuments\x18\x02 \x03(\t\x12+\n\x07timeout\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x11\n\tdirectory\x18\x04 \x01(\t\x12\x0c\n\x04task\x18\x05 \x01(\t\x12\r\n\x05input\x18\x06 \x01(\x0c\x12\x15\n\rexit_on_error\x18\x07 \x01(\x08\"\x91\x02\n\x07\x43ommand\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\targuments\x18\x03 \x03(\t\x12\x11\n\texit_code\x18\x04 \x01(\x05\x12\r\n\x05input\x18\x05 \x01(\x0c\x12\x0e\n\x06output\x18\x06 \x01(\x0c\x12\r\n\x05\x65rror\x18\x07 \x01(\x0c\x12.\n\nstarted_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12+\n\x08\x64uration\x18\t \x01(\x0b\x32\x19.google.protobuf.Duration\x12\x0c\n\x04user\x18\n \x01(\t\x12\x0e\n\x06\x64\x65vice\x18\x0b \x01(\t\x12\n\n\x02os\x18\x0c \x01(\t\x12\x11\n\tdirectory\x18\r \x01(\t\"I\n\rConfiguration\x12\x0c\n\x04name\x18\x01 \x01(\t\x12*\n\x08\x63ommands\x18\x02 \x03(\x0b\x32\x18.makit.v1.CommandRequest\"3\n\rGitRepository\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x15\n\rrelative_path\x18\x02 \x01(\t\"h\n\x0bGitLogEntry\x12\x0e\n\x06\x63ommit\x18\x01 \x01(\t\x12\x0e\n\x06\x61uthor\x18\x02 \x01(\t\x12(\n\x04\x64\x61te\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07message\x18\x04 \x01(\t\"\xc8\x01\n\nMakeResult\x12\x12\n\nrepository\x18\x01 \x01(\t\x12\x0e\n\x06\x63ommit\x18\x02 \x01(\t\x12\x0e\n\x06\x62ranch\x18\x03 \x01(\t\x12\x0b\n\x03tag\x18\x04 \x01(\t\x12\x0e\n\x06\x64\x65vice\x18\x05 \x01(\t\x12\x1a\n\x12runtime_identifier\x18\x06 \x01(\t\x12#\n\x08\x63ommands\x18\x07 \x03(\x0b\x32\x11.makit.v1.Command\x12\x14\n\x0cinitial_size\x18\x08 \x01(\x05\x12\x12\n\nfinal_size\x18\t \x01(\x05\"?\n\rDotNetNewArgs\x12\x10\n\x08template\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06output\x18\x03 \x01(\t**\n\x08Language\x12\x08\n\x04RUBY\x10\x00\x12\n\n\x06\x43SHARP\x10\x01\x12\x08\n\x04RUST\x10\x02*,\n\x0bPackageType\x12\x07\n\x03GEM\x10\x00\x12\t\n\x05NUGET\x10\x01\x12\t\n\x05\x43RATE\x10\x03\x32H\n\x0e\x43ommandService\x12\x36\n\x07\x45xecute\x12\x18.makit.v1.CommandRequest\x1a\x11.makit.v1.Commandb\x06proto3"
12
+
13
+ pool = Google::Protobuf::DescriptorPool.generated_pool
14
+ pool.add_serialized_file(descriptor_data)
15
+
16
+ module Makit
17
+ module V1
18
+ DotNetProject = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.DotNetProject").msgclass
19
+ Project = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.Project").msgclass
20
+ CommandRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.CommandRequest").msgclass
21
+ Command = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.Command").msgclass
22
+ Configuration = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.Configuration").msgclass
23
+ GitRepository = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.GitRepository").msgclass
24
+ GitLogEntry = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.GitLogEntry").msgclass
25
+ MakeResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.MakeResult").msgclass
26
+ DotNetNewArgs = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.DotNetNewArgs").msgclass
27
+ Language = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.Language").enummodule
28
+ PackageType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("makit.v1.PackageType").enummodule
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # Source: lib/makit/v1/makit.v1.proto for package 'makit.v1'
3
+
4
+ require 'grpc'
5
+ require_relative 'makit.v1_pb'
6
+
7
+ module Makit
8
+ module V1
9
+ module CommandService
10
+ # Service to execute commands on devices.
11
+ class Service
12
+
13
+ include ::GRPC::GenericService
14
+
15
+ self.marshal_class_method = :encode
16
+ self.unmarshal_class_method = :decode
17
+ self.service_name = 'makit.v1.CommandService'
18
+
19
+ # Execute a command on a device.
20
+ rpc :Execute, ::Makit::V1::CommandRequest, ::Makit::V1::Command
21
+ end
22
+
23
+ Stub = Service.rpc_stub_class
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Makit
4
+ VERSION = "0.0.0"
5
+
6
+ class Version
7
+ # given an array of version strings, return the highest version
8
+ def self.get_highest_version(versions)
9
+ versions.sort { |a, b| Gem::Version.new(a) <=> Gem::Version.new(b) }.last
10
+ end
11
+ end
12
+ end
data/lib/makit/wix.rb ADDED
@@ -0,0 +1,92 @@
1
+ require "securerandom"
2
+
3
+ module Makit
4
+ # This class provide methods for working with the Nuget package cache
5
+ #
6
+ # Example:
7
+ #
8
+ # Makit::Directory.cache("Google.Protobuf", "3.27.2")
9
+ #
10
+ # dotnet nuget locals all --list
11
+ # dotnet nuget locals all --clear
12
+ #
13
+ class Wix
14
+ def self.setup
15
+ if (Makit::Environment.is_windows?)
16
+ # test if dotnet is installed
17
+ if !Makit::DotNet::is_installed? # !File.exist?(Makit::Environment.which("dotnet"))
18
+ puts "dotnet does not appear to be installed"
19
+ else
20
+ "dotnet tool install --global wix".run
21
+ puts " Wix version " + "#{Wix::version}".colorize(:green)
22
+ # display the link to https://wixtoolset.org/
23
+ puts " https://wixtoolset.org/".colorize(:green)
24
+ # display the link to https://marketplace.visualstudio.com/items?itemName=FireGiant.FireGiantHeatWaveDev17
25
+ puts " https://marketplace.visualstudio.com/items?itemName=FireGiant.FireGiantHeatWaveDev17".colorize(:green)
26
+ end
27
+ else
28
+ puts "Wix is not supported on non-Windows platforms"
29
+ end
30
+ end
31
+
32
+ def self.version
33
+ `wix --version`.strip.split("+").first
34
+ end
35
+
36
+ def self.setup_package(name, path, files)
37
+ # create the path if it does not exist
38
+ FileUtils.mkdir_p(path) unless File.directory?(path)
39
+ # create the #{name}.wixproj file
40
+ File.open("#{path}/#{name}.wixproj", "w") do |f|
41
+ f.puts "<Project Sdk=\"WixToolset.Sdk/#{Wix::version}\">"
42
+ f.puts "</Project>"
43
+ end
44
+ # create the Package.wxs file
45
+ File.open("#{path}/Package.wxs", "w") do |f|
46
+ f.puts "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\">"
47
+ f.puts " <Package Name=\"#{name}\" Manufacturer=\"Acme\" Version=\"0.0.0.0\" UpgradeCode=\"#{SecureRandom.uuid}\">"
48
+ #f.puts " <MajorUpgrade DowngradeErrorMessage=\"!(loc.DowngradeError)\" />"
49
+ f.puts " <Files Include=\"#{files}\" />"
50
+ #f.puts " <Feature Id=\"Main\">"
51
+ #f.puts " <ComponentGroupRef Id=\"Components\" />"
52
+ #f.puts " </Feature>"
53
+ f.puts " </Package>"
54
+ f.puts "</Wix>"
55
+ end
56
+ end
57
+ end # class Wix
58
+ end # module Makit
59
+
60
+ # Package.wxs with File harvesting
61
+ #<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
62
+ # <Package Name="MyProduct" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="B0B15C00-1DC4-0374-A1D1-E902240936D5">
63
+ # <Files Include="path\to\files\**" />
64
+ # </Package>
65
+ #</Wix>
66
+
67
+ #<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
68
+ # <Package Name="Msi.Demo" Manufacturer="Acme" Version="1.0.0.0" UpgradeCode="a87571ec-8be3-447e-ae23-b3a94a85b727">
69
+ # <MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
70
+
71
+ # <Feature Id="Main">
72
+ # <ComponentGroupRef Id="Components" />
73
+ # </Feature>
74
+ # </Package>
75
+ #</Wix>
76
+
77
+ #<Project Sdk="WixToolset.Sdk/5.0.1">
78
+ #</Project>
79
+
80
+ # Components.wxs
81
+ #<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
82
+ # <Fragment>
83
+ # <ComponentGroup Id="Components" Directory="INSTALLFOLDER">
84
+ # <Component Guid="b8085fb3-3718-46df-8bf6-ecf9f968dd3d">
85
+ # <File Source="../../artifacts/Msi.Demo.exe" />
86
+ # <File Source="../../artifacts/Msi.Demo.dll" />
87
+ # <File Source="../../artifacts/Msi.Demo.deps.json" />
88
+ # <File Source="../../artifacts/Msi.Demo.runtimeconfig.json" />
89
+ # </Component>
90
+ # </ComponentGroup>
91
+ # </Fragment>
92
+ #</Wix>
data/lib/makit/zip.rb ADDED
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "zip"
4
+ require "fileutils"
5
+
6
+ module Makit
7
+ # Zip a directory
8
+ class Zip
9
+ def self.zip_directory(directory, zip_file)
10
+ ::Zip::File.open(zip_file, ::Zip::File::CREATE) do |zipfile|
11
+ Dir[File.join(directory, "**", "**")].each do |file|
12
+ zipfile.add(file.sub("#{directory}/", ""), file)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end