bonfire-app/mix.exs
2022-11-29 19:48:46 +13:00

306 lines
9.7 KiB
Elixir
Executable file

Code.eval_file("lib/mix/mess.exs")
Code.eval_file("lib/mix/mixer.ex")
defmodule Bonfire.Umbrella.MixProject do
use Mix.Project
alias Bonfire.Mixer
# we only behave as an umbrella im dev/test env
@umbrella_path if Mix.env() != :prod, do: Mixer.forks_path(), else: nil
@mess_opts [umbrella_root?: true, umbrella_path: @umbrella_path]
@extra_deps [
## password hashing - builtin vs nif
{:pbkdf2_elixir, "~> 2.0", only: [:dev, :test]},
{:argon2_elixir, "~> 3.0", only: [:prod]},
## dev conveniences
#
# {:exsync, git: "https://github.com/falood/exsync", only: :dev},
# {:mix_unused, "~> 0.4", only: :dev},
{:ex_doc, "~> 0.28.3", only: [:dev, :test], runtime: false},
{:ecto_erd, "~> 0.4", only: :dev},
# {:ecto_dev_logger, "~> 0.4", only: :dev},
# flame graphs in live_dashboard
# {:flame_on, "~> 0.5", only: :dev},
{:pseudo_gettext, git: "https://github.com/tmbb/pseudo_gettext", only: :dev},
{:periscope, "~> 0.4", only: :dev},
# {:changelog, "~> 0.1", only: [:dev, :test], runtime: false}, # retrieve changelogs of latest dependency versions
# changelog generation
{:versioce, "~> 1.1.2", only: :dev},
# needed for changelog generation
{:git_cli, "~> 0.3.0", only: :dev},
# {:archeometer, git: "https://gitlab.com/mayel/archeometer", only: [:dev, :test]}, # "~> 0.1.0" # disabled because exqlite not working in CI
{:recode, "~> 0.4", only: :dev},
# API client needed for changelog generation
{:neuron, "~> 5.0", only: :dev, override: true},
# note: cannot use only: dev
# {:phoenix_profiler, "~> 0.2.0"},
# tests
{:floki, ">= 0.0.0", only: [:dev, :test]},
{:mock, "~> 0.3", only: :test},
# {:mox, "~> 1.0", only: :test},
{:zest, "~> 0.1.0"},
{:grumble, "~> 0.1.3", only: [:test], override: true},
{:mix_test_watch, "~> 1.1", only: :test, runtime: false, override: true},
{:mix_test_interactive, "~> 1.2", only: :test, runtime: false},
{:ex_unit_notifier, "~> 1.0", only: :test},
{:wallaby, "~> 0.30", runtime: false, only: :test},
# {:bypass, "~> 2.1", only: :test}, # used in furlex
# Benchmarking utilities
{:benchee, "~> 1.1", only: :dev},
{:benchee_html, "~> 1.0", only: :dev},
# list dependencies & licenses
{
:licensir,
only: :dev,
runtime: false,
git: "https://github.com/bonfire-networks/licensir",
branch: "main"
# path: "./forks/licensir"
},
# security auditing
# {:mix_audit, "~> 0.1", only: [:dev], runtime: false}
{:sobelow, "~> 0.8", only: :dev}
]
# TODO: put these in ENV or an external writeable config file similar to deps.*
@default_flavour "classic"
@config [
# note that the flavour will automatically be added where the dash appears
version: "0.3.6-beta.7",
elixir: "~> 1.13",
default_flavour: @default_flavour,
logo: "assets/static/images/bonfire-icon.png",
guides: [
"README.md",
"docs/HACKING.md",
"docs/DEPLOY.md",
"docs/ARCHITECTURE.md",
"docs/BONFIRE-FLAVOURED-ELIXIR.md",
"docs/DATABASE.md",
"docs/BOUNDARIES.md",
"docs/GRAPHQL.md",
"docs/MRF.md",
"docs/CHANGELOG.md",
"docs/CHANGELOG-autogenerated.md"
],
deps_prefixes: [
docs: [
"bonfire",
"pointers",
"paginator",
"ecto_shorts",
"ecto_sparkles",
"absinthe_client",
"activity_pub",
"arrows",
"ecto_materialized_path",
"flexto",
"grumble",
"linkify",
"verbs",
"voodoo",
"waffle",
"zest"
],
test: [
"bonfire",
"pointers",
"paginator",
"ecto_shorts",
"ecto_sparkles",
"activity_pub",
"arrows",
"linkify",
"fetch_favicon"
],
data: [
"bonfire_data_",
"bonfire_data_edges",
"pointers",
"bonfire_boundaries",
"bonfire_tag",
"bonfire_classify",
"bonfire_geolocate",
"bonfire_quantify",
"bonfire_valueflows"
],
api: [
"bonfire_me",
"bonfire_social",
"bonfire_tag",
"bonfire_classify",
"bonfire_geolocate",
"bonfire_valueflows"
],
required: [
"bonfire_boundaries",
"bonfire_social",
"bonfire_me",
"bonfire_ecto",
"bonfire_epics",
"bonfire_common",
"bonfire_fail"
],
localise: ["bonfire"],
localise_self: []
],
deps: Mess.deps(Mixer.mess_sources(@default_flavour), @extra_deps, @mess_opts)
]
def config, do: @config
def deps, do: config()[:deps]
def project do
[
app: :bonfire_umbrella,
apps_path: @umbrella_path,
version: Mixer.version(config()),
elixir: config()[:elixir],
elixirc_options: [debug_info: true, docs: true],
elixirc_paths: Mixer.elixirc_paths(config(), Mix.env()),
test_paths: Mixer.test_paths(config()),
test_deps: Mixer.deps(config(), :test),
required_deps: config()[:deps_prefixes][:required],
compilers: Mixer.compilers(Mix.env()),
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps(),
multirepo_deps: Mixer.deps(config(), :bonfire),
in_multirepo_fn: &Mixer.in_multirepo?/1,
multirepo_recompile_fn: &Mixer.deps_recompile/0,
config_path: Mixer.config_path(config(), "config.exs"),
releases: [
bonfire: [
runtime_config_path: Mixer.config_path(config(), "runtime.exs"),
# to enable debugging
strip_beams: false
]
],
sources_url: "https://github.com/bonfire-networks",
source_url: "https://github.com/bonfire-networks/bonfire-app",
homepage_url: "https://bonfirenetworks.org",
docs: [
# The first page to display from the docs
name: "Bonfire",
main: "readme",
logo: config()[:logo],
output: "docs/exdoc",
source_url_pattern: &Mixer.source_url_pattern/2,
# extra pages to include
extras: Mixer.readme_paths(config()),
# extra apps to include in module docs
source_beam: Mixer.docs_beam_paths(config()),
# deps: Mixer.doc_dep_urls(config()),
# Note: first match wins
groups_for_extras: [
Guides: Path.wildcard("docs/*"),
"Flavours of Bonfire": Path.wildcard("flavours/*/*"),
"Data schemas": Path.wildcard("{extensions,deps,forks}/bonfire_data_*/*"),
"UI extensions": Path.wildcard("{extensions,deps,forks}/bonfire_ui_*/*"),
"Bonfire utilities":
[
"bonfire_api_graphql",
"bonfire_boundaries",
"bonfire_common",
"bonfire_ecto",
"bonfire_epics",
"bonfire_fail",
"bonfire_files",
"bonfire_mailer"
]
|> Enum.flat_map(&Path.wildcard("{extensions,deps,forks}/#{&1}/*")),
"Feature extensions": Path.wildcard("{extensions,deps,forks}/bonfire_*/*"),
"Other utilities": Path.wildcard("{extensions,deps,forks}/*/*"),
Dependencies: Path.wildcard("docs/DEPENDENCIES/*")
],
groups_for_modules: [
"Data schemas": ~r/^Bonfire.Data.?/,
"UI extensions": ~r/^Bonfire.UI.?/,
"Bonfire utilities": [
~r/^Bonfire.API?/,
~r/^Bonfire.GraphQL?/,
~r/^Bonfire.Web?/,
~r/^Bonfire.Boundaries?/,
~r/^Bonfire.Common?/,
~r/^Bonfire.Ecto?/,
~r/^Bonfire.Epics?/,
~r/^Bonfire.Fail?/,
~r/^Bonfire.Files?/,
~r/^Bonfire.Mailer?/,
~r/^Pointers?/
],
"Feature extensions": [~r/^Bonfire.?/, ~r/^ValueFlows.?/],
Federation: [
~r/^ActivityPub.?/,
~r/^ActivityPub.?/,
~r/^Nodeinfo.?/,
~r/^NodeinfoWeb.?/
],
Icons: ~r/^Iconify.?/,
Utilities: ~r/.?/
],
nest_modules_by_prefix: [
Bonfire.Data,
# Bonfire.UI,
Bonfire,
ActivityPub,
ActivityPubWeb,
# ValueFlows,
Iconify
]
]
]
end
defp aliases do
[
"hex.setup": ["local.hex --force"],
"rebar.setup": ["local.rebar --force"],
"assets.build": [
"cmd cd ./assets && yarn build"
],
"bonfire.seeds": [
# "phil_columns.seed",
],
# FIXME: this does not update transitive deps
"bonfire.deps.update": ["deps.update " <> Mixer.deps_to_update(config())],
"bonfire.deps.clean": [
"deps.clean " <> Mixer.deps_to_clean(config(), :localise) <> " --build"
],
"bonfire.deps.clean.data": [
"deps.clean " <> Mixer.deps_to_clean(config(), :data) <> " --build"
],
"bonfire.deps.clean.api": [
"deps.clean " <> Mixer.deps_to_clean(config(), :api) <> " --build"
],
"bonfire.deps.recompile": [
"deps.compile " <> Mixer.deps_to_update(config()) <> " --force"
],
"ecto.seeds": [
"run #{Mixer.flavour_path(config())}/repo/seeds.exs"
],
"js.deps.get": ["cmd make js.deps.get"],
"js.deps.update": ["cmd cd assets && yarn update"],
setup: [
"hex.setup",
"rebar.setup",
"deps.get",
"bonfire.deps.clean.data",
"ecto.setup"
],
updates: ["deps.get", "bonfire.deps.update"],
upgrade: ["updates", "ecto.migrate"],
"ecto.setup": ["ecto.create", "ecto.migrate"],
"ecto.migrate": ["ecto.migrate", "bonfire.seeds"],
"ecto.reset": ["ecto.drop --force", "ecto.setup"],
test: ["ecto.create --quiet", "ecto.migrate --quiet", "test"]
]
end
end