Packages
mob_dev
0.5.13
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.37
0.3.35
0.3.34
0.3.33
0.3.28
0.3.26
0.3.23
0.3.21
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.18
0.2.17
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Development tooling for the Mob mobile framework
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/mob.release.tarball.ex
defmodule Mix.Tasks.Mob.Release.Tarball do
@shortdoc "Stage and tar the per-target OTP runtime tarball"
@moduledoc """
Drives `MobDev.Release.Tarball.build/2` from the CLI. Replaces the
four `scripts/release/tarball_*.sh` scripts.
mix mob.release.tarball android_arm64 --exqlite-build /path/to/_build/dev/lib/exqlite
mix mob.release.tarball ios_sim
mix mob.release.tarball ios_device
mix mob.release.tarball all --exqlite-build /path/to/exqlite
Android targets require `--exqlite-build` (no default — projects vary).
iOS targets don't ship exqlite BEAMs so the flag is ignored.
## Options
* `--otp-src PATH` — OTP source checkout. Default: `$OTP_SRC` env or
`~/code/otp`.
* `--otp-release PATH` — install tree from `mix mob.release.otp`.
Default per-target.
* `--openssl-prefix PATH` — OpenSSL install. Default per-target.
* `--exqlite-build PATH` — `_build/dev/lib/exqlite` in any project
that has run `mix deps.get && mix compile`. Required for Android.
* `--android-otp-release PATH` — used by iOS targets to borrow
`crypto`/`public_key`/`ssl` apps. Default: `/tmp/otp-android`.
* `--asn1rt-nif-arm32 PATH` — pre-built arm32 asn1rt_nif.a.
Default: `/tmp/asn1rt_nif_arm32.a`.
* `--out-dir PATH` — tarball destination. Default: `/tmp`.
* `--hash STR` — release tag hash. Default: detected from OTP git.
"""
use Mix.Task
alias MobDev.Release.{Errors, Tarball}
@valid_targets ["android_arm64", "android_arm32", "ios_sim", "ios_device", "all"]
@switches [
otp_src: :string,
otp_release: :string,
openssl_prefix: :string,
exqlite_build: :string,
android_otp_release: :string,
asn1rt_nif_arm32: :string,
out_dir: :string,
hash: :string
]
@impl Mix.Task
def run(args) do
{opts, positional, _} = OptionParser.parse(args, strict: @switches)
case positional do
[target_str] when target_str in @valid_targets ->
targets =
if target_str == "all", do: Tarball.targets(), else: [String.to_atom(target_str)]
Enum.each(targets, &run_one(&1, opts))
[bad] ->
Mix.raise("unknown target: #{bad}\nvalid: #{Enum.join(@valid_targets, ", ")}")
[] ->
Mix.raise("missing target argument\nusage: mix mob.release.tarball <target>")
_ ->
Mix.raise("too many arguments — pass exactly one target")
end
end
defp run_one(target_id, opts) do
Mix.shell().info("==> tarball #{target_id}")
build_opts = Enum.reject(opts, fn {_k, v} -> is_nil(v) end)
case Tarball.build(target_id, build_opts) do
{:ok, info} ->
Mix.shell().info(" ✓ #{info.tarball}")
{:error, _} = err ->
Mix.raise(Errors.format(err))
end
end
end