feat: Organize for subcommands
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
5f83e7821e
commit
6d34bec0e6
6 changed files with 44 additions and 31 deletions
|
@ -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
|
||||||
|
|
||||||
|
command << ->() : Nil do
|
||||||
|
app = DocMachine::Builder::Run.new(config)
|
||||||
|
app.prepare
|
||||||
|
app.start
|
||||||
|
app.wait
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -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)
|
||||||
|
|
19
src/cli.cr
19
src/cli.cr
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
0
src/scaffolder/run.cr
Normal file
Loading…
Reference in a new issue