Improvements to release (#944)

* Run in interactive mode: it uses less memory and improves
    boot time, which is the most desired properties for a dev tool

  * Do not use releases/cookie, instead generate one on boot
This commit is contained in:
José Valim 2022-01-27 14:52:59 +01:00 committed by GitHub
parent 188edfcf07
commit c0601798f3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 69 additions and 43 deletions

89
mix.exs
View file

@ -1,6 +1,8 @@
defmodule Livebook.MixProject do
use Mix.Project
@elixir_requirement "~> 1.13"
@elixir_app_version "1.13.2"
@version "0.5.1"
@description "Interactive and collaborative code notebooks - made with Phoenix LiveView"
@ -8,7 +10,7 @@ defmodule Livebook.MixProject do
[
app: :livebook,
version: @version,
elixir: "~> 1.13",
elixir: @elixir_requirement,
name: "Livebook",
description: @description,
elixirc_paths: elixirc_paths(Mix.env()),
@ -16,9 +18,9 @@ defmodule Livebook.MixProject do
aliases: aliases(),
deps: with_lock(target_deps(Mix.target()) ++ deps()),
escript: escript(),
package: package(),
default_release: :livebook,
releases: releases(),
package: package()
releases: releases()
]
end
@ -38,6 +40,33 @@ defmodule Livebook.MixProject do
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp package do
[
licenses: ["Apache-2.0"],
links: %{
"GitHub" => "https://github.com/livebook-dev/livebook"
},
files: ~w(lib static config mix.exs mix.lock README.md LICENSE CHANGELOG.md)
]
end
defp aliases do
[
"dev.setup": ["deps.get", "cmd npm install --prefix assets"],
"dev.build": ["cmd npm run deploy --prefix ./assets"],
"format.all": ["format", "cmd npm run format --prefix ./assets"]
]
end
defp escript do
[
main_module: LivebookCLI,
app: nil
]
end
## Dependencies
# Although we use requirements here, the with_lock() function
# below ensures we only use the locked versions. This is important
# for two reasons:
@ -92,42 +121,44 @@ defmodule Livebook.MixProject do
end
end
defp aliases do
[
"dev.setup": ["deps.get", "cmd npm install --prefix assets"],
"dev.build": ["cmd npm run deploy --prefix ./assets"],
"format.all": ["format", "cmd npm run format --prefix ./assets"]
]
end
defp escript do
[
main_module: LivebookCLI,
app: nil
]
end
## Releases
defp releases do
[
livebook: [
include_executables_for: [:unix],
include_erts: false
include_erts: false,
rel_templates_path: "rel/server",
steps: [:assemble, &remove_cookie/1]
],
mac_app: [
include_executables_for: [:unix],
include_erts: false,
rel_templates_path: "rel/app",
steps: [:assemble, &standalone_erlang_elixir/1, &build_mac_app/1]
steps: [:assemble, &remove_cookie/1, &standalone_erlang_elixir/1, &build_mac_app/1]
],
mac_app_dmg: [
include_executables_for: [:unix],
include_erts: false,
rel_templates_path: "rel/app",
steps: [:assemble, &standalone_erlang_elixir/1, &build_mac_app_dmg/1]
steps: [:assemble, &remove_cookie/1, &standalone_erlang_elixir/1, &build_mac_app_dmg/1]
]
]
end
defp remove_cookie(release) do
File.rm!(Path.join(release.path, "releases/COOKIE"))
release
end
defp standalone_erlang_elixir(release) do
Code.require_file("rel/app/standalone.exs")
release
|> Standalone.copy_erlang()
|> Standalone.copy_elixir(@elixir_app_version)
end
@app_options [
name: "Livebook",
version: @version,
@ -139,14 +170,6 @@ defmodule Livebook.MixProject do
]
]
defp standalone_erlang_elixir(release) do
Code.require_file("rel/app/standalone.exs")
release
|> Standalone.copy_erlang()
|> Standalone.copy_elixir("1.13.2")
end
defp build_mac_app(release) do
AppBuilder.build_mac_app(release, @app_options)
end
@ -166,14 +189,4 @@ defmodule Livebook.MixProject do
AppBuilder.build_mac_app_dmg(release, options)
end
def package do
[
licenses: ["Apache-2.0"],
links: %{
"GitHub" => "https://github.com/livebook-dev/livebook"
},
files: ~w(lib static config mix.exs mix.lock README.md LICENSE CHANGELOG.md)
]
end
end

View file

@ -1,2 +1,6 @@
set LIVEBOOK_ROOT_PATH=%USERPROFILE%
set RELEASE_MODE=interactive
set LIVEBOOK_ROOT_PATH=%USERPROFILE%
if not defined RELEASE_COOKIE (
for /f "skip=1" %%X in ('wmic os get localdatetime') do if not defined TIMESTAMP set TIMESTAMP=%%X
set RELEASE_COOKIE=cookie-!TIMESTAMP:~0,11!-!RANDOM!
)

View file

@ -1,2 +1,3 @@
export LIVEBOOK_ROOT_PATH=$HOME
export RELEASE_MODE=interactive
export LIVEBOOK_ROOT_PATH=$HOME
export RELEASE_COOKIE="${RELEASE_COOKIE:-$(cat /dev/urandom | env LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)}"

2
rel/app/vm.args.eex Normal file
View file

@ -0,0 +1,2 @@
# Disable busy waiting so that we don't waste resources
+sbwt none +sbwtdcpu none +sbwtdio none

5
rel/server/env.sh.bat Normal file
View file

@ -0,0 +1,5 @@
set RELEASE_MODE=interactive
if not defined RELEASE_COOKIE (
for /f "skip=1" %%X in ('wmic os get localdatetime') do if not defined TIMESTAMP set TIMESTAMP=%%X
set RELEASE_COOKIE=cookie-!TIMESTAMP:~0,11!-!RANDOM!
)

2
rel/server/env.sh.eex Normal file
View file

@ -0,0 +1,2 @@
export RELEASE_MODE=interactive
export RELEASE_COOKIE="${RELEASE_COOKIE:-$(cat /dev/urandom | env LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)}"

2
rel/server/vm.args.eex Normal file
View file

@ -0,0 +1,2 @@
# Disable busy waiting so that we don't waste resources
+sbwt none +sbwtdcpu none +sbwtdio none

View file

@ -1,3 +0,0 @@
# Disable busy waiting, so that we don't waste
# resources when running in the cloud
+sbwt none +sbwtdcpu none +sbwtdio none