Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

include_src: true does not include source of Elixir apps #683

Closed
hrubi opened this issue Jun 19, 2019 · 1 comment · Fixed by #685
Closed

include_src: true does not include source of Elixir apps #683

hrubi opened this issue Jun 19, 2019 · 1 comment · Fixed by #685

Comments

@hrubi
Copy link
Contributor

hrubi commented Jun 19, 2019

Steps to reproduce

Reproducing on bare myapp created by mix new myapp with added distillery dependency.

$ mix release.init
$ sed -i 's/include_src: false/include_src: true/' rel/config.exs
$ MIX_ENV=prod mix release
...

$ ls -1 _build/prod/rel/myapp/lib
artificery-0.4.2
compiler-7.2.6
distillery-2.0.14
elixir-1.8.2
iex-1.8.2
kernel-6.1
logger-1.8.2
mix-1.8.2
myapp-0.1.0
runtime_tools-1.13.1
sasl-3.2.1
stdlib-3.6

$ find _build/prod/rel/myapp/lib -mindepth 1 -maxdepth 2 -type d -name src -o -name lib
_build/prod/rel/myapp/lib/sasl-3.2.1/src
_build/prod/rel/myapp/lib/kernel-6.1/src
_build/prod/rel/myapp/lib/runtime_tools-1.13.1/src
_build/prod/rel/myapp/lib/stdlib-3.6/src
_build/prod/rel/myapp/lib/compiler-7.2.6/src

Verbose Logs

% MIX_ENV=prod mix release --verbose
==> Loading configuration..
==> Assembling release..
==> Building release myapp:0.1.0 using environment prod
==> Discovered applications:
  > kernel-6.1
  |
  |  from: /usr/lib64/erlang/lib/kernel-6.1
  |  applications: none
  |  includes: none
  |_____

  > artificery-0.4.2
  |
  |  from: _build/prod/lib/artificery
  |  applications:
  |      :kernel
  |      :stdlib
  |      :elixir
  |  includes: none
  |_____

  > distillery-2.0.14
  |
  |  from: _build/prod/lib/distillery
  |  applications:
  |      :kernel
  |      :stdlib
  |      :elixir
  |      :runtime_tools
  |      :artificery
  |  includes: none
  |_____

  > runtime_tools-1.13.1
  |
  |  from: /usr/lib64/erlang/lib/runtime_tools-1.13.1
  |  applications:
  |      :kernel
  |      :stdlib
  |  includes: none
  |_____

  > stdlib-3.6
  |
  |  from: /usr/lib64/erlang/lib/stdlib-3.6
  |  applications:
  |      :kernel
  |  includes: none
  |_____

  > logger-1.8.2
  |
  |  from: /usr/lib64/elixir/bin/../lib/logger
  |  applications:
  |      :kernel
  |      :stdlib
  |      :elixir
  |  includes: none
  |_____

  > myapp-0.1.0
  |
  |  from: _build/prod/lib/myapp
  |  applications:
  |      :kernel
  |      :stdlib
  |      :elixir
  |      :logger
  |      :distillery
  |  includes: none
  |_____

  > compiler-7.2.6
  |
  |  from: /usr/lib64/erlang/lib/compiler-7.2.6
  |  applications:
  |      :kernel
  |      :stdlib
  |  includes: none
  |_____

  > sasl-3.2.1
  |
  |  from: /usr/lib64/erlang/lib/sasl-3.2.1
  |  applications:
  |      :kernel
  |      :stdlib
  |  includes: none
  |_____

  > iex-1.8.2
  |
  |  from: /usr/lib64/elixir/bin/../lib/iex
  |  applications:
  |      :kernel
  |      :stdlib
  |      :elixir
  |  includes: none
  |_____

  > mix-1.8.2
  |
  |  from: /usr/lib64/elixir/bin/../lib/mix
  |  applications:
  |      :kernel
  |      :stdlib
  |      :elixir
  |  includes: none
  |_____

  > elixir-1.8.2
  |
  |  from: /usr/lib64/elixir/bin/../lib/elixir
  |  applications:
  |      :kernel
  |      :stdlib
  |      :compiler
  |  includes: none
  |_____

==> Running validation checks..
    > Mix.Releases.Checks.Erts * PASS
    > Mix.Releases.Checks.Cookie * PASS
    > Mix.Releases.Checks.LoadedOrphanedApps * PASS
==> Generated overlay vars:
    release_name=:myapp
    release_version="0.1.0"
    is_upgrade=false
    upgrade_from=:latest
    dev_mode=false
    include_erts=true
    include_src=true
    include_system_libs=true
    erl_opts=""
    run_erl_env=""
    erts_vsn="10.1.1"
    output_dir="_build/prod/rel/myapp"
==> Copying applications to _build/prod/rel/myapp
==> Generating start_erl.data
==> Generating vm.args from rel/vm.args
==> Generating sys.config from config/config.exs
==> Including ERTS 10.1.1 from /usr/lib64/erlang/erts-10.1.1
==> Generating boot scripts
==> Generating RELEASES
==> Applying overlays
==> Applying mkdir overlay
    dst: releases/0.1.0/hooks
==> Applying mkdir overlay
    dst: releases/0.1.0/hooks/pre_configure.d
==> Applying mkdir overlay
    dst: releases/0.1.0/hooks/post_configure.d
==> Applying mkdir overlay
    dst: releases/0.1.0/hooks/pre_start.d
==> Applying mkdir overlay
    dst: releases/0.1.0/hooks/post_start.d
==> Applying mkdir overlay
    dst: releases/0.1.0/hooks/pre_stop.d
==> Applying mkdir overlay
    dst: releases/0.1.0/hooks/post_stop.d
==> Applying mkdir overlay
    dst: releases/0.1.0/hooks/pre_upgrade.d
==> Applying mkdir overlay
    dst: releases/0.1.0/hooks/post_upgrade.d
==> Applying copy overlay
    src: _build/prod/lib/distillery/priv/libexec
    dst: releases/0.1.0/libexec
==> Applying mkdir overlay
    dst: releases/0.1.0/commands
==> Packaging release..
==> Archiving myapp-0.1.0
==> Writing archive to /home/hrubi/tmp/myapp/_build/prod/rel/myapp/releases/0.1.0/myapp.tar.gz
==> Updating archive..
==> Including system libs from current Erlang installation
==> Saving archive..
==> Archive saved!
Release successfully built!
To start the release you have built, you can use one of the following tasks:

    # start a shell, like 'iex -S mix'
    > _build/prod/rel/myapp/bin/myapp console

    # start in the foreground, like 'mix run --no-halt'
    > _build/prod/rel/myapp/bin/myapp foreground

    # start in the background, must be stopped with the 'stop' command
    > _build/prod/rel/myapp/bin/myapp start

If you started a release elsewhere, and wish to connect to it:

    # connects a local shell to the running node
    > _build/prod/rel/myapp/bin/myapp remote_console

    # connects directly to the running node's console
    > _build/prod/rel/myapp/bin/myapp attach

For a complete listing of commands and their use:

    > _build/prod/rel/myapp/bin/myapp help

Description of issue

Running mix release with include_src: true includes sources only for the apps which has an OTP compliant directory layout in the place where distillery looks. In my case, that's just system-wide Erlang libraries (e.g. kernel, stdlib).

For the applications built from the repository, Distillery looks only into _build/prod/lib/* where it find only ebin and possibly priv. The source code lies elsewhere, in my case it's lib/ for the myapp (would be apps/myapp/lib in the case of an umbrella app) and deps/*/lib for artificery and distillery. None of them is assembled into the release.

Also the sources for elixir, iex and mix are missing, but that's understandable as in my case the Elixir installation from package (Gentoo) does not include the source code.

The documentation says:

include_src (boolean) - should source code be included in the release
so I would expect that all source code that Distillery can find should be included in the release. In my case that would be sources for myapp, distillery and artificery.

Distillery: 2.0.14
Erlang: 21
Elixir: 1.8.2
OS: Gentoo Linux

@hrubi
Copy link
Contributor Author

hrubi commented Jun 19, 2019

Here's a quick workaround via a plugin: https://gist.github.com/hrubi/a2d646d49c2da00e703bb748e1a6a485

I'll try to find time to send a pull request with a proper fix to distillery.

hrubi added a commit to hrubi/distillery that referenced this issue Jun 20, 2019
The option `include_src: true` now includes the source code of
applications which are built from this project. That means:

  - the top-level app
  - umbrella apps
  - dependencies

Fix bitwalker#683
hrubi added a commit to hrubi/distillery that referenced this issue Jun 21, 2019
The option `include_src: true` now includes the source code of
applications which are built from this project. That means:

  - the top-level app
  - umbrella apps
  - dependencies

Fix bitwalker#683
hrubi added a commit to hrubi/distillery that referenced this issue Jun 25, 2019
The option `include_src: true` now includes the source code of
applications which are built from this project. That means:

  - the top-level app
  - umbrella apps
  - dependencies

Fix bitwalker#683
bitwalker pushed a commit that referenced this issue Jul 1, 2019
The option `include_src: true` now includes the source code of
applications which are built from this project. That means:

  - the top-level app
  - umbrella apps
  - dependencies

Fix #683
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant