Packages

Build OTP release tarballs with deployment-neutral artifact manifests

Current section

Files

Jump to
release_kit lib release_kit artifact_info.ex
Raw

lib/release_kit/artifact_info.ex

defmodule ReleaseKit.ArtifactInfo do
@moduledoc """
Metadata about a packaged release artifact.
"""
@enforce_keys [:path, :size, :checksum]
defstruct [:path, :size, :checksum, compression: :gzip]
@type checksum :: %{algorithm: :sha256, value: String.t(), sidecar: Path.t() | nil}
@type t :: %__MODULE__{
path: Path.t(),
size: non_neg_integer(),
compression: :gzip,
checksum: checksum()
}
@doc """
Builds artifact metadata for a packaged file.
"""
@spec new(Path.t(), String.t(), Path.t() | nil) :: t()
def new(path, sha256, sidecar \\ nil) do
%__MODULE__{
path: path,
size: File.stat!(path).size,
checksum: %{algorithm: :sha256, value: sha256, sidecar: sidecar}
}
end
@doc """
Converts artifact metadata to the external manifest representation.
"""
@spec to_external_map(t()) :: map()
def to_external_map(%__MODULE__{} = artifact) do
Map.from_struct(artifact)
end
end