rakit 0.1.4 → 0.1.6
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/exe/rakit +104 -0
- data/lib/generated/data_pb.rb +1 -2
- data/lib/generated/rakit.azure_pb.rb +26 -0
- data/lib/generated/{example_pb.rb → rakit.example_pb.rb} +4 -3
- data/lib/generated/rakit.file_pb.rb +22 -0
- data/lib/generated/rakit.shell_pb.rb +22 -0
- data/lib/generated/rakit.static_web_server_pb.rb +20 -0
- data/lib/generated/rakit.word_count_pb.rb +22 -0
- data/lib/rakit/azure/dev_ops.rb +1 -1
- data/lib/rakit/cli/file.rb +163 -0
- data/lib/rakit/cli/word_count.rb +131 -0
- data/lib/rakit/file.rb +181 -0
- data/lib/rakit/gem.rb +87 -14
- data/lib/rakit/git.rb +10 -4
- data/lib/rakit/hugo.rb +43 -0
- data/lib/rakit/protobuf.rb +11 -9
- data/lib/rakit/shell.rb +1 -1
- data/lib/rakit/static_web_server.rb +226 -0
- data/lib/rakit/word_count.rb +122 -0
- data/lib/rakit.rb +5 -2
- metadata +25 -9
- data/lib/generated/azure.devops_pb.rb +0 -25
- data/lib/generated/shell_pb.rb +0 -22
- data/lib/rakit/data.rb +0 -173
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7270ecd6c8ca0f035dde641cc2c8713a9907f93fa837099b8b4bb5e96be528ac
|
|
4
|
+
data.tar.gz: eb0c02cd74eaa13bf8b9a3f4a6ac22506267c123138a0f718c9450c7f457432d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b83885ba425b9bef93ddc077a442da2ae567dd5986a7d7fc9260e3e09d5f05ff576d628c51ecdb8a70bd96766d6e9d6ec51c8fd7868014424aa537b45c41cec6
|
|
7
|
+
data.tar.gz: c520af4a3530456192f317e13f1b8f4d842d71be2eee8570a5d50047c389507288fff144536c089f10dcbd6d62ee58c5b90e506f715fbe6430dcb4502c2fac10
|
data/exe/rakit
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# CLI for rakit gem. Subcommands: file (list|copy), word-count (--json-keys), static-web-server (start|stop|running|publish).
|
|
5
|
+
|
|
6
|
+
require "rakit"
|
|
7
|
+
|
|
8
|
+
# Allow tests to override root via environment
|
|
9
|
+
Rakit::StaticWebServer.root = ENV["RAKIT_WWW_ROOT"] if ENV["RAKIT_WWW_ROOT"]
|
|
10
|
+
|
|
11
|
+
def usage_stderr(msg = nil)
|
|
12
|
+
$stderr.puts msg if msg
|
|
13
|
+
$stderr.puts "Usage: rakit <subcommand> [options] [args]"
|
|
14
|
+
$stderr.puts " file list <directory> [--recursive] [--include-hidden] [--format console|json|proto-json]"
|
|
15
|
+
$stderr.puts " file copy <source> <destination> [--overwrite] [--create-directories] [--format ...]"
|
|
16
|
+
$stderr.puts " word-count <file>|--stdin --json-keys [--format console|json|proto-json] [options]"
|
|
17
|
+
$stderr.puts " static-web-server <start|stop|running|publish|view> [options] [args]"
|
|
18
|
+
$stderr.puts " start [--port PORT] Start server (idempotent)"
|
|
19
|
+
$stderr.puts " stop Stop server"
|
|
20
|
+
$stderr.puts " running Exit 0 if running, non-zero otherwise"
|
|
21
|
+
$stderr.puts " publish <site_name> <source_dir> Publish static site"
|
|
22
|
+
$stderr.puts " view [path] Open path in browser (default /)"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def main(argv = ARGV)
|
|
26
|
+
return usage_stderr("Expected subcommand.") if argv.empty?
|
|
27
|
+
|
|
28
|
+
sub = argv[0]
|
|
29
|
+
if sub == "--version" || sub == "-v"
|
|
30
|
+
spec = Gem.loaded_specs["rakit"]
|
|
31
|
+
puts spec ? "#{spec.name} #{spec.version}" : "rakit (version unknown)"
|
|
32
|
+
return 0
|
|
33
|
+
end
|
|
34
|
+
if sub == "--help" || sub == "-h"
|
|
35
|
+
usage_stderr
|
|
36
|
+
return 0
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
if sub == "file"
|
|
40
|
+
argv.shift
|
|
41
|
+
require "rakit/cli/file"
|
|
42
|
+
return Rakit::CLI::File.run(argv)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
if sub == "word-count" || sub == "word_count"
|
|
46
|
+
argv.shift
|
|
47
|
+
require "rakit/cli/word_count"
|
|
48
|
+
return Rakit::CLI::WordCount.run(argv)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
if sub != "static-web-server"
|
|
52
|
+
usage_stderr("Unknown subcommand: #{sub}")
|
|
53
|
+
return 1
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
argv.shift
|
|
57
|
+
cmd = argv.shift
|
|
58
|
+
case cmd
|
|
59
|
+
when "start"
|
|
60
|
+
port = Rakit::StaticWebServer.port
|
|
61
|
+
while (arg = argv.shift)
|
|
62
|
+
if arg == "--port" && argv[0]
|
|
63
|
+
port = argv.shift.to_i
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
Rakit::StaticWebServer.start(port: port)
|
|
67
|
+
puts "http://localhost:#{port}"
|
|
68
|
+
return 0
|
|
69
|
+
when "stop"
|
|
70
|
+
Rakit::StaticWebServer.stop
|
|
71
|
+
return 0
|
|
72
|
+
when "running"
|
|
73
|
+
return Rakit::StaticWebServer.running? ? 0 : 1
|
|
74
|
+
when "publish"
|
|
75
|
+
site_name = argv.shift
|
|
76
|
+
source_dir = argv.shift
|
|
77
|
+
unless site_name && source_dir
|
|
78
|
+
usage_stderr("publish requires <site_name> and <source_dir>")
|
|
79
|
+
return 1
|
|
80
|
+
end
|
|
81
|
+
Rakit::StaticWebServer.publish(site_name, source_dir)
|
|
82
|
+
return 0
|
|
83
|
+
when "view"
|
|
84
|
+
path = argv.shift || "/"
|
|
85
|
+
begin
|
|
86
|
+
Rakit::StaticWebServer.view(path)
|
|
87
|
+
return 0
|
|
88
|
+
rescue RuntimeError => e
|
|
89
|
+
$stderr.puts e.message
|
|
90
|
+
return 1
|
|
91
|
+
end
|
|
92
|
+
else
|
|
93
|
+
usage_stderr(cmd ? "Unknown command: #{cmd}" : "Expected command after static-web-server.")
|
|
94
|
+
return 1
|
|
95
|
+
end
|
|
96
|
+
rescue ArgumentError, Errno::ENOENT, Errno::EACCES, Errno::EPERM => e
|
|
97
|
+
$stderr.puts e.message
|
|
98
|
+
return 1
|
|
99
|
+
rescue => e
|
|
100
|
+
$stderr.puts "Error: #{e.message}"
|
|
101
|
+
return 1
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
exit main(ARGV.dup)
|
data/lib/generated/data_pb.rb
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
3
|
# source: data.proto
|
|
4
4
|
|
|
5
|
-
require
|
|
6
|
-
|
|
5
|
+
require "google/protobuf"
|
|
7
6
|
|
|
8
7
|
descriptor_data = "\n\ndata.proto\x12\nrakit.data\"h\n\x05Index\x12/\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x1e.rakit.data.Index.EntriesEntry\x1a.\n\x0c\x45ntriesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*^\n\x0c\x45xportFormat\x12\x19\n\x15PROTOBUF_BINARY_FILES\x10\x00\x12\x17\n\x13PROTOBUF_JSON_FILES\x10\x01\x12\x1a\n\x16PROTOBUF_BINARY_ZIPPED\x10\x02\x42\x0e\xea\x02\x0bRakit::Datab\x06proto3"
|
|
9
8
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: rakit.azure.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x11rakit.azure.proto\x12\x0brakit.azure\"L\n\x08Pipeline\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x0f\n\x07project\x18\x02 \x01(\t\x12\x13\n\x0bpipeline_id\x18\x03 \x01(\x05\x12\r\n\x05token\x18\x04 \x01(\t\"R\n\x18GetPipelineResultRequest\x12\'\n\x08pipeline\x18\x01 \x01(\x0b\x32\x15.rakit.azure.Pipeline\x12\r\n\x05token\x18\x02 \x01(\t\"C\n\x0ePipelineStatus\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0e\n\x06\x65rrors\x18\x02 \x03(\t\x12\x10\n\x08warnings\x18\x03 \x03(\t\"8\n\x0ePipelineResult\x12&\n\x04runs\x18\x01 \x03(\x0b\x32\x18.rakit.azure.PipelineRun\"\x97\x01\n\x0bPipelineRun\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05state\x18\x03 \x01(\t\x12\x0e\n\x06result\x18\x04 \x01(\t\x12\x14\n\x0c\x63reated_date\x18\x05 \x01(\t\x12\x15\n\rfinished_date\x18\x06 \x01(\t\x12\"\n\x06stages\x18\x07 \x03(\x0b\x32\x12.rakit.azure.Stage\"&\n\x05Issue\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\"G\n\x03Job\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06result\x18\x02 \x01(\t\x12\"\n\x06issues\x18\x03 \x03(\x0b\x32\x12.rakit.azure.Issue\"i\n\x05Stage\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06result\x18\x02 \x01(\t\x12\x1e\n\x04jobs\x18\x03 \x03(\x0b\x32\x10.rakit.azure.Job\x12\"\n\x06issues\x18\x04 \x03(\x0b\x32\x12.rakit.azure.Issue\"`\n\x0eTimelineRecord\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0e\n\x06result\x18\x03 \x01(\t\x12\"\n\x06issues\x18\x04 \x03(\x0b\x32\x12.rakit.azure.Issue\"\xa8\x01\n\x14PipelineResultDetail\x12\x12\n\nsuccessful\x18\x01 \x01(\x08\x12\x0e\n\x06\x65rrors\x18\x02 \x01(\t\x12\x10\n\x08warnings\x18\x03 \x01(\t\x12%\n\x03run\x18\x04 \x01(\x0b\x32\x18.rakit.azure.PipelineRun\x12\x33\n\x0e\x66\x61iled_records\x18\x05 \x03(\x0b\x32\x1b.rakit.azure.TimelineRecord2i\n\x0ePipelineServer\x12W\n\x11GetPipelineResult\x12%.rakit.azure.GetPipelineResultRequest\x1a\x1b.rakit.azure.PipelineResultB\x0f\xea\x02\x0cRakit::Azureb\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Rakit
|
|
14
|
+
module Azure
|
|
15
|
+
Pipeline = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.Pipeline").msgclass
|
|
16
|
+
GetPipelineResultRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.GetPipelineResultRequest").msgclass
|
|
17
|
+
PipelineStatus = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.PipelineStatus").msgclass
|
|
18
|
+
PipelineResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.PipelineResult").msgclass
|
|
19
|
+
PipelineRun = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.PipelineRun").msgclass
|
|
20
|
+
Issue = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.Issue").msgclass
|
|
21
|
+
Job = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.Job").msgclass
|
|
22
|
+
Stage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.Stage").msgclass
|
|
23
|
+
TimelineRecord = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.TimelineRecord").msgclass
|
|
24
|
+
PipelineResultDetail = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.azure.PipelineResultDetail").msgclass
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
-
# source: example.proto
|
|
3
|
+
# source: rakit.example.proto
|
|
4
4
|
|
|
5
|
-
require
|
|
5
|
+
require 'google/protobuf'
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x13rakit.example.proto\x12\rrakit.example\"\x1c\n\x0cHelloRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\" \n\rHelloResponse\x12\x0f\n\x07message\x18\x01 \x01(\tB\x13\xea\x02\x10Rakit::Generatedb\x06proto3"
|
|
8
9
|
|
|
9
10
|
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
10
11
|
pool.add_serialized_file(descriptor_data)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: rakit.file.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x10rakit.file.proto\x12\nrakit.file\"T\n\nFileConfig\x12\x1a\n\x12\x63reate_directories\x18\x01 \x01(\x08\x12\x11\n\toverwrite\x18\x02 \x01(\x08\x12\x17\n\x0f\x66ollow_symlinks\x18\x03 \x01(\x08\"\x81\x01\n\x0bListRequest\x12&\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x16.rakit.file.FileConfig\x12\x11\n\tdirectory\x18\x02 \x01(\t\x12\x11\n\trecursive\x18\x03 \x01(\x08\x12\x0c\n\x04glob\x18\x04 \x01(\t\x12\x16\n\x0einclude_hidden\x18\x05 \x01(\x08\"\x7f\n\tFileEntry\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x14\n\x0cis_directory\x18\x03 \x01(\x08\x12\x12\n\nis_symlink\x18\x04 \x01(\x08\x12\x12\n\nsize_bytes\x18\x05 \x01(\x03\x12\x18\n\x10modified_unix_ms\x18\x06 \x01(\x03\"y\n\nListResult\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\x12&\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x15.rakit.file.FileEntry\x12\x11\n\texit_code\x18\x04 \x01(\x05\x12\x0e\n\x06stderr\x18\x05 \x01(\t\"Z\n\x0b\x43opyRequest\x12&\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x16.rakit.file.FileConfig\x12\x0e\n\x06source\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65stination\x18\x03 \x01(\t\"\x8c\x01\n\nCopyResult\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x13\n\x0b\x64\x65stination\x18\x04 \x01(\t\x12\x11\n\texit_code\x18\x05 \x01(\x05\x12\x0e\n\x06stderr\x18\x06 \x01(\t\x12\x14\n\x0c\x62ytes_copied\x18\x07 \x01(\x03\x62\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Rakit
|
|
14
|
+
module File
|
|
15
|
+
FileConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.file.FileConfig").msgclass
|
|
16
|
+
ListRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.file.ListRequest").msgclass
|
|
17
|
+
FileEntry = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.file.FileEntry").msgclass
|
|
18
|
+
ListResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.file.ListResult").msgclass
|
|
19
|
+
CopyRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.file.CopyRequest").msgclass
|
|
20
|
+
CopyResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.file.CopyResult").msgclass
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: rakit.shell.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x11rakit.shell.proto\x12\x0brakit.shell\"\x9a\x02\n\x07\x43ommand\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x61rgs\x18\x02 \x03(\t\x12\x19\n\x11working_directory\x18\x03 \x01(\t\x12\x17\n\x0ftimeout_seconds\x18\x04 \x01(\x05\x12\x1a\n\x12\x65xpected_exit_code\x18\x05 \x01(\x05\x12\x17\n\x0f\x65xpected_stdout\x18\x06 \x01(\t\x12\x17\n\x0f\x65xpected_stderr\x18\x07 \x01(\t\x12<\n\x13\x61\x63\x63\x65ptance_criteria\x18\x08 \x03(\x0b\x32\x1f.rakit.shell.AcceptanceCriteria\x12\x13\n\x0b\x65xit_status\x18\t \x01(\x05\x12\x0e\n\x06stdout\x18\n \x01(\t\x12\x0e\n\x06stderr\x18\x0b \x01(\t\"1\n\x12\x41\x63\x63\x65ptanceCriteria\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"-\n\nTestResult\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0e\n\x06\x65rrors\x18\x02 \x03(\t\"b\n\rFormatRequest\x12%\n\x07\x63ommand\x18\x01 \x01(\x0b\x32\x14.rakit.shell.Command\x12*\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x1a.rakit.shell.CommandFormat\" \n\x0e\x46ormatResponse\x12\x0e\n\x06output\x18\x01 \x01(\t*Z\n\rCommandFormat\x12\x1e\n\x1a\x43OMMAND_FORMAT_UNSPECIFIED\x10\x00\x12\x0c\n\x08ONE_LINE\x10\x01\x12\x0e\n\nMULTI_LINE\x10\x02\x12\x0b\n\x07\x43OMPACT\x10\x03\x32\xc1\x01\n\x0e\x43ommandService\x12\x35\n\x07\x45xecute\x12\x14.rakit.shell.Command\x1a\x14.rakit.shell.Command\x12\x35\n\x04Test\x12\x14.rakit.shell.Command\x1a\x17.rakit.shell.TestResult\x12\x41\n\x06\x46ormat\x12\x1a.rakit.shell.FormatRequest\x1a\x1b.rakit.shell.FormatResponseB\x0f\xea\x02\x0cRakit::Shellb\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Rakit
|
|
14
|
+
module Shell
|
|
15
|
+
Command = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.shell.Command").msgclass
|
|
16
|
+
AcceptanceCriteria = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.shell.AcceptanceCriteria").msgclass
|
|
17
|
+
TestResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.shell.TestResult").msgclass
|
|
18
|
+
FormatRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.shell.FormatRequest").msgclass
|
|
19
|
+
FormatResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.shell.FormatResponse").msgclass
|
|
20
|
+
CommandFormat = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.shell.CommandFormat").enummodule
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: rakit.static_web_server.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x1drakit.static_web_server.proto\x12\x17rakit.static_web_server\"T\n\x15StaticWebServerConfig\x12\x16\n\x0eroot_directory\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\x12\x15\n\rhttps_enabled\x18\x03 \x01(\x08\"=\n\x0ePublishRequest\x12\x11\n\tsite_name\x18\x01 \x01(\t\x12\x18\n\x10source_directory\x18\x02 \x01(\t\"1\n\rPublishResult\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"-\n\x0cServerStatus\x12\x0f\n\x07running\x18\x01 \x01(\x08\x12\x0c\n\x04port\x18\x02 \x01(\rB\x13\xea\x02\x10Rakit::Generatedb\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Rakit
|
|
14
|
+
module Generated
|
|
15
|
+
StaticWebServerConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.static_web_server.StaticWebServerConfig").msgclass
|
|
16
|
+
PublishRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.static_web_server.PublishRequest").msgclass
|
|
17
|
+
PublishResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.static_web_server.PublishResult").msgclass
|
|
18
|
+
ServerStatus = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.static_web_server.ServerStatus").msgclass
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: rakit.word_count.proto
|
|
4
|
+
|
|
5
|
+
require 'google/protobuf'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
descriptor_data = "\n\x16rakit.word_count.proto\x12\x10rakit.word_count\"\x9c\x01\n\x0fWordCountConfig\x12\x18\n\x10\x63\x61se_insensitive\x18\x01 \x01(\x08\x12\x18\n\x10split_camel_case\x18\x02 \x01(\x08\x12\x19\n\x11split_snake_kebab\x18\x03 \x01(\x08\x12\x18\n\x10min_token_length\x18\x04 \x01(\r\x12\x11\n\tstopwords\x18\x05 \x03(\t\x12\r\n\x05top_n\x18\x06 \x01(\r\"S\n\nJsonSource\x12\x13\n\tjson_file\x18\x01 \x01(\tH\x00\x12\x15\n\x0binline_json\x18\x02 \x01(\tH\x00\x12\x0f\n\x05stdin\x18\x03 \x01(\x08H\x00\x42\x08\n\x06source\"\xbb\x01\n\x10WordCountRequest\x12\x31\n\x06\x63onfig\x18\x01 \x01(\x0b\x32!.rakit.word_count.WordCountConfig\x12*\n\x04json\x18\x02 \x01(\x0b\x32\x1c.rakit.word_count.JsonSource\x12\x31\n\x04mode\x18\x03 \x01(\x0e\x32#.rakit.word_count.JsonWordCountMode\x12\x15\n\rinclude_paths\x18\x04 \x01(\x08\"*\n\nTokenCount\x12\r\n\x05token\x18\x01 \x01(\t\x12\r\n\x05\x63ount\x18\x02 \x01(\x04\"\xb1\x01\n\x0fWordCountResult\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\x12,\n\x06\x63ounts\x18\x03 \x03(\x0b\x32\x1c.rakit.word_count.TokenCount\x12\x11\n\texit_code\x18\x04 \x01(\x05\x12\x0e\n\x06stderr\x18\x05 \x01(\t\x12\x14\n\x0ctotal_tokens\x18\x06 \x01(\x04\x12\x15\n\runique_tokens\x18\x07 \x01(\x04*y\n\x11JsonWordCountMode\x12$\n JSON_WORD_COUNT_MODE_UNSPECIFIED\x10\x00\x12\x1d\n\x19JSON_WORD_COUNT_MODE_KEYS\x10\x01\x12\x1f\n\x1bJSON_WORD_COUNT_MODE_VALUES\x10\x02\x42\x13\xea\x02\x10Rakit::Generatedb\x06proto3"
|
|
9
|
+
|
|
10
|
+
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
|
12
|
+
|
|
13
|
+
module Rakit
|
|
14
|
+
module Generated
|
|
15
|
+
WordCountConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.word_count.WordCountConfig").msgclass
|
|
16
|
+
JsonSource = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.word_count.JsonSource").msgclass
|
|
17
|
+
WordCountRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.word_count.WordCountRequest").msgclass
|
|
18
|
+
TokenCount = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.word_count.TokenCount").msgclass
|
|
19
|
+
WordCountResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.word_count.WordCountResult").msgclass
|
|
20
|
+
JsonWordCountMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("rakit.word_count.JsonWordCountMode").enummodule
|
|
21
|
+
end
|
|
22
|
+
end
|
data/lib/rakit/azure/dev_ops.rb
CHANGED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
require "google/protobuf"
|
|
5
|
+
require "rakit/file"
|
|
6
|
+
|
|
7
|
+
module Rakit
|
|
8
|
+
module CLI
|
|
9
|
+
module File
|
|
10
|
+
class << self
|
|
11
|
+
# @param argv [Array<String>] arguments after "file"
|
|
12
|
+
# @return [Integer] exit code
|
|
13
|
+
def run(argv)
|
|
14
|
+
return 1 if argv.empty?
|
|
15
|
+
sub = argv.shift
|
|
16
|
+
case sub
|
|
17
|
+
when "list" then run_list(argv)
|
|
18
|
+
when "copy" then run_copy(argv)
|
|
19
|
+
else
|
|
20
|
+
$stderr.puts "Unknown command: #{sub}. Use 'list' or 'copy'."
|
|
21
|
+
$stderr.puts " rakit file list <directory> [--recursive] [--include-hidden] [--format console|json|proto-json]"
|
|
22
|
+
$stderr.puts " rakit file copy <source> <destination> [--overwrite] [--create-directories] [--follow-symlinks] [--format ...]"
|
|
23
|
+
1
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def run_list(argv)
|
|
30
|
+
opts = parse_list_argv(argv)
|
|
31
|
+
return 1 if opts[:error]
|
|
32
|
+
req = Rakit::File::ListRequest.new(
|
|
33
|
+
directory: opts[:directory],
|
|
34
|
+
recursive: opts[:recursive],
|
|
35
|
+
include_hidden: opts[:include_hidden],
|
|
36
|
+
config: Rakit::File::FileConfig.new(follow_symlinks: opts[:follow_symlinks])
|
|
37
|
+
)
|
|
38
|
+
result = Rakit::File.list(req)
|
|
39
|
+
render_list_result(result, opts[:format])
|
|
40
|
+
result.exit_code
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def parse_list_argv(argv)
|
|
44
|
+
opts = { format: "console", recursive: false, include_hidden: false, follow_symlinks: false, directory: nil }
|
|
45
|
+
args = argv.dup
|
|
46
|
+
while (arg = args.shift)
|
|
47
|
+
case arg
|
|
48
|
+
when "--recursive" then opts[:recursive] = true
|
|
49
|
+
when "--include-hidden" then opts[:include_hidden] = true
|
|
50
|
+
when "--follow-symlinks" then opts[:follow_symlinks] = true
|
|
51
|
+
when "--format" then opts[:format] = args.shift || "console"
|
|
52
|
+
when /^--/
|
|
53
|
+
$stderr.puts "Unknown option: #{arg}"
|
|
54
|
+
opts[:error] = true
|
|
55
|
+
else
|
|
56
|
+
opts[:directory] = arg if opts[:directory].nil?
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
unless opts[:directory] && !opts[:directory].empty?
|
|
60
|
+
$stderr.puts "list requires <directory>"
|
|
61
|
+
opts[:error] = true
|
|
62
|
+
end
|
|
63
|
+
opts
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def run_copy(argv)
|
|
67
|
+
opts = parse_copy_argv(argv)
|
|
68
|
+
return 1 if opts[:error]
|
|
69
|
+
req = Rakit::File::CopyRequest.new(
|
|
70
|
+
source: opts[:source],
|
|
71
|
+
destination: opts[:destination],
|
|
72
|
+
config: Rakit::File::FileConfig.new(
|
|
73
|
+
overwrite: opts[:overwrite],
|
|
74
|
+
create_directories: opts[:create_directories],
|
|
75
|
+
follow_symlinks: opts[:follow_symlinks]
|
|
76
|
+
)
|
|
77
|
+
)
|
|
78
|
+
result = Rakit::File.copy(req)
|
|
79
|
+
render_copy_result(result, opts[:format])
|
|
80
|
+
result.exit_code
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def parse_copy_argv(argv)
|
|
84
|
+
opts = { format: "console", overwrite: false, create_directories: false, follow_symlinks: false, source: nil, destination: nil }
|
|
85
|
+
args = argv.dup
|
|
86
|
+
while (arg = args.shift)
|
|
87
|
+
case arg
|
|
88
|
+
when "--overwrite" then opts[:overwrite] = true
|
|
89
|
+
when "--create-directories" then opts[:create_directories] = true
|
|
90
|
+
when "--follow-symlinks" then opts[:follow_symlinks] = true
|
|
91
|
+
when "--format" then opts[:format] = args.shift || "console"
|
|
92
|
+
when /^--/
|
|
93
|
+
$stderr.puts "Unknown option: #{arg}"
|
|
94
|
+
opts[:error] = true
|
|
95
|
+
else
|
|
96
|
+
if opts[:source].nil?
|
|
97
|
+
opts[:source] = arg
|
|
98
|
+
elsif opts[:destination].nil?
|
|
99
|
+
opts[:destination] = arg
|
|
100
|
+
else
|
|
101
|
+
$stderr.puts "Unexpected argument: #{arg}"
|
|
102
|
+
opts[:error] = true
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
unless opts[:source] && opts[:destination]
|
|
107
|
+
$stderr.puts "copy requires <source> and <destination>"
|
|
108
|
+
opts[:error] = true
|
|
109
|
+
end
|
|
110
|
+
opts
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def render_list_result(result, format)
|
|
114
|
+
$stderr.puts result.stderr if result.stderr && !result.stderr.empty? && !result.success
|
|
115
|
+
case format
|
|
116
|
+
when "json"
|
|
117
|
+
puts list_result_to_json(result)
|
|
118
|
+
when "proto-json"
|
|
119
|
+
puts Google::Protobuf.encode_json(result)
|
|
120
|
+
else
|
|
121
|
+
result.entries.each do |e|
|
|
122
|
+
puts "#{e.path}\t#{e.name}\t#{e.is_directory ? 'dir' : 'file'}"
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def list_result_to_json(result)
|
|
128
|
+
h = {
|
|
129
|
+
success: result.success,
|
|
130
|
+
message: result.message.to_s,
|
|
131
|
+
entries: result.entries.map { |e| { path: e.path, name: e.name, is_directory: e.is_directory, is_symlink: e.is_symlink, size_bytes: e.size_bytes, modified_unix_ms: e.modified_unix_ms } },
|
|
132
|
+
exit_code: result.exit_code
|
|
133
|
+
}
|
|
134
|
+
JSON.generate(h)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def render_copy_result(result, format)
|
|
138
|
+
$stderr.puts result.stderr if result.stderr && !result.stderr.empty? && !result.success
|
|
139
|
+
case format
|
|
140
|
+
when "json"
|
|
141
|
+
puts copy_result_to_json(result)
|
|
142
|
+
when "proto-json"
|
|
143
|
+
puts Google::Protobuf.encode_json(result)
|
|
144
|
+
else
|
|
145
|
+
puts "Copied #{result.source} → #{result.destination}" if result.success
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def copy_result_to_json(result)
|
|
150
|
+
h = {
|
|
151
|
+
success: result.success,
|
|
152
|
+
message: result.message.to_s,
|
|
153
|
+
source: result.source.to_s,
|
|
154
|
+
destination: result.destination.to_s,
|
|
155
|
+
exit_code: result.exit_code,
|
|
156
|
+
bytes_copied: result.bytes_copied
|
|
157
|
+
}
|
|
158
|
+
JSON.generate(h)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "json"
|
|
4
|
+
require "google/protobuf"
|
|
5
|
+
require "rakit/word_count"
|
|
6
|
+
|
|
7
|
+
module Rakit
|
|
8
|
+
module CLI
|
|
9
|
+
module WordCount
|
|
10
|
+
class << self
|
|
11
|
+
# @param argv [Array<String>] arguments after "word-count" / "word_count"
|
|
12
|
+
# @return [Integer] exit code
|
|
13
|
+
def run(argv)
|
|
14
|
+
opts = parse_argv(argv)
|
|
15
|
+
return 1 if opts[:error]
|
|
16
|
+
|
|
17
|
+
request = build_request(opts)
|
|
18
|
+
return 1 unless request
|
|
19
|
+
|
|
20
|
+
result = Rakit::WordCount.count(request)
|
|
21
|
+
render_result(result, opts[:format])
|
|
22
|
+
result.exit_code || (result.success ? 0 : 1)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def parse_argv(argv)
|
|
28
|
+
opts = {
|
|
29
|
+
format: "console",
|
|
30
|
+
case_insensitive: false,
|
|
31
|
+
split_camel_case: false,
|
|
32
|
+
split_snake_kebab: false,
|
|
33
|
+
min_token_length: 0,
|
|
34
|
+
top_n: 0,
|
|
35
|
+
stopwords: [],
|
|
36
|
+
json_keys: false,
|
|
37
|
+
stdin: false,
|
|
38
|
+
json_file: nil
|
|
39
|
+
}
|
|
40
|
+
args = argv.dup
|
|
41
|
+
while (arg = args.shift)
|
|
42
|
+
case arg
|
|
43
|
+
when "--json-keys" then opts[:json_keys] = true
|
|
44
|
+
when "--stdin" then opts[:stdin] = true
|
|
45
|
+
when "--format"
|
|
46
|
+
opts[:format] = args.shift || "console"
|
|
47
|
+
when "--case-insensitive" then opts[:case_insensitive] = true
|
|
48
|
+
when "--split-camel-case" then opts[:split_camel_case] = true
|
|
49
|
+
when "--split-snake-kebab" then opts[:split_snake_kebab] = true
|
|
50
|
+
when "--min-token-length"
|
|
51
|
+
opts[:min_token_length] = (args.shift || "0").to_i
|
|
52
|
+
when "--top"
|
|
53
|
+
opts[:top_n] = (args.shift || "0").to_i
|
|
54
|
+
when "--stopword"
|
|
55
|
+
opts[:stopwords] << args.shift if args[0]
|
|
56
|
+
when /^--/
|
|
57
|
+
$stderr.puts "Unknown option: #{arg}"
|
|
58
|
+
opts[:error] = true
|
|
59
|
+
else
|
|
60
|
+
opts[:json_file] = arg
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
opts
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def build_request(opts)
|
|
67
|
+
unless opts[:json_keys]
|
|
68
|
+
$stderr.puts "word-count requires --json-keys for MVP"
|
|
69
|
+
return nil
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
gen = Rakit::Generated
|
|
73
|
+
config = gen::WordCountConfig.new(
|
|
74
|
+
case_insensitive: opts[:case_insensitive],
|
|
75
|
+
split_camel_case: opts[:split_camel_case],
|
|
76
|
+
split_snake_kebab: opts[:split_snake_kebab],
|
|
77
|
+
min_token_length: opts[:min_token_length],
|
|
78
|
+
stopwords: opts[:stopwords],
|
|
79
|
+
top_n: opts[:top_n]
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
if opts[:stdin]
|
|
83
|
+
json_str = $stdin.read
|
|
84
|
+
json = gen::JsonSource.new(inline_json: json_str)
|
|
85
|
+
elsif opts[:json_file] && !opts[:json_file].empty?
|
|
86
|
+
json = gen::JsonSource.new(json_file: opts[:json_file])
|
|
87
|
+
else
|
|
88
|
+
$stderr.puts "Provide a JSON file path or use --stdin"
|
|
89
|
+
return nil
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
gen::WordCountRequest.new(
|
|
93
|
+
config: config,
|
|
94
|
+
json: json,
|
|
95
|
+
mode: :JSON_WORD_COUNT_MODE_KEYS
|
|
96
|
+
)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def render_result(result, format)
|
|
100
|
+
case format
|
|
101
|
+
when "json"
|
|
102
|
+
puts result_to_json(result)
|
|
103
|
+
when "proto-json"
|
|
104
|
+
puts Google::Protobuf.encode_json(result)
|
|
105
|
+
else
|
|
106
|
+
render_console(result)
|
|
107
|
+
end
|
|
108
|
+
$stderr.puts result.stderr if result.stderr && !result.stderr.empty? && !result.success
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def render_console(result)
|
|
112
|
+
result.counts.each do |tc|
|
|
113
|
+
puts "#{tc.token}\t#{tc.count}"
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def result_to_json(result)
|
|
118
|
+
h = {
|
|
119
|
+
success: result.success,
|
|
120
|
+
message: result.message.to_s,
|
|
121
|
+
counts: result.counts.map { |tc| { token: tc.token, count: tc.count } },
|
|
122
|
+
exit_code: result.exit_code,
|
|
123
|
+
total_tokens: result.total_tokens,
|
|
124
|
+
unique_tokens: result.unique_tokens
|
|
125
|
+
}
|
|
126
|
+
JSON.generate(h)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|