Packages
livebook
0.19.8
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/compile.ensure_livebook_priv.ex
defmodule Mix.Tasks.Compile.EnsureLivebookPriv do
@moduledoc false
use Mix.Task
@impl true
def run(_args) do
# Livebook may be installed as a depepdency. This is the case in
# nerves_livebook, but also when using escript.install. In those
# cases assets.setup is not called, so we use this custom compiler
# to invoke the assets build and make those work transparently.
#
# Note that this is not relevant for escript.install from Hex,
# because we publish the package with priv/ already built and
# without the source assets. However, it is relevant when
# installing escript from GitHub.
# Use an absolute path, instead of relying on the current mix
# project, since livebook may be a dependency.
project_dir = Path.expand("../../..", __DIR__)
priv_static_dir = Path.join(project_dir, "priv/static")
actual_deps_dir = Mix.Project.deps_path()
project_deps_dir = Path.join(project_dir, "deps")
livebook_as_dependency? = actual_deps_dir != project_deps_dir
if Mix.env() == :prod and livebook_as_dependency? and not File.exists?(priv_static_dir) do
# If livebook is a dependency, it doesn't get it's own deps/
# dir, instead it is a sibling in the deps folder. We rely on
# deps/ dir being available in assets/package.json. To make it
# work, we symlink the deps dir.
_ = File.ln_s(actual_deps_dir, project_deps_dir)
Mix.shell().info("Generating priv/static")
Mix.Task.run("bun.install", ~w"--if-missing")
Mix.Task.run("bun", ~w"assets install")
Mix.Task.run("bun", ~w" assets run build")
end
:ok
end
end