Release for unix includes bat script

I am releasing a small elixir app with mix release. Since I only need the release to run on a linux machine, I do not need any .bat script. I added the option in mix.exs to only include executable for unix. Yet I am not able to get rid of them.

What I did:

mix new example
cd example

then I added the following line in mix.exs, inside “project” function:

releases: [example: [include_executable_for: [:unix]]],

Finally I run mix release. But when I look inside _build/dev/rel/example I find some .bat scripts

$ find _build/ -name '*.bat'
_build/dev/rel/example/releases/0.1.0/env.bat
_build/dev/rel/example/bin/example.bat

I am running the latest stable release of elixir:

$ mix --version
Erlang/OTP 25 [erts-13.1.5] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]                                              

Mix 1.17.3 (compiled with Erlang/OTP 25)

Is there any way to not include these .bat script inside the release? Should I do something differently?

This is working correctly for me with the same version of Elixir, in that there are no “*.bat” files in my release. Are you sure you removed “_build/dev/rel” after adding that option to “mix.exs”? They might be hanging around from the first time you ran mix release before adding the option?

You have a typo, change:

- releases: [example: [include_executable_for: [:unix]]]
+ releases: [example: [include_executables_for: [:unix]]]

This is pretty unfortunate, I’m not sure if we can do much about it though. If Elixir allowed people setting custom release options, which can be very useful for custom tooling, then we should keep that. Or introduce an :extra option that would be a place for custom options and then we could warn on typos like include_executable_for.

5 Likes

Of course, I did not check for any typo!

I do not know if some tool like mix credo should be able to inform users about unused configuration, since mix should not be allowed to perform such checks.