feat: build infrastructure
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
74
test/bds/release_packaging_test.exs
Normal file
74
test/bds/release_packaging_test.exs
Normal file
@@ -0,0 +1,74 @@
|
||||
defmodule BDS.ReleasePackagingTest do
|
||||
use ExUnit.Case, async: false
|
||||
|
||||
alias BDS.ReleasePackaging
|
||||
|
||||
setup do
|
||||
base_dir = Path.join(System.tmp_dir!(), "bds-release-packaging-#{System.unique_integer([:positive])}")
|
||||
output_dir = Path.join(base_dir, "dist")
|
||||
app_release = Path.join(base_dir, "rel/bds")
|
||||
mcp_release = Path.join(base_dir, "rel/bds_mcp")
|
||||
|
||||
File.mkdir_p!(Path.join(app_release, "bin"))
|
||||
File.mkdir_p!(Path.join(mcp_release, "mcp/bin"))
|
||||
File.write!(Path.join(app_release, "bin/bds"), "app-release")
|
||||
File.write!(Path.join(mcp_release, "mcp/bin/bds-mcp"), "mcp-release")
|
||||
|
||||
on_exit(fn -> File.rm_rf(base_dir) end)
|
||||
|
||||
%{base_dir: base_dir, output_dir: output_dir, app_release: app_release, mcp_release: mcp_release}
|
||||
end
|
||||
|
||||
test "build metadata uses a clean future-app payload layout" do
|
||||
metadata = ReleasePackaging.build_metadata(:macos, "0.1.0", "/tmp/out")
|
||||
|
||||
assert metadata.platform == :macos
|
||||
assert metadata.version == "0.1.0"
|
||||
assert metadata.archive_path =~ ".tar.gz"
|
||||
assert metadata.payload_root =~ "bds2-macos-0.1.0"
|
||||
assert metadata.resources_root == Path.join(metadata.payload_root, "resources")
|
||||
assert metadata.mcp_root == Path.join(metadata.payload_root, "resources/mcp")
|
||||
assert metadata.app_root == Path.join(metadata.payload_root, "app")
|
||||
end
|
||||
|
||||
test "package creates payload manifest and copies app and mcp releases", context do
|
||||
assert {:ok, metadata} =
|
||||
ReleasePackaging.package(
|
||||
platform: :macos,
|
||||
version: "0.1.0",
|
||||
output_dir: context.output_dir,
|
||||
app_release_source: context.app_release,
|
||||
mcp_release_source: context.mcp_release
|
||||
)
|
||||
|
||||
assert File.exists?(Path.join(metadata.app_root, "bin/bds"))
|
||||
assert File.exists?(Path.join(metadata.mcp_root, "bin/bds-mcp"))
|
||||
assert File.exists?(Path.join(metadata.payload_root, "manifest.json"))
|
||||
|
||||
manifest = metadata.payload_root |> Path.join("manifest.json") |> File.read!() |> Jason.decode!()
|
||||
|
||||
assert manifest == %{
|
||||
"platform" => "macos",
|
||||
"version" => "0.1.0",
|
||||
"layout" => %{
|
||||
"app" => "app",
|
||||
"resources" => "resources",
|
||||
"mcp" => "resources/mcp"
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
test "package creates a platform archive for redistribution", context do
|
||||
assert {:ok, metadata} =
|
||||
ReleasePackaging.package(
|
||||
platform: :windows,
|
||||
version: "0.1.0",
|
||||
output_dir: context.output_dir,
|
||||
app_release_source: context.app_release,
|
||||
mcp_release_source: context.mcp_release
|
||||
)
|
||||
|
||||
assert File.exists?(metadata.archive_path)
|
||||
assert String.ends_with?(metadata.archive_path, ".zip")
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user