README.md

# mix under

<a href="https://travis-ci.org/vic/mix_under"><img src="https://travis-ci.org/vic/mix_under.svg"></a>


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

## Usage

```shell
mix under GLOB [TASK...]
```

## Example

Having an example umbrella app like:

```shell
example/
  apps/
    earth/
    heaven/
    hell/
```

This will run test on a single app

```shell
$ 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)

```shell
$ 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
```

## How about `mix cmd --app heaven mix test`?

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).

## Under any directory

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

```shell
mix under apps/hell test
```

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

```shell
mix under /other/project test
```

## Under relative task arguments

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.

```shell
$ 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
```

## Relative paths

When you `mix under` has 


This is something not provided by the more generic `mix cmd`.


## Installation

```elixir
def deps do
  [
    {:mix_under, "~> 0.1.0", only: [:dev, :test]}
  ]
end
```