Current section

Files

Jump to
teiserver mix.exs
Raw

mix.exs

defmodule Teiserver.MixProject do
use Mix.Project
@source_url "https://github.com/Teifion/teiserver"
@version "0.0.1"
def project do
[
app: :teiserver,
version: @version,
elixir: "~> 1.14",
start_permanent: Mix.env() == :prod,
deps: deps(),
# aliases: aliases(),
preferred_cli_env: [
bench: :test,
"test.ci": :test,
"test.reset": :test,
"test.setup": :test
],
# Hex
description: "Game middleware server",
package: package(),
# Docs
name: "Teiserver",
docs: [
main: "Teiserver",
api_reference: false,
# logo: "assets/teiserver-logo.svg",
source_ref: "v#{@version}",
source_url: @source_url,
extra_section: "GUIDES",
formatters: ["html"],
extras: extras(),
groups_for_extras: groups_for_extras(),
groups_for_modules: groups_for_modules(),
groups_for_docs: groups_for_docs(),
skip_undefined_reference_warnings_on: ["CHANGELOG.md"],
before_closing_head_tag: &before_closing_head_tag/1,
before_closing_body_tag: &before_closing_body_tag/1
]
]
end
defp extras do
[
# Guides
"documentation/guides/installation.md",
"documentation/guides/hello_world.md",
"documentation/guides/program_schema.md",
"documentation/guides/snippets.md",
# Development
"documentation/development/features.md",
"documentation/development/roadmap.md",
"CHANGELOG.md": [title: "Changelog"]
]
end
defp groups_for_extras do
[
Guides: ~r{documentation/guides/[^\/]+\.md},
Development: ~r{documentation/development/[^\/]+\.md}
]
end
defp groups_for_modules do
[
Contexts: [
Teiserver.Account,
Teiserver.Connections,
Teiserver.Settings
],
Account: [
~r"Teiserver.Account.*"
],
Connections: [
~r"Teiserver.Connections.*"
],
Settings: [
~r"Teiserver.Settings.*"
],
Helpers: [
~r"Teiserver.Helpers.*"
],
Internals: [
Teiserver.Config,
Teiserver.Migration,
Teiserver.Registry,
Teiserver.Repo,
TeiserverMacros
]
]
end
def groups_for_docs do
[
# Accounts
Users: &(&1[:section] == :user),
"Extra user data": &(&1[:section] == :extra_user_data),
# Settings
"Site settings": &(&1[:section] == :site_setting),
"User settings": &(&1[:section] == :user_setting)
]
end
defp before_closing_head_tag(:html) do
"""
<script src="https://cdn.jsdelivr.net/npm/mermaid@10.2.3/dist/mermaid.min.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
mermaid.initialize({
startOnLoad: false,
theme: document.body.className.includes("dark") ? "dark" : "default"
});
let id = 0;
for (const codeEl of document.querySelectorAll("pre code.mermaid")) {
const preEl = codeEl.parentElement;
const graphDefinition = codeEl.textContent;
const graphEl = document.createElement("div");
const graphId = "mermaid-graph-" + id++;
mermaid.render(graphId, graphDefinition).then(({svg, bindFunctions}) => {
graphEl.innerHTML = svg;
bindFunctions?.(graphEl);
preEl.insertAdjacentElement("afterend", graphEl);
preEl.remove();
});
}
});
</script>
"""
end
defp before_closing_head_tag(_), do: ""
defp before_closing_body_tag(:html) do
"""
<!-- HTML injected at the end of the <body> element -->
"""
end
defp before_closing_body_tag(_), do: ""
# Run "mix help compile.app" to learn about applications.
def application do
[
extra_applications: [:logger],
mod: {Teiserver.Application, []}
]
end
# Run "mix help deps" to learn about dependencies.
defp deps do
[
{:ecto_sql, "~> 3.10"},
{:postgrex, ">= 0.0.0"},
{:phoenix_pubsub, "~> 2.1"},
{:telemetry_metrics, "~> 0.6"},
{:telemetry_poller, "~> 1.0"},
{:gettext, "~> 0.20"},
{:jason, "~> 1.2"},
{:argon2_elixir, "~> 3.0"},
# Libs I expect to use
# {:timex, "~> 3.7.5"},
# {:parallel, "~> 0.0"},
# {:ex_ulid, "~> 0.1.0"},
# {:csv, "~> 2.4"},
# Dev and Test stuff
{:ex_doc, "~> 0.31", only: :dev, runtime: false},
{:excoveralls, "~> 0.15.3", only: :test, runtime: false},
{:credo, "~> 1.6", only: [:dev, :test], runtime: false},
{:floki, ">= 0.34.0", only: :test},
{:dialyxir, "~> 1.1", only: [:dev], runtime: false}
]
end
defp package do
[
maintainers: ["Teifion Jordan"],
licenses: ["Apache-2.0"],
files: ~w(lib .formatter.exs mix.exs README* CHANGELOG* LICENSE*),
links: %{
"Changelog" => "#{@source_url}/blob/master/CHANGELOG.md",
"GitHub" => @source_url,
"Discord" => "https://discord.gg/NmrSt9zw2p"
}
]
end
# Oban has these and seems to do a really nice job so we're going to use them too
# defp aliases do
# [
# bench: "run bench/bench_helper.exs",
# release: [
# "cmd git tag v#{@version}",
# "cmd git push",
# "cmd git push --tags",
# "hex.publish --yes"
# ],
# "test.reset": ["ecto.drop --quiet", "test.setup"],
# "test.setup": ["ecto.create --quiet", "ecto.migrate --quiet"],
# "test.ci": [
# "format --check-formatted",
# "deps.unlock --check-unused",
# "credo --strict",
# "test --raise",
# "dialyzer"
# ]
# ]
# end
end