makit 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
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