50 lines
1.6 KiB
Elixir
50 lines
1.6 KiB
Elixir
defmodule Mix.Tasks.Bds.Package do
|
|
@moduledoc false
|
|
|
|
use Mix.Task
|
|
|
|
@shortdoc "Packages built releases into a redistributable platform payload"
|
|
|
|
@impl Mix.Task
|
|
def run(args) do
|
|
{opts, positional, _invalid} =
|
|
OptionParser.parse(args,
|
|
strict: [output: :string, version: :string, app_release: :string, mcp_release: :string]
|
|
)
|
|
|
|
platform = positional |> List.first() |> normalize_platform_arg()
|
|
version = opts[:version] || Mix.Project.config()[:version]
|
|
env_name = Atom.to_string(Mix.env())
|
|
|
|
package_opts = [
|
|
platform: platform,
|
|
version: version,
|
|
output_dir: opts[:output] || Path.expand("dist/#{platform}", File.cwd!()),
|
|
app_release_source: opts[:app_release] || Path.expand("_build/#{env_name}/rel/bds", File.cwd!()),
|
|
mcp_release_source: opts[:mcp_release] || Path.expand("_build/#{env_name}/rel/bds_mcp", File.cwd!())
|
|
]
|
|
|
|
case BDS.ReleasePackaging.package(package_opts) do
|
|
{:ok, metadata} ->
|
|
Mix.shell().info("Packaged #{metadata.payload_name} at #{metadata.archive_path}")
|
|
|
|
{:error, reason} ->
|
|
Mix.raise("Packaging failed: #{inspect(reason)}")
|
|
end
|
|
end
|
|
|
|
defp normalize_platform_arg(nil), do: current_platform()
|
|
defp normalize_platform_arg("macos"), do: :macos
|
|
defp normalize_platform_arg("linux"), do: :linux
|
|
defp normalize_platform_arg("windows"), do: :windows
|
|
defp normalize_platform_arg(other), do: Mix.raise("Unsupported platform #{inspect(other)}")
|
|
|
|
defp current_platform do
|
|
case :os.type() do
|
|
{:win32, _type} -> :windows
|
|
{:unix, :darwin} -> :macos
|
|
{:unix, _type} -> :linux
|
|
end
|
|
end
|
|
end
|