defmodule Tank.MixProject do
use Mix.Project
@version "0.2.0"
@source_url "https://github.com/oshlabs/tank"
# Tank is a *consumer* of Linx, not part of the Linx package. It depends on
# Linx as a published hex package, so it can only reach Linx's public API,
# never its internals.
def project do
[
app: :tank,
version: @version,
elixir: "~> 1.18",
start_permanent: false,
deps: deps(),
name: "Tank",
description:
"A declarative container orchestrator for Linux, built on the public Linx " <>
"API: declare pods of namespaced workloads as data, and a reconcile loop " <>
"converges the machine onto them — host-reconciled macvlan networking, " <>
"cgroup limits, and a Khepri-backed desired-state store.",
source_url: @source_url,
package: package(),
docs: docs()
]
end
def application do
[
extra_applications: [:logger, :crypto],
mod: {Tank.Application, []}
]
end
defp package do
[
licenses: ["MIT"],
links: %{
"GitHub" => @source_url,
"Changelog" => "#{@source_url}/blob/main/CHANGELOG.md"
},
# Ship only the library sources. The dev-time config/, the docs/ extras
# (rendered to hexdocs separately), and the sudo helper scripts are not
# part of the package; Tank reads its own config with in-code defaults,
# so consumers supply config, never these files.
files: ~w(lib mix.exs README.md LICENSE),
maintainers: ["Leon de Rooij"]
]
end
defp deps do
[
{:linx, "~> 0.1"},
# OCI toolkit — all registry fetching goes through Stevedore (Tank.Image.Registry
# is a thin shim over it). 0.2 adds the token cache the shim threads per pull. Its
# docker:// client uses :req, declared below.
{:stevedore, "~> 0.2"},
# HTTP client: Tank.Image.Registry's shim and Stevedore's docker:// client both use it.
{:req, "~> 0.5"},
# Tree-structured, Raft-replicated desired-state store (Tank.Store).
{:khepri, "~> 0.18.0"},
{:ex_doc, "~> 0.34", only: :dev, runtime: false}
]
end
defp docs do
[
main: "readme",
# Generated HTML lands under _build/, alongside other build artefacts.
output: "_build/docs",
source_ref: "v#{@version}",
extras: [
"README.md",
"CHANGELOG.md",
"docs/EXAMPLES.md": [title: "Tank by example"],
LICENSE: [title: "License"]
]
]
end
end