defmodule Mix.Tasks.Gha do
@moduledoc """
Creates a GitHub actions file.
See [Usage](/git_hub_actions/usage.html) and
[Defaults](/git_hub_actions/defaults.html) for more information.
## Command line options
- `--config`, `-c` - specifies the config file
- `--elixir`, `-e` - puts the given Elixir verion to the config
- `--output`, `-o` - specifites the output file, defaults to
`.github/workflows/ci.yml`
- `--workflow`, `-w` - specifies the workflow script
"""
@shortdoc "Creates a GitHuba actions yml-file"
use Mix.Task
alias GitHubActions.Config
@defaults [workflow: :default, config: :default, output: :default]
@impl Mix.Task
def run(options) do
{opts, []} =
OptionParser.parse!(options,
strict: [workflow: :string, config: :string, output: :string, elixir: :string],
aliases: [w: :workflow, c: :config, o: :output, e: :elixir]
)
config_elixir_version(opts)
@defaults
|> Keyword.merge(opts)
|> GitHubActions.run()
rescue
error in OptionParser.ParseError ->
Mix.Shell.IO.error(Exception.format(:error, error, []))
exit({:shutdown, 1})
end
defp config_elixir_version(opts) do
if Keyword.has_key?(opts, :elixir) do
version =
opts
|> Keyword.get(:elixir)
|> GitHubActions.Version.parse!()
Config.config(:elixir, version)
end
rescue
_error in GitHubActions.InvalidVersionError ->
Mix.Shell.IO.error("The given Elixir version is invalid.")
exit({:shutdown, 1})
end
end