Skip to content
vic

vic/mix_under

Execute mix tasks under Elixir umbrella applications

vic/mix_under.json
{
"defaultBranch": "master",
"description": "Execute mix tasks under Elixir umbrella applications",
"fullName": "vic/mix_under",
"homepage": "",
"language": "Elixir",
"name": "mix_under",
"pushedAt": "2018-04-27T17:14:31Z",
"stargazersCount": 20,
"updatedAt": "2024-04-22T05:05:21Z",
"url": "https://github.com/vic/mix_under"
}

Execute mix tasks under specific umbrella apps, useful for running ecto migrations or tests.

Terminal window
mix under GLOB [TASK...]

Having an example umbrella app like:

Terminal window
example/
apps/
earth/
heaven/
hell/

This will run test on a single app

Terminal window
$ mix under heaven test
Heaven
..
Finished in 0.05 seconds
1 doctest, 1 test, 0 failures
Randomized with seed 132550

Or you can use a glob (be sure to quote it to prevent your shell from expanding the glob itself)

Terminal window
$ mix under 'he*' test
Heaven
..
Finished in 0.05 seconds
1 doctest, 1 test, 0 failures
Randomized with seed 941219
.Hell
.
Finished in 0.05 seconds
1 doctest, 1 test, 0 failures
Randomized with seed 862534

Well, you can of course use it if you dont mind writing a bit more :), (you can always create an alias in your umbrella to run those long commands for you).

When the glob given to mix under looks like a path (it contains /), the glob is used directly without prepending apps/ to it.

Terminal window
mix under apps/hell test

This means, you can execute mix on any directory, not only below your umbrella.

Terminal window
mix under /other/project test

When the task you are executing expects a path to a file to work with (for example for executing a script or only one test file), mix under will convert given relative paths to absolute.

This comes handy for executing mix from inside your IDE which would probably use paths relative to your project root.

Terminal window
$ mix under earth test apps/earth/test/angel_test.exs
==> (under apps/earth) mix test /home/vic/h/mix_under/example/apps/earth/test/angel_test.exs
Earth.Angel
.
Finished in 0.04 seconds
1 test, 0 failures
Randomized with seed 700004
$ mix archive.install github vic/mix_under