-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathgenerate_structs.rb
More file actions
executable file
·62 lines (47 loc) · 1.71 KB
/
generate_structs.rb
File metadata and controls
executable file
·62 lines (47 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/env ruby
# typed: strict
# frozen_string_literal: true
# Ensure RubyGems and Bundler are set up so gem requires work in CI
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
require "rubygems"
require "bundler/setup"
require "sorbet-runtime"
require "fileutils"
$LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
require "log_struct/enums"
require_relative "../tools/codegen/sorbet_generator"
require_relative "../tools/codegen/ts_generator"
require_relative "../tools/codegen/log_fields_generator"
module Scripts
extend T::Sig
sig { void }
def self.run
root = T.let(File.expand_path("..", __dir__), String)
puts "Generating Sorbet Ruby structs..."
LogStruct::Codegen::SorbetGenerator.generate_all(root)
puts "Formatting generated Ruby code..."
system("bundle exec rubocop -A lib/log_struct/log > /dev/null 2>&1")
puts "Generating log fields JSON..."
LogStruct::Codegen::LogFieldsGenerator.generate(root)
puts "Generating TypeScript artifacts..."
LogStruct::Codegen::TSGenerator.generate_all(root)
puts "Exporting Sorbet JSON..."
begin
require "sorbet/typescript"
# Ensure the freshly generated Sorbet structs are loaded before exporting
require "log_struct/log"
output_dir = File.join(root, "docs", "generated", "logstruct")
exporter = Sorbet::Typescript::Exporter.new(
enum_namespaces: ["LogStruct"],
struct_namespaces: ["LogStruct::Log"]
)
exporter.export(
enums_json: File.join(output_dir, "sorbet-enums.json"),
structs_json: File.join(output_dir, "sorbet-log-structs.json")
)
rescue => e
warn("Warning exporting Sorbet JSON: #{e}")
end
end
end
Scripts.run