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

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New

Other Trending Topics Top

mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews