index : pandoc | |
Hex package with a file-watcher and Mix task for using Pandoc to convert Markdown files to HTML. |
aboutsummaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'lib/mix/tasks/pandoc.install.ex')
-rw-r--r-- | lib/mix/tasks/pandoc.install.ex | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/mix/tasks/pandoc.install.ex b/lib/mix/tasks/pandoc.install.ex new file mode 100644 index 0000000..1e36696 --- /dev/null +++ b/lib/mix/tasks/pandoc.install.ex @@ -0,0 +1,70 @@ +defmodule Mix.Tasks.Pandoc.Install do + @moduledoc """ + Installs pandoc under `_build`. + + ```bash + $ mix pandoc.install + $ mix pandoc.install --if-missing + ``` + + By default, it installs #{Pandoc.latest_version()} but you can configure it + in your config files, such as: + + config :pandoc, :version, "#{Pandoc.latest_version()}" + + ## Options + + * `--runtime-config` - load the runtime configuration before executing + command + + * `--if-missing` - install only if the given version does not exist + """ + + @shortdoc "Installs pandoc under _build" + @compile {:no_warn_undefined, Mix} + + use Mix.Task + + @impl true + def run(args) do + valid_options = [runtime_config: :boolean, if_missing: :boolean] + + {opts, base_url} = + case OptionParser.parse_head!(args, strict: valid_options) do + {opts, []} -> + {opts, Pandoc.default_base_url()} + + {opts, [base_url]} -> + {opts, base_url} + + {_, _} -> + Mix.raise(""" + Invalid arguments to pandoc.install, expected one of: + + mix pandoc.install + mix pandoc.install 'https://github.com/jgm/pandoc/releases/download/$version/pandoc-$version-$target.tar.gz' + mix pandoc.install --runtime-config + mix pandoc.install --if-missing + """) + end + + if opts[:runtime_config], do: Mix.Task.run("app.config") + + if opts[:if_missing] && latest_version?() do + :ok + else + if function_exported?(Mix, :ensure_application!, 1) do + Mix.ensure_application!(:inets) + Mix.ensure_application!(:ssl) + end + + Mix.Task.run("loadpaths") + Pandoc.install(base_url) + end + end + + defp latest_version?() do + version = Pandoc.configured_version() + match?({:ok, ^version}, Pandoc.bin_version()) + end +end |