Current section

Files

Jump to
blue_bird lib mix tasks bird.gen.docs.ex
Raw

lib/mix/tasks/bird.gen.docs.ex

defmodule Mix.Tasks.Bird.Gen.Docs do
@moduledoc """
Generates HTML API Docs from api.apib using aglio.
This task uses [Aglio](https://github.com/danielgtaylor/aglio) to render the
file. To install, run `npm install aglio -g`.
"""
use Mix.Task
alias Mix.Project
@aglio_default "aglio"
@aglio_missing """
Install Aglio to convert Blueprint API to HTML:
- `npm install aglio -g` to install it globally on your system.
- `npm install aglio` in your prefered location, then use e.g.
`config :blue_bird, aglio_path: "node_modules/.bin/aglio"` to configure the path to it.
"""
@doc false
def run(_args) do
aglio_path =
case Application.get_env(:blue_bird, :aglio_path, @aglio_default) do
@aglio_default ->
if System.find_executable(@aglio_default) == nil do
raise @aglio_missing
end
@aglio_default
local_path ->
absolute_local_path = Path.absname(local_path)
if File.exists?(absolute_local_path) == false do
raise @aglio_missing
end
absolute_local_path
end
docs_path = Application.get_env(:blue_bird, :docs_path, "docs")
docs_theme = Application.get_env(:blue_bird, :docs_theme, "triple")
path =
Project.build_path()
|> String.split("_build")
|> Enum.at(0)
|> Path.join(docs_path)
System.cmd(aglio_path, [
"--theme-template",
docs_theme,
"-i",
Path.join(path, "api.apib"),
"-o",
Path.join(path, "index.html")
])
end
end