feat: Organize for subcommands
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Glenn Y. Rolland 2023-03-26 11:41:40 +02:00
parent 5f83e7821e
commit 6d34bec0e6
6 changed files with 44 additions and 31 deletions

View file

@ -3,7 +3,7 @@ require "./config"
module DocMachine::Builder module DocMachine::Builder
class Cli class Cli
def self.add_options(opts, parent_config) def self.add_options(opts, args, parent_config, command)
config = Config.new(parent_config) config = Config.new(parent_config)
opts.on("build", "Build content and produce deliverables") do opts.on("build", "Build content and produce deliverables") do
@ -27,7 +27,15 @@ module DocMachine::Builder
opts.on("-t", "--tty", "Enable TTY mode (needed for shell)") do opts.on("-t", "--tty", "Enable TTY mode (needed for shell)") do
config.enable_tty = true config.enable_tty = true
end end
end
command << ->() : Nil do
app = DocMachine::Builder::Run.new(config)
app.prepare
app.start
app.wait
end
end
end end
end end
end end

View file

@ -6,10 +6,7 @@ module DocMachine
class Run class Run
def initialize(@config : DocMachine::Builder::Config) def initialize(@config : DocMachine::Builder::Config)
@basedir = config[:data_dir]? ? config[:data_dir] : Dir.current @basehash = Digest::SHA256.hexdigest(@config.data_dir)[0..6]
@basehash = Digest::SHA256.hexdigest(@basedir)[0..6]
@action = config[:action]? ? config[:action] : "watch"
# @verbosity = config[:verbose]? ? config[:verbose] : 0
@docker_name = "docmachine-#{@basehash}" @docker_name = "docmachine-#{@basehash}"
@docker_image = "glenux/docmachine:latest" @docker_image = "glenux/docmachine:latest"
@docker_opts = [] of String @docker_opts = [] of String
@ -21,9 +18,9 @@ module DocMachine
# create directories # create directories
# setup permissions # setup permissions
def prepare() def prepare()
puts "basedir = #{@basedir}" puts "basedir = #{@config.data_dir}"
puts "docker_image = #{@docker_image}" puts "docker_image = #{@docker_image}"
puts "action = #{@action}" puts "action = #{@config.action}"
docker_cid = %x{docker ps -f "name=#{@docker_name}" -q}.strip docker_cid = %x{docker ps -f "name=#{@docker_name}" -q}.strip
@ -45,21 +42,21 @@ module DocMachine
docker_opts << "run" docker_opts << "run"
docker_opts << "-i" docker_opts << "-i"
# add tty support # add tty support
docker_opts << "-t" if @enable_tty docker_opts << "-t" if @config.enable_tty
# add container name # add container name
docker_opts.concat ["--name", @docker_name] docker_opts.concat ["--name", @docker_name]
docker_opts << "--rm" docker_opts << "--rm"
docker_opts << "--shm-size=1gb" docker_opts << "--shm-size=1gb"
docker_opts.concat ["-e", "EXT_UID=#{uid}"] docker_opts.concat ["-e", "EXT_UID=#{uid}"]
docker_opts.concat ["-e", "EXT_GID=#{gid}"] docker_opts.concat ["-e", "EXT_GID=#{gid}"]
docker_opts.concat ["-v", "#{@basedir}/docs:/app/docs"] docker_opts.concat ["-v", "#{@config.data_dir}/docs:/app/docs"]
docker_opts.concat ["-v", "#{@basedir}/slides:/app/slides"] docker_opts.concat ["-v", "#{@config.data_dir}/slides:/app/slides"]
docker_opts.concat ["-v", "#{@basedir}/images:/app/images"] docker_opts.concat ["-v", "#{@config.data_dir}/images:/app/images"]
docker_opts.concat ["-v", "#{@basedir}/_build:/app/_build"] docker_opts.concat ["-v", "#{@config.data_dir}/_build:/app/_build"]
## Detect Marp SCSS ## Detect Marp SCSS
if File.exists?("#{@basedir}/.marp/theme.scss") if File.exists?("#{@config.data_dir}/.marp/theme.scss")
docker_opt_marp_theme = ["-v", "#{@basedir}/.marp:/app/.marp"] docker_opt_marp_theme = ["-v", "#{@config.data_dir}/.marp:/app/.marp"]
docker_opts.concat docker_opt_marp_theme docker_opts.concat docker_opt_marp_theme
puts "Theme: detected Marp files. Adding option to command line (#{docker_opt_marp_theme})" puts "Theme: detected Marp files. Adding option to command line (#{docker_opt_marp_theme})"
else else
@ -67,14 +64,14 @@ module DocMachine
end end
## Detect Mkdocs configuration - old format (full) ## Detect Mkdocs configuration - old format (full)
if File.exists?("#{@basedir}/mkdocs.yml") if File.exists?("#{@config.data_dir}/mkdocs.yml")
puts "Mkdocs: detected mkdocs.yml file. Please rename to mkdocs-patch.yml" puts "Mkdocs: detected mkdocs.yml file. Please rename to mkdocs-patch.yml"
exit 1 exit 1
end end
## Detect Mkdocs configuration - new format (patch) ## Detect Mkdocs configuration - new format (patch)
if File.exists?("#{@basedir}/mkdocs-patch.yml") if File.exists?("#{@config.data_dir}/mkdocs-patch.yml")
docker_opt_mkdocs_config = ["-v", "#{@basedir}/mkdocs-patch.yml:/app/mkdocs-patch.yml"] docker_opt_mkdocs_config = ["-v", "#{@config.data_dir}/mkdocs-patch.yml:/app/mkdocs-patch.yml"]
docker_opts.concat docker_opt_mkdocs_config docker_opts.concat docker_opt_mkdocs_config
puts "Mkdocs: detected mkdocs-patch.yml file. Adding option to command line (#{docker_opt_mkdocs_config})" puts "Mkdocs: detected mkdocs-patch.yml file. Adding option to command line (#{docker_opt_mkdocs_config})"
else else
@ -82,7 +79,7 @@ module DocMachine
end end
## Detect slides ## Detect slides
if Dir.exists?("#{@basedir}/slides") if Dir.exists?("#{@config.data_dir}/slides")
docker_opt_marp_port = ["-p", "5200:5200"] docker_opt_marp_port = ["-p", "5200:5200"]
docker_opts.concat docker_opt_marp_port docker_opts.concat docker_opt_marp_port
puts "Slides: detected slides directory. Adding option to command line (#{docker_opt_marp_port})" puts "Slides: detected slides directory. Adding option to command line (#{docker_opt_marp_port})"
@ -91,7 +88,7 @@ module DocMachine
end end
## Detect docs ## Detect docs
if Dir.exists?("#{@basedir}/docs") if Dir.exists?("#{@config.data_dir}/docs")
docker_opt_marp_port = ["-p", "5100:5100"] docker_opt_marp_port = ["-p", "5100:5100"]
docker_opts.concat docker_opt_marp_port docker_opts.concat docker_opt_marp_port
puts "Slides: detected docs directory. Adding option to command line (#{docker_opt_marp_port})" puts "Slides: detected docs directory. Adding option to command line (#{docker_opt_marp_port})"
@ -100,7 +97,7 @@ module DocMachine
end end
docker_opts << @docker_image docker_opts << @docker_image
docker_opts << @action docker_opts << @config.action
puts docker_opts.inspect.colorize(:yellow) puts docker_opts.inspect.colorize(:yellow)
@process = Process.new("docker", docker_opts, output: STDOUT, error: STDERR) @process = Process.new("docker", docker_opts, output: STDOUT, error: STDERR)

View file

@ -13,8 +13,9 @@ module DocMachine
def initialize def initialize
end end
def start(argv) def start(args)
config = Config.new config = Config.new
commands = [] of Proc(Nil)
parser = OptionParser.new do |opts| parser = OptionParser.new do |opts|
opts.banner = [ opts.banner = [
@ -35,17 +36,17 @@ module DocMachine
opts.separator "" opts.separator ""
opts.separator "Commands:" opts.separator "Commands:"
DocMachine::Builder::Cli.add_options(opts, config) DocMachine::Builder::Cli.add_options(opts, args, config, commands)
DocMachine::Scaffolder::Cli.add_options(opts, config) DocMachine::Scaffolder::Cli.add_options(opts, args, config, commands)
DocMachine::Planner::Cli.add_options(opts, config) DocMachine::Planner::Cli.add_options(opts, args, config, commands)
end end
parser.parse(ARGV) parser.parse(args)
builder = DocMachine::Builder::Run.new(config) commands.each do |command|
builder.prepare puts "running #{command}"
builder.start command.call()
builder.wait end
end end
end end
end end

View file

@ -4,7 +4,7 @@ require "./config"
module DocMachine module DocMachine
module Planner module Planner
class Cli class Cli
def self.add_options(opts, parent_config) def self.add_options(opts, args, parent_config, command)
config = Config.new(parent_config) config = Config.new(parent_config)
opts.on("content", "Generate content and structure") do opts.on("content", "Generate content and structure") do

View file

@ -3,12 +3,19 @@ require "./config"
module DocMachine module DocMachine
module Scaffolder module Scaffolder
class Cli class Cli
def self.add_options(opts, parent_config) def self.add_options(opts, args, parent_config, command)
config = Config.new(parent_config) config = Config.new(parent_config)
opts.on("scaffold", "Scaffold directory") do opts.on("scaffold", "Scaffold directory") do
opts.banner = "Usage: #{PROGRAM_NAME} scaffold [options]" opts.banner = "Usage: #{PROGRAM_NAME} scaffold [options]"
end end
command << ->() : Nil do
# app = DocMachine::Scaffolder::Run.new(config)
# app.prepare
# app.start
# app.wait
end
end end
end end
end end

0
src/scaffolder/run.cr Normal file
View file