Current section

Files

Jump to
tinfoil lib mix tasks tinfoil.generate.ex
Raw

lib/mix/tasks/tinfoil.generate.ex

defmodule Mix.Tasks.Tinfoil.Generate do
@shortdoc "Regenerate the tinfoil release workflow from mix.exs config"
@moduledoc """
Regenerate the tinfoil-managed files from the current `:tinfoil`
config in `mix.exs`.
Run this after changing your tinfoil config (adding targets,
enabling Homebrew, bumping the tinfoil dependency, etc).
## Flags
* `--force` — overwrite existing files (default: true)
* `--dry-run` — print the list of files that would be written
without touching the filesystem
"""
use Mix.Task
alias Tinfoil.{Config, Generator}
@impl Mix.Task
def run(argv) do
{opts, _, _} =
OptionParser.parse(argv,
switches: [force: :boolean, dry_run: :boolean]
)
config =
case Config.load(Mix.Project.config()) do
{:ok, c} -> c
{:error, reason} -> Mix.raise("tinfoil config error: #{inspect(reason)}")
end
if opts[:dry_run] do
dry_run(config)
else
result = Generator.write!(config, force: Keyword.get(opts, :force, true))
report(result)
end
end
defp dry_run(config) do
Mix.shell().info([:cyan, "# tinfoil.generate --dry-run\n", :reset])
Enum.each(Generator.render(config), fn file ->
Mix.shell().info([
:green,
"would write ",
:reset,
file.path,
" (",
to_string(byte_size(file.contents)),
" bytes)"
])
end)
end
defp report(%{written: written, skipped: skipped}) do
Enum.each(written, fn p ->
Mix.shell().info([:green, "* wrote ", :reset, p])
end)
Enum.each(skipped, fn p ->
Mix.shell().info([:yellow, "* skipped ", :reset, p])
end)
end
end