defmodule Stevedore.MixProject do
use Mix.Project
@version "0.2.0"
@source_url "https://github.com/oshlabs/stevedore"
def project do
[
app: :stevedore,
version: @version,
elixir: "~> 1.18",
start_permanent: Mix.env() == :prod,
elixirc_paths: elixirc_paths(Mix.env()),
deps: deps(),
name: "Stevedore",
source_url: @source_url,
description:
"A library-first, daemonless OCI toolkit for Elixir — everything you can do to a container image except run it.",
package: package(),
docs: docs(),
dialyzer: [
plt_add_apps: [:public_key, :crypto, :mix],
plt_local_path: "priv/plts",
plt_core_path: "priv/plts"
]
]
end
# Weightless by default: no `mod:`, so adding Stevedore starts no processes.
# The standalone registry server boots only via an explicit Stevedore.start_link/1.
def application do
[
# :xmerl is test-only (the :conformance suite parses junit.xml). Deps compile under :prod, so
# consumers of the library never carry it — keeping the runtime weightless.
extra_applications: [:logger, :crypto, :public_key] ++ test_applications(Mix.env())
]
end
defp test_applications(:test), do: [:xmerl]
defp test_applications(_), do: []
# Test-only support modules (oracle-tool helpers, fixtures) compile only under :test.
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
# Optional: only loaded when you use a mode that needs it (see PLAN §5).
{:req, "~> 0.5", optional: true},
{:plug, "~> 1.16", optional: true},
{:bandit, "~> 1.5", optional: true},
{:ex_doc, "~> 0.34", only: :dev, runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
# Test-only: validate emitted JSON against the vendored OCI image-spec schemas (Step 9B).
# Kept out of the runtime to preserve the "weightless by default" invariant (AGENTS.md).
{:ex_json_schema, "~> 0.10", only: :test}
]
end
defp package do
[
licenses: ["Apache-2.0"],
links: %{
"GitHub" => @source_url,
"Changelog" => "#{@source_url}/blob/main/CHANGELOG.md"
},
files: ~w(lib mix.exs README.md LICENSE CHANGELOG.md AGENTS.md docs .formatter.exs)
]
end
defp docs do
[
main: "readme",
source_ref: "v#{@version}",
extras: [
"README.md",
"docs/EXAMPLES.md",
"docs/REFERENCES.md",
"docs/TESTING.md",
"AGENTS.md",
"CHANGELOG.md",
"LICENSE"
],
groups_for_extras: [
Guides: ["docs/EXAMPLES.md", "docs/REFERENCES.md", "docs/TESTING.md", "AGENTS.md"]
],
groups_for_modules: [
"Top-level API": [Stevedore],
"Core types": [
Stevedore.Reference,
Stevedore.Digest,
Stevedore.MediaType,
Stevedore.Descriptor,
Stevedore.Manifest,
Stevedore.Config,
Stevedore.Image,
Stevedore.Layer
],
"Build, copy & modify": [
Stevedore.Build,
Stevedore.Copy,
Stevedore.Mutate
],
Analyze: [Stevedore.Analyze],
"Sign & verify": [
Stevedore.Sign,
Stevedore.Verify,
Stevedore.Referrers,
Stevedore.Sign.Sigstore
],
"Registry client": [Stevedore.Registry, Stevedore.Auth, Stevedore.Auth.Cache],
Transports: [
Stevedore.Transport,
Stevedore.Transport.Registry,
Stevedore.Transport.OCILayout,
Stevedore.Transport.Archive,
Stevedore.Transport.Dir,
Stevedore.Transport.Static,
Stevedore.Transport.Memory,
Stevedore.Transport.Parse
],
"Storage & archives": [
Stevedore.Store,
Stevedore.Store.Local,
Stevedore.Store.Memory,
Stevedore.Archive
],
"Server & deploy": [
Stevedore.Server,
Stevedore.Server.Uploads,
Stevedore.Plug,
Stevedore.Deploy
],
CLI: [
Stevedore.CLI,
Mix.Tasks.Stevedore.Copy,
Mix.Tasks.Stevedore.Delete,
Mix.Tasks.Stevedore.Deploy,
Mix.Tasks.Stevedore.Inspect,
Mix.Tasks.Stevedore.ListTags,
Mix.Tasks.Stevedore.Sign,
Mix.Tasks.Stevedore.Sync,
Mix.Tasks.Stevedore.Verify
],
Errors: [
Stevedore.Archive.Error,
Stevedore.Auth.Error,
Stevedore.Registry.Error,
Stevedore.Sign.Error,
Stevedore.Verify.Error
]
]
]
end
end