Packages
mob_dev
0.6.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.publish.ex
defmodule Mix.Tasks.Mob.Release.Publish do
@shortdoc "Upload built OTP tarballs to the GitHub release"
@moduledoc """
Drives `MobDev.Release.Publish.publish/1` from the CLI. Replaces
`scripts/release/publish.sh`.
mix mob.release.publish # all 4 default tarballs
mix mob.release.publish --repo myfork/mob
mix mob.release.publish --assets otp-android,otp-ios-sim
mix mob.release.publish --hash abc12345
## Options
* `--repo OWNER/NAME` — GitHub repo. Default: `GenericJam/mob`.
* `--hash STR` — release tag hash. Default: detected from OTP source
git, or `$HASH` env.
* `--otp-src PATH` — OTP source checkout used for hash detection.
* `--out-dir PATH` — directory containing the built tarballs.
Default: `$OUT_DIR` or `/tmp`.
* `--assets BASES` — comma-separated tarball basenames to upload
(e.g. `otp-android,otp-ios-sim`). Default: auto-discover any of
the four canonical names that exist in `--out-dir`.
## Errors
Failures format via `MobDev.Release.Errors.format/1` and raise through
`Mix.raise/1`. The categories of interest here are
`:auth_required` and `:infra_unreachable` — the publish step is the
one place in the release pipeline where the failure is most often
not the user's fault, so the message tells them whether it's a `gh
auth login` problem, a GitHub outage, or something else.
"""
use Mix.Task
alias MobDev.Release.{Errors, Publish}
@switches [
repo: :string,
hash: :string,
otp_src: :string,
out_dir: :string,
assets: :string
]
@impl Mix.Task
def run(args) do
{opts, positional, _} = OptionParser.parse(args, strict: @switches)
case positional do
[] ->
do_publish(opts)
_ ->
Mix.raise("unexpected positional arguments: #{Enum.join(positional, " ")}")
end
end
defp do_publish(opts) do
Mix.shell().info("==> publish to GitHub release")
publish_opts =
opts
|> Enum.reject(fn {_k, v} -> is_nil(v) end)
|> normalize_assets()
case Publish.publish(publish_opts) do
{:ok, info} ->
Mix.shell().info(" ✓ release #{info.tag} on #{info.repo}")
Enum.each(info.assets, &Mix.shell().info(" • #{&1}"))
{:error, _} = err ->
Mix.raise(Errors.format(err))
end
end
defp normalize_assets(opts) do
case Keyword.fetch(opts, :assets) do
{:ok, csv} ->
bases = csv |> String.split(",", trim: true) |> Enum.map(&String.trim/1)
Keyword.put(opts, :assets, bases)
:error ->
opts
end
end
end