mirror of
https://github.com/ash-project/igniter.git
synced 2024-09-17 03:52:51 +12:00
improvement: support --with
option in igniter.new
This commit is contained in:
parent
62ddc0bb4d
commit
e9bf1ecf8e
4 changed files with 76 additions and 53 deletions
|
@ -1,7 +1,7 @@
|
|||
spark_locals_without_parens = [attributes: 1, decrypt_by_default: 1, on_decrypt: 1, vault: 1]
|
||||
|
||||
[
|
||||
inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"],
|
||||
inputs: ["{mix,.formatter}.exs", "{config,lib,test,installer}/**/*.{ex,exs}"],
|
||||
locals_without_parens: spark_locals_without_parens,
|
||||
export: [
|
||||
locals_without_parens: spark_locals_without_parens
|
||||
|
|
10
.github/dependabot.yml
vendored
10
.github/dependabot.yml
vendored
|
@ -1,6 +1,12 @@
|
|||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: mix
|
||||
- package-ecosystem: mix
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: weekly
|
||||
day: thursday
|
||||
groups:
|
||||
production-dependencies:
|
||||
dependency-type: production
|
||||
dev-dependencies:
|
||||
dependency-type: development
|
||||
|
|
14
README.md
14
README.md
|
@ -31,14 +31,22 @@ Igniter can be added to an existing elixir project by adding it to your dependen
|
|||
|
||||
You can also generate new projects with igniter preinstalled, and run installers in the same command.
|
||||
|
||||
First, install the archive:
|
||||
|
||||
```elixir
|
||||
mix archive.install hex igniter_new
|
||||
```
|
||||
|
||||
Then you can run `mix igniter.new`
|
||||
|
||||
```
|
||||
mix igniter.new app_name --install ash
|
||||
```
|
||||
|
||||
To use this command, install the archive:
|
||||
Or if you want to use a different project creator, specify the mix task name with the `--with` flag. Any arguments will be passed through to that task, with the exception of `--install` and `--example`.
|
||||
|
||||
```elixir
|
||||
mix archive.install hex igniter_new
|
||||
```
|
||||
mix igniter.new app_name --install ash --with phx.new --no-ecto
|
||||
```
|
||||
|
||||
## Patterns
|
||||
|
|
|
@ -8,6 +8,7 @@ defmodule Mix.Tasks.Igniter.New do
|
|||
|
||||
* `--install` - A comma-separated list of dependencies to install using `mix igniter.install` after creating the project.
|
||||
* `--example` - Request example code to be added to the project when installing packages.
|
||||
* `--with` - The command to use instead of `new`, i.e `phx.new`
|
||||
"""
|
||||
@shortdoc "Creates a new Igniter application"
|
||||
use Mix.Task
|
||||
|
@ -15,12 +16,21 @@ defmodule Mix.Tasks.Igniter.New do
|
|||
@igniter_version Mix.Project.config()[:version]
|
||||
|
||||
@impl Mix.Task
|
||||
def run([name | _ ] = argv) do
|
||||
{options, argv, _errors} = OptionParser.parse(argv,
|
||||
strict: [install: :keep, local: :string, example: :boolean],
|
||||
aliases: [i: :install, l: :local, e: :example]
|
||||
def run([name | _] = argv) do
|
||||
{options, argv, _errors} =
|
||||
OptionParser.parse(argv,
|
||||
strict: [install: :keep, local: :string, example: :boolean, with: :string],
|
||||
aliases: [i: :install, l: :local, e: :example, w: :with]
|
||||
)
|
||||
|
||||
install_with = options[:with] || "new"
|
||||
|
||||
unless install_with in ["phx.new", "new"] do
|
||||
if String.match?(install_with, ~r/\s/) do
|
||||
raise ArgumentError, "The --with option must not contain any spaces, got: #{install_with}"
|
||||
end
|
||||
end
|
||||
|
||||
install =
|
||||
options[:install]
|
||||
|> List.wrap()
|
||||
|
@ -38,9 +48,8 @@ defmodule Mix.Tasks.Igniter.New do
|
|||
exit({:shutdown, 1})
|
||||
end
|
||||
|
||||
exit = Mix.shell().cmd("mix new #{Enum.join(argv, " ")}")
|
||||
Mix.Task.run(install_with, argv)
|
||||
|
||||
if exit == 0 do
|
||||
version_requirement =
|
||||
if options[:local] do
|
||||
local = Path.join(["..", Path.relative_to_cwd(options[:local])])
|
||||
|
@ -56,11 +65,17 @@ defmodule Mix.Tasks.Igniter.New do
|
|||
|> File.read!()
|
||||
|
||||
if String.contains?(contents, "{:igniter") do
|
||||
Mix.shell().info("It looks like the project already exists and igniter is already installed, not adding it to deps.")
|
||||
Mix.shell().info(
|
||||
"It looks like the project already exists and igniter is already installed, not adding it to deps."
|
||||
)
|
||||
else
|
||||
# the spaces are required here to avoid the need for a format
|
||||
new_contents =
|
||||
String.replace(contents, "defp deps do\n [\n", "defp deps do\n [\n {:igniter, #{version_requirement}}\n")
|
||||
String.replace(
|
||||
contents,
|
||||
"defp deps do\n [\n",
|
||||
"defp deps do\n [\n {:igniter, #{version_requirement}},\n"
|
||||
)
|
||||
|
||||
File.write!("mix.exs", new_contents)
|
||||
end
|
||||
|
@ -77,12 +92,6 @@ defmodule Mix.Tasks.Igniter.New do
|
|||
Mix.shell().cmd("mix igniter.install #{Enum.join(install, ",")} --yes #{example}")
|
||||
end
|
||||
|
||||
else
|
||||
Mix.shell().info("Aborting command because associated `mix new` command failed.")
|
||||
|
||||
exit({:shutdown, 1})
|
||||
end
|
||||
|
||||
:ok
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue