bonfire-app/mix.exs

421 lines
15 KiB
Elixir
Raw Permalink Normal View History

Code.eval_file("lib/mix/mess.exs")
Code.eval_file("lib/mix/mixer.ex")
2022-09-12 04:34:14 +00:00
defmodule Bonfire.Umbrella.MixProject do
2020-08-05 07:39:59 +00:00
use Mix.Project
2022-10-14 05:11:56 +00:00
alias Bonfire.Mixer
@default_flavour "classic"
@flavour System.get_env("FLAVOUR") || @default_flavour
# we only behave as an umbrella im dev/test env
2022-11-29 23:44:04 +00:00
@use_local_forks System.get_env("WITH_FORKS", "1") == "1"
2023-12-22 21:50:33 +00:00
ext_forks_path = Mixer.forks_path()
2022-11-30 02:09:02 +00:00
@use_umbrella? Mix.env() == :dev and @use_local_forks and System.get_env("AS_UMBRELLA") == "1" and
2023-12-22 21:50:33 +00:00
File.exists?("#{ext_forks_path}/bonfire")
@umbrella_path if @use_umbrella?, do: ext_forks_path, else: nil
2022-11-30 02:09:02 +00:00
if @use_umbrella?, do: IO.puts("NOTE: Running as umbrella...")
2024-02-21 18:29:18 +00:00
# including it by default breaks Dockerfile.release but not including it like this breaks CI...
@main_deps if(System.get_env("WITH_GIT_DEPS") == "0",
do: [{:bonfire, git: "https://github.com/bonfire-networks/bonfire_spark"}],
else: []
)
2024-03-11 10:45:58 +00:00
@maybe_api_deps if(System.get_env("WITH_API_GRAPHQL") == "yes",
do: [
2024-04-27 09:39:40 +00:00
{:absinthe, "~> 1.7"},
2024-03-11 10:45:58 +00:00
{:bonfire_api_graphql,
2024-04-16 09:59:51 +00:00
git: "https://github.com/bonfire-networks/bonfire_api_graphql"},
2024-04-16 21:13:38 +00:00
{:absinthe_client,
2024-04-16 09:59:51 +00:00
git: "https://github.com/bonfire-networks/absinthe_client"}
2024-03-11 10:45:58 +00:00
],
else: []
)
2024-02-21 18:29:18 +00:00
2024-04-14 10:38:02 +00:00
@maybe_image_vix if(System.get_env("ENABLE_IMAGE_VIX") != "0",
do: [{:image, "~> 0.37", runtime: true, override: true}],
else: []
)
2024-02-21 18:29:18 +00:00
@extra_deps @main_deps ++
2024-03-11 10:45:58 +00:00
@maybe_api_deps ++
2024-04-14 10:38:02 +00:00
@maybe_image_vix ++
2024-02-21 18:29:18 +00:00
[
2024-04-01 15:51:47 +00:00
{:ex_aws, git: "https://github.com/bonfire-networks/ex_aws", override: true},
2024-02-21 18:29:18 +00:00
# compilation
# {:tria, github: "hissssst/tria"},
## password hashing - builtin vs nif
{:pbkdf2_elixir, "~> 2.0", only: [:dev, :test]},
{:argon2_elixir, "~> 4.0", only: [:prod]},
## dev conveniences
{:phoenix_live_reload, "~> 1.3", only: :dev, override: true},
#
# {:exsync, git: "https://github.com/falood/exsync", only: :dev},
# {:mix_unused, "~> 0.4", only: :dev}, # find unused public functions
2024-02-22 16:27:43 +00:00
{:ex_doc, "~> 0.31.1", only: [:dev, :test], runtime: false},
2024-02-21 18:29:18 +00:00
{:ecto_erd, "~> 0.4", only: :dev},
{:excellent_migrations, "~> 0.1", only: [:dev, :test], runtime: false},
# {:ecto_dev_logger, "~> 0.7", 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, "~> 2.0.0", 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"},
# "~> 0.1.0", path: "forks/one_plus_n_detector",
# {:one_plus_n_detector, git: "https://github.com/bonfire-networks/one_plus_n_detector", only: :dev},
{:observer_cli, "~> 1.7", only: [:dev, :test]},
# tests
# {:floki, ">= 0.0.0", only: [:dev, :test]},
# {:pages, "~> 0.12", only: :test}, # extends Floki for testing
{
:phoenix_test,
2024-04-29 15:41:31 +00:00
"~> 0.2.13",
# git: "https://github.com/germsvel/phoenix_test",
only: :test, runtime: false
2024-02-21 18:29:18 +00:00
},
{:mock, "~> 0.3", only: :test},
{:mox, "~> 1.0", only: :test},
{:ex_machina, "~> 2.7", only: [:dev, :test]},
{:zest, "~> 0.1.0"},
{:grumble, "~> 0.1.3", only: [:test], override: true},
{:mix_test_watch, "~> 1.1", only: :test, runtime: false, override: true},
2024-02-22 16:27:43 +00:00
{:mix_test_interactive, "~> 2.0", only: :test, runtime: false},
2024-02-21 18:29:18 +00:00
{:ex_unit_summary, "~> 0.1.0", only: :test},
{:ex_unit_notifier, "~> 1.0", only: :test},
{:wallaby, "~> 0.30", runtime: false, only: :test},
2024-02-22 16:27:43 +00:00
{:credo, "~> 1.7.5", only: :test, override: true},
2024-03-12 14:19:01 +00:00
# used in furlex
2024-03-12 14:22:17 +00:00
# {:bypass, "~> 2.1", only: :test},
2024-02-21 18:29:18 +00:00
{:assert_value, ">= 0.0.0", only: [:dev, :test]},
{:mneme, ">= 0.0.0", only: [:dev, :test]},
# Benchmarking utilities
{:benchee, "~> 1.1", override: true},
{:benchee_html, "~> 1.0", only: [:dev, :test]},
# for Telemetry store
{:circular_buffer, "~> 0.4", only: :dev},
# {:chaperon, "~> 0.3.1", only: [:dev, :test]},
# logging
2024-02-22 16:27:43 +00:00
{:sentry, "~> 10.0", only: [:dev, :prod], override: true},
2024-02-21 18:29:18 +00:00
# list dependencies & licenses
# {
# :licensir,
# only: :dev,
# runtime: false,
# git: "https://github.com/bonfire-networks/licensir",
# # path: "./forks/licensir"
# },
# security auditing
# {:mix_audit, "~> 0.1", only: [:dev], runtime: false}
{:sobelow, "~> 0.12.1", only: :dev}
]
2020-08-05 07:39:59 +00:00
2024-04-01 15:28:15 +00:00
@deps Mixer.mess_sources(@flavour)
|> Mess.deps(@extra_deps,
2024-04-01 14:35:39 +00:00
use_local_forks?: @use_local_forks,
use_umbrella?: @use_umbrella?,
umbrella_root?: @use_local_forks,
umbrella_path: @umbrella_path
)
2024-04-16 21:13:38 +00:00
# |> IO.inspect(limit: :infinity)
2024-04-01 11:19:53 +00:00
@extra_release_apps @deps
2024-04-01 14:35:39 +00:00
|> Enum.filter(fn
{_dep, opts} when is_list(opts) ->
opts[:runtime] == false and
(is_nil(opts[:only]) or :prod in List.wrap(opts[:only]))
{_dep, _, opts} ->
opts[:runtime] == false and
(is_nil(opts[:only]) or :prod in List.wrap(opts[:only]))
_ ->
false
end)
# Mixer.other_flavour_sources()
|> Mixer.deps_names_list()
2024-04-14 18:49:36 +00:00
|> Enum.reject(&(&1 == :bonfire))
2024-04-01 14:35:39 +00:00
|> Enum.map(&{&1, :load})
2024-04-14 18:49:36 +00:00
|> IO.inspect(label: "disabled extensions to still include in release")
2024-04-01 11:19:53 +00:00
2022-09-12 04:34:14 +00:00
# TODO: put these in ENV or an external writeable config file similar to deps.*
@config [
# note that the flavour will automatically be added where the dash appears
2024-04-16 21:13:38 +00:00
version: "0.9.10-beta.62",
2023-08-12 19:26:39 +00:00
elixir: ">= #{System.get_env("ELIXIR_VERSION", "1.13.4")}",
flavour: @flavour,
2022-10-14 05:11:56 +00:00
default_flavour: @default_flavour,
2022-09-12 04:34:14 +00:00
logo: "assets/static/images/bonfire-icon.png",
2022-10-14 05:11:56 +00:00
guides: [
2022-09-12 04:34:14 +00:00
"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: [
2021-12-16 22:56:46 +00:00
docs: [
2022-09-12 04:34:14 +00:00
"bonfire",
2023-12-30 22:30:56 +00:00
"needle",
2022-09-12 04:34:14 +00:00
"paginator",
"ecto_shorts",
"ecto_sparkles",
"absinthe_client",
"activity_pub",
2024-01-16 15:37:40 +00:00
"http_signatures",
2022-09-12 04:34:14 +00:00
"arrows",
"ecto_materialized_path",
2023-12-30 22:30:56 +00:00
"exto",
2024-01-16 15:37:40 +00:00
"untangle",
2022-09-12 04:34:14 +00:00
"grumble",
"linkify",
"verbs",
"voodoo",
"waffle",
2024-01-16 15:37:40 +00:00
# "zest",
"iconify",
"fetch_favicon",
"paper_trail"
2021-12-16 22:56:46 +00:00
],
2022-09-12 04:34:14 +00:00
test: [
"bonfire",
2023-12-30 22:30:56 +00:00
"needle",
2022-12-12 23:14:35 +00:00
# "paginator",
2022-09-12 04:34:14 +00:00
"ecto_shorts",
"ecto_sparkles",
"activity_pub",
2022-09-12 05:12:35 +00:00
"arrows",
2022-09-12 04:34:14 +00:00
"linkify",
2023-07-01 14:45:54 +00:00
"fetch_favicon"
# "paper_trail"
2022-09-12 04:34:14 +00:00
],
data: [
"bonfire_data_",
"bonfire_data_edges",
2023-12-30 22:30:56 +00:00
"needle",
2022-09-12 04:34:14 +00:00
"bonfire_boundaries",
"bonfire_tag",
"bonfire_classify",
"bonfire_geolocate",
"bonfire_quantify",
"bonfire_valueflows"
],
api: [
2023-01-06 00:45:07 +00:00
"bonfire_api_graphql",
2022-09-12 04:34:14 +00:00
"bonfire_me",
"bonfire_social",
"bonfire_tag",
"bonfire_classify",
"bonfire_geolocate",
"bonfire_quantify",
2022-09-12 04:34:14 +00:00
"bonfire_valueflows"
],
required: [
"bonfire_boundaries",
"bonfire_social",
"bonfire_me",
"bonfire_ecto",
"bonfire_epics",
2022-11-09 20:07:56 +00:00
"bonfire_common",
2023-02-02 08:53:21 +00:00
"bonfire_fail",
"bonfire_ui_common",
"bonfire_ui_me",
"bonfire_ui_social"
],
2022-09-12 04:34:14 +00:00
localise: ["bonfire"],
2023-12-16 19:26:07 +00:00
localise_self: [
# FIXME: should extract to root app, not activity_pub like it's doing (for whatever reason)
"activity_pub"
]
2022-10-14 05:11:56 +00:00
],
2024-04-01 11:19:53 +00:00
deps: @deps,
disabled_extensions: @extra_release_apps
# |> IO.inspect(limit: :infinity)
2022-11-30 02:09:02 +00:00
]
2022-10-14 05:11:56 +00:00
def config, do: @config
def deps, do: config()[:deps]
2020-08-05 07:39:59 +00:00
def project do
[
app: :bonfire_umbrella,
apps_path: @umbrella_path,
2022-10-14 05:11:56 +00:00
version: Mixer.version(config()),
elixir: config()[:elixir],
2022-04-07 05:23:18 +00:00
elixirc_options: [debug_info: true, docs: true],
2022-10-14 05:11:56 +00:00
elixirc_paths: Mixer.elixirc_paths(config(), Mix.env()),
test_paths: Mixer.test_paths(config()),
2022-11-29 09:02:21 +00:00
# test_deps: Mixer.deps(config(), :test) |> IO.inspect(),
2022-10-14 05:11:56 +00:00
required_deps: config()[:deps_prefixes][:required],
2023-01-23 04:55:45 +00:00
# consolidate_protocols: false, # for Tria
2022-10-14 05:11:56 +00:00
compilers: Mixer.compilers(Mix.env()),
2020-08-05 07:39:59 +00:00
start_permanent: Mix.env() == :prod,
aliases: aliases(),
deps: deps(),
2022-10-14 05:11:56 +00:00
multirepo_deps: Mixer.deps(config(), :bonfire),
in_multirepo_fn: &Mixer.in_multirepo?/1,
multirepo_recompile_fn: &Mixer.deps_recompile/0,
config_path: "config/config.exs",
releases: [
2022-04-07 06:20:32 +00:00
bonfire: [
runtime_config_path: Mixer.config_path("runtime.exs"),
2023-02-04 04:50:23 +00:00
# should BEAM files should have their debug information, documentation chunks, and other non-essential metadata?
2022-12-06 02:06:49 +00:00
strip_beams: false,
2024-04-01 14:35:39 +00:00
applications:
[
bonfire: :permanent,
# if observability fails it shouldnt take your app down with it
opentelemetry_exporter: :temporary,
opentelemetry: :temporary
] ++ config()[:disabled_extensions]
2022-09-12 04:34:14 +00:00
]
2021-11-19 00:48:15 +00:00
],
2022-10-14 05:11:56 +00:00
sources_url: "https://github.com/bonfire-networks",
2022-03-06 00:32:13 +00:00
source_url: "https://github.com/bonfire-networks/bonfire-app",
homepage_url: "https://bonfirenetworks.org",
2021-11-19 00:48:15 +00:00
docs: [
# The first page to display from the docs
2022-11-29 06:48:46 +00:00
name: "Bonfire",
2021-11-19 00:48:15 +00:00
main: "readme",
2022-10-14 05:11:56 +00:00
logo: config()[:logo],
2021-11-19 00:48:15 +00:00
output: "docs/exdoc",
2022-10-14 05:11:56 +00:00
source_url_pattern: &Mixer.source_url_pattern/2,
2021-12-16 22:56:46 +00:00
# extra pages to include
2022-10-14 05:11:56 +00:00
extras: Mixer.readme_paths(config()),
2022-03-06 00:32:13 +00:00
# extra apps to include in module docs
2022-11-29 06:48:46 +00:00
source_beam: Mixer.docs_beam_paths(config()),
# deps: Mixer.doc_dep_urls(config()),
2022-09-12 04:34:14 +00:00
# Note: first match wins
groups_for_extras: [
Guides: Path.wildcard("docs/*"),
2022-03-06 00:32:13 +00:00
"Flavours of Bonfire": Path.wildcard("flavours/*/*"),
2022-11-29 06:48:46 +00:00
"Data schemas": Path.wildcard("{extensions,deps,forks}/bonfire_data_*/*"),
"UI extensions": Path.wildcard("{extensions,deps,forks}/bonfire_ui_*/*"),
2022-09-12 04:34:14 +00:00
"Bonfire utilities":
[
"bonfire_api_graphql",
"bonfire_boundaries",
"bonfire_common",
"bonfire_ecto",
"bonfire_epics",
"bonfire_fail",
"bonfire_files",
"bonfire_mailer"
]
2022-11-29 06:48:46 +00:00
|> Enum.flat_map(&Path.wildcard("{extensions,deps,forks}/#{&1}/*")),
"Feature extensions": Path.wildcard("{extensions,deps,forks}/bonfire_*/*"),
"Other utilities": Path.wildcard("{extensions,deps,forks}/*/*"),
2022-09-12 04:34:14 +00:00
Dependencies: Path.wildcard("docs/DEPENDENCIES/*")
2022-03-06 00:32:13 +00:00
],
groups_for_modules: [
"Data schemas": ~r/^Bonfire.Data.?/,
"UI extensions": ~r/^Bonfire.UI.?/,
2022-09-12 04:34:14 +00:00
"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?/,
2022-11-29 06:48:46 +00:00
~r/^Bonfire.Mailer?/,
2023-12-30 22:30:56 +00:00
~r/^Needle?/
2022-09-12 04:34:14 +00:00
],
2022-03-06 00:32:13 +00:00
"Feature extensions": [~r/^Bonfire.?/, ~r/^ValueFlows.?/],
2022-11-29 06:48:46 +00:00
Federation: [
~r/^ActivityPub.?/,
~r/^ActivityPub.?/,
~r/^Nodeinfo.?/,
~r/^NodeinfoWeb.?/
],
Icons: ~r/^Iconify.?/,
2022-09-12 04:34:14 +00:00
Utilities: ~r/.?/
2022-03-06 00:32:13 +00:00
],
2022-03-06 01:55:05 +00:00
nest_modules_by_prefix: [
Bonfire.Data,
# Bonfire.UI,
Bonfire,
2022-11-29 06:48:46 +00:00
ActivityPub,
2023-02-20 01:09:04 +00:00
ActivityPub.Web,
2022-11-29 06:48:46 +00:00
# ValueFlows,
Iconify
2022-03-06 01:55:05 +00:00
]
2022-09-12 04:34:14 +00:00
]
2020-08-05 07:39:59 +00:00
]
end
2022-11-30 00:20:49 +00:00
# def application, do: Bonfire.Spark.MixProject.application()
def cli do
[
default_task: "phx.server"
# preferred_envs: [docs: :docs]
]
end
2021-05-16 08:34:50 +00:00
defp aliases do
[
"hex.setup": ["local.hex --force"],
"rebar.setup": ["local.rebar --force"],
hex_setup: [
2023-03-29 06:38:11 +00:00
"hex.setup",
"rebar.setup"
],
2021-10-10 01:02:52 +00:00
"bonfire.seeds": [
# "phil_columns.seed",
],
2022-11-09 20:07:56 +00:00
# FIXME: this does not update transitive deps
2022-10-14 05:11:56 +00:00
"bonfire.deps.update": ["deps.update " <> Mixer.deps_to_update(config())],
2022-09-12 04:34:14 +00:00
"bonfire.deps.clean": [
2022-10-14 05:11:56 +00:00
"deps.clean " <> Mixer.deps_to_clean(config(), :localise) <> " --build"
2022-09-12 04:34:14 +00:00
],
"bonfire.deps.clean.data": [
2022-10-14 05:11:56 +00:00
"deps.clean " <> Mixer.deps_to_clean(config(), :data) <> " --build"
2022-09-12 04:34:14 +00:00
],
"bonfire.deps.clean.api": [
2022-10-14 05:11:56 +00:00
"deps.clean " <> Mixer.deps_to_clean(config(), :api) <> " --build"
2022-09-12 04:34:14 +00:00
],
2023-02-16 01:38:03 +00:00
"bonfire.deps.compile": [
"deps.compile " <> Mixer.deps_to_update(config())
2022-09-12 04:34:14 +00:00
],
2022-03-06 00:32:13 +00:00
"ecto.seeds": [
2022-10-14 05:11:56 +00:00
"run #{Mixer.flavour_path(config())}/repo/seeds.exs"
2022-09-12 04:34:14 +00:00
],
2022-11-04 10:18:59 +00:00
updates: ["deps.get", "bonfire.deps.update"],
2021-05-16 08:34:50 +00:00
upgrade: ["updates", "ecto.migrate"],
2021-11-25 02:21:03 +00:00
"ecto.setup": ["ecto.create", "ecto.migrate"],
2022-12-06 10:35:18 +00:00
"ecto.migrate": ["bonfire.seeds"],
2022-01-09 10:19:16 +00:00
"ecto.reset": ["ecto.drop --force", "ecto.setup"],
2024-03-31 09:53:20 +00:00
"test.with-db": ["ecto.create --quiet", "ecto.migrate --quiet", "test"],
2023-01-16 08:14:25 +00:00
sobelow: ["cmd mix sobelow"]
2021-05-16 08:34:50 +00:00
]
end
2020-08-05 07:39:59 +00:00
end