docmachine-utils/src/cli.cr
Glenn Y. Rolland 801e58ca27
All checks were successful
continuous-integration/drone/push Build is passing
feat: prepare for future commands
2023-03-24 16:53:27 +01:00

73 lines
1.8 KiB
Crystal

require "option_parser"
require "digest/sha256"
require "colorize"
require "./builder/builder.cr"
require "./scaffolder/scaffolder.cr"
require "./planner/planner.cr"
module DocMachine
class Cli
def initialize
end
def start(argv)
options = {} of Symbol => String
parser = OptionParser.new do |opts|
opts.banner = [
"Usage: #{PROGRAM_NAME} [options]",
"",
"Main options:"
].join("\n")
opts.on("-d", "--data-dir DIR", "Content directory") do |dir|
options[:data_dir] = dir
end
opts.on("-a", "--action ACTION", "Action (watch, build, shell, etc.)") do |action|
options[:action] = action
end
opts.on("-t", "--tty", "Enable TTY mode (needed for shell)") do |tty|
options[:tty] = tty
end
opts.on("-v", "--verbose", "Enable verbosity") do |verbose|
options[:verbose] = true.to_s
end
opts.on("-h", "--help", "Show this help") do
puts opts
exit
end
opts.separator ""
opts.separator "Commands:"
DocMachine::Builder.add_options(opts)
DocMachine::Scaffolder.add_options(opts)
DocMachine::Planner.add_options(opts)
end
parser.parse(ARGV)
basedir = options[:data_dir]? ? options[:data_dir] : Dir.current
basehash = Digest::SHA256.hexdigest(basedir)[0..6]
action = options[:action]? ? options[:action] : "watch"
verbosity = options[:verbose]? ? options[:verbose] : 0
docker_image = "glenux/docmachine:latest"
if options[:help]?
puts parser.to_s
exit
end
builder = DocMachine::Builder.new(options)
builder.prepare
builder.start
builder.wait
end
end
end