alfredfriedrich

alfredfriedrich

Hello again fine folks of the elixir community,

I am struggling to write a small mix install task with Igniter. Basically I want to create some files in the install task, but if I create a new mix project with igniter.new foo --install my_app no matter what I try, my task does not seem to get called.

I a nutshell this is what I am trying to do:

$ mix igniter.new my_app
$ cd my_app
$ mix igniter.gen.task my_app.install

Inside the my_app.install.ex file I changed the igniter(igniter) function to look like this:

@impl Igniter.Mix.Task
def igniter(igniter) do
  # Do your work here and return an updated igniter
  igniter
  |> Igniter.create_new_file(Path.expand("lib/foo.ex"), foo_ex())
  |> Igniter.add_notice("mix my_app.install finished.")
end

defp foo_ex() do
  """
  defmodule MyApp.Foo do
  end
  """
end

When I try to run the installer in a new mix project (with igniter.new --install or with igniter.new + igniter.install afterwards) I always get the message No proposed content changes! :

mix igniter.new dummy --install my_app@path:../../my_app --verbose
* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/dummy.ex
* creating test
* creating test/test_helper.exs
* creating test/dummy_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd dummy
    mix test

Run "mix help" for more commands.
Fetching and compiling dependencies ✔
Updating project's igniter dependency:
Updating project's igniter dependency: ✔
installing igniter:
installing igniter: ✔
compiling igniter:
===> Analyzing applications...
===> Compiling telemetry
compiling igniter: ✔
setting up igniter:
setting up igniter: ✔
compiling my_app ✔
`my_app.install` ✔

The following installer was found and executed: `my_app.install`:

    No proposed content changes!


Successfully installed:

* my_app

I also tried with a git URI instead of a local file URI for the dependency but same result.

When I call the mix my_app.install task directly from the my_app project I do get the desired output:

Igniter:

Create: lib/my_app/foo.ex

1 |defmodule MyApp.Foo do
2 |end
3 |

What do I miss? I am grateful for any pointers and hints.

Showing Posts 1 to 6

zachdaniel

zachdaniel

Creator of Ash

Make sure that your library has igniter as an optional dependency and see if that helps :slight_smile: you might need to blow away the build folder in any other project you’ve added this dep to to get it to pick up the dep change

alfredfriedrich

alfredfriedrich OP

Same behaviour with optional: true, with path: and with git: URI
As for the build directory, I use a small test script the make sure I get a clean state:

#!/bin/sh

if [ -d dummy ]; then
	echo "removing old dummy directory.."
	rm -rf dummy
fi

if [ "$1" = "git" ]; then
	mix igniter.new dummy --install my_app@git:http://my.git.server/my_app.git --verbose
else
	mix igniter.new dummy --install my_app@path:../../my_app --verbose
fi
zachdaniel

zachdaniel

Creator of Ash

Can I see specifically what the mix.exs look like of the package you’re trying to install?

alfredfriedrich

alfredfriedrich OP

Sure, it is a stock mix project with igniter:

defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "0.1.0",
      elixir: "~> 1.17",
      start_permanent: Mix.env() == :prod,
      consolidate_protocols: Mix.env() != :dev,
      deps: deps()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:igniter, "~> 0.5", only: [:dev, :test], optional: true}
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
    ]
  end
end
zachdaniel

zachdaniel

Creator of Ash

You need to remove the only and have it just be optional: true :slight_smile:

alfredfriedrich

alfredfriedrich OP

That did the trick, thanks a lot Zach, much appreciate your help!

In hindsight, I should have read the :env part on the mix deps task documentation more thoroughly:

:env - the environment (as an atom) to run the dependency on; defaults to :prod. 
— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews