2020-09-09 15:18:39 +00:00
Code . eval_file ( " mess.exs " )
2020-11-07 14:05:06 +00:00
defmodule Bonfire.MixProject do
2020-08-05 07:39:59 +00:00
use Mix.Project
2021-05-16 08:34:50 +00:00
@config [
2021-10-09 21:55:40 +00:00
version : " 0.1.0-beta.15 " , # note that the flavour will automatically be added where the dash appears
2021-07-02 08:16:56 +00:00
elixir : " ~> 1.12 " ,
2021-05-16 08:34:50 +00:00
default_flavour : " classic " ,
2021-07-04 09:03:17 +00:00
test_deps_prefixes : [ " bonfire_ " , " pointers " , " paginator " ] ,
2021-06-22 20:48:22 +00:00
data_deps_prefixes : [ " bonfire_data_ " , " pointers " , " bonfire_tag " , " bonfire_classify " , " bonfire_geolocate " ]
2021-05-16 08:34:50 +00:00
]
2020-08-05 07:39:59 +00:00
def project do
[
2020-11-07 14:05:06 +00:00
app : :bonfire ,
2021-05-16 08:34:50 +00:00
version : version ( ) ,
elixir : @config [ :elixir ] ,
2021-05-15 18:14:06 +00:00
elixirc_paths : elixirc_paths ( Mix . env ( ) ) ,
2021-05-05 13:29:10 +00:00
test_paths : test_paths ( ) ,
2020-11-10 08:29:02 +00:00
compilers : [ :phoenix , :gettext ] ++ Mix . compilers ( ) ,
2020-08-05 07:39:59 +00:00
start_permanent : Mix . env ( ) == :prod ,
aliases : aliases ( ) ,
2021-05-04 17:29:30 +00:00
deps : deps ( ) ,
config_path : config_path ( " config.exs " ) ,
releases : [
2021-05-04 18:09:59 +00:00
bonfire : [ runtime_config_path : config_path ( " runtime.exs " ) ] ,
2021-05-04 17:29:30 +00:00
]
2020-08-05 07:39:59 +00:00
]
2021-05-16 08:34:50 +00:00
2020-08-05 07:39:59 +00:00
end
2021-05-05 13:29:10 +00:00
def application do
[
mod : { Bonfire.Application , [ ] } ,
2021-06-04 12:14:45 +00:00
extra_applications : [ :logger , :runtime_tools , :os_mon , :ssl , :bamboo , :bamboo_smtp ]
2021-05-05 13:29:10 +00:00
]
2021-05-04 10:25:25 +00:00
end
2020-12-26 17:01:34 +00:00
2021-05-16 08:34:50 +00:00
defp aliases do
[
" hex.setup " : [ " local.hex --force " ] ,
" rebar.setup " : [ " local.rebar --force " ] ,
2021-06-25 11:17:01 +00:00
" js.deps.get " : [ " cmd make js.deps.get " ] ,
" js.deps.update " : [ " cmd cd assets && pnpm update " ] ,
2021-06-08 11:37:53 +00:00
" assets.release " : [
2021-06-08 12:39:11 +00:00
" cmd cd ./assets && pnpm build " ,
2021-05-16 08:34:50 +00:00
] ,
" ecto.seeds " : [
# "phil_columns.seed",
" run #{ flavour_path ( ) } /repo/seeds.exs "
] ,
" bonfire.deps.update " : [ " deps.update " <> deps_to_update ( ) ] ,
" bonfire.deps.clean " : [ " deps.clean " <> deps_to_clean ( ) <> " --build " ] ,
" bonfire.deps " : [ " bonfire.deps.update " , " bonfire.deps.clean " ] ,
2021-06-25 11:17:01 +00:00
setup : [ " hex.setup " , " rebar.setup " , " deps.get " , " bonfire.deps.clean " , " ecto.setup " ] ,
updates : [ " deps.get " , " bonfire.deps " ] ,
2021-05-16 08:34:50 +00:00
upgrade : [ " updates " , " ecto.migrate " ] ,
" ecto.setup " : [ " ecto.create " , " ecto.migrate " , " ecto.seeds " ] ,
" ecto.reset " : [ " ecto.drop " , " ecto.setup " ] ,
test : [ " ecto.create --quiet " , " ecto.migrate --quiet " , " ecto.seeds " , " test " ]
]
end
2020-12-26 17:01:34 +00:00
defp deps ( ) do
2021-05-04 10:25:25 +00:00
Mess . deps ( mess_sources ( ) , [
2020-12-26 17:01:34 +00:00
## password hashing - builtin vs nif
2021-05-13 20:05:27 +00:00
{ :pbkdf2_elixir , " ~> 1.4 " , only : [ :dev , :test ] } ,
2021-09-25 03:33:45 +00:00
{ :argon2_elixir , " ~> 2.4 " , only : [ :prod ] } ,
2020-12-26 17:01:34 +00:00
## dev conveniences
2021-04-08 18:19:52 +00:00
# {:dbg, "~> 1.0", only: [:dev, :test]},
2021-09-25 03:33:45 +00:00
{ :phoenix_live_reload , " ~> 1.3 " , only : :dev } ,
2021-03-02 14:38:17 +00:00
{ :exsync , " ~> 0.2 " , only : :dev } ,
2021-04-27 10:26:40 +00:00
2020-12-26 17:01:34 +00:00
# tests
{ :floki , " >= 0.0.0 " , only : [ :dev , :test ] } ,
{ :ex_machina , " ~> 2.4 " , only : :test } ,
2021-09-25 03:33:45 +00:00
{ :mock , " ~> 0.3 " , only : :test } ,
2020-12-27 12:44:16 +00:00
{ :zest , " ~> 0.1 " } ,
2021-05-11 12:48:32 +00:00
{ :grumble , " ~> 0.1.3 " , only : [ :test ] , override : true } ,
2021-05-11 13:31:15 +00:00
{ :bonfire_api_graphql , git : " https://github.com/bonfire-networks/bonfire_api_graphql " , branch : " main " , only : [ :test ] } ,
2021-06-10 14:46:57 +00:00
{ :mix_test_watch , " ~> 1.0 " , only : :test , runtime : false } ,
{ :mix_test_interactive , " ~> 1.0 " , only : :test , runtime : false } ,
{ :ex_unit_notifier , " ~> 1.0 " , only : :test } ,
2021-04-27 10:26:40 +00:00
2021-02-18 13:45:59 +00:00
# list dependencies & licenses
2021-02-21 18:52:16 +00:00
{ :licensir , only : :dev , runtime : false ,
git : " https://github.com/mayel/licensir " , branch : " pr " ,
# path: "./forks/licensir"
} ,
2021-04-30 10:58:35 +00:00
2021-02-18 13:45:59 +00:00
# security auditing
# {:mix_audit, "~> 0.1", only: [:dev], runtime: false}
{ :sobelow , " ~> 0.8 " , only : :dev }
2021-05-11 13:31:15 +00:00
]
)
2021-05-16 08:34:50 +00:00
2020-12-26 17:01:34 +00:00
end
2021-07-28 10:11:11 +00:00
def catalogues do
[
" deps/surface/priv/catalogue " ,
" forks/bonfire_ui_social/priv/catalogue "
]
end
2021-06-09 11:42:40 +00:00
def deps ( deps \\ deps ( ) , deps_subtype ) when is_atom ( deps_subtype ) , do :
2021-05-16 08:34:50 +00:00
Enum . filter ( deps , & include_dep? ( deps_subtype , &1 ) )
2020-11-28 12:49:44 +00:00
2021-05-16 08:34:50 +00:00
def flavour_path ( ) , do :
2021-06-08 14:11:02 +00:00
System . get_env ( " FLAVOUR_PATH " , " flavours/ " <> flavour ( ) )
2020-09-09 15:18:39 +00:00
2021-05-16 08:34:50 +00:00
def flavour ( ) , do :
2021-06-08 14:11:02 +00:00
System . get_env ( " FLAVOUR " , @config [ :default_flavour ] )
2020-12-26 17:01:34 +00:00
2021-05-11 13:31:15 +00:00
def config_path ( flavour_path \\ flavour_path ( ) , filename ) ,
2021-05-05 13:29:10 +00:00
do : Path . expand ( Path . join ( [ flavour_path , " config " , filename ] ) )
2021-03-23 08:35:29 +00:00
2021-05-16 08:34:50 +00:00
def forks_path ( ) , do : System . get_env ( " LIBS_PATH " , " ./forks/ " )
2021-05-05 13:29:10 +00:00
defp mess_sources ( ) do
mess_sources ( System . get_env ( " WITH_FORKS " , " 1 " ) )
|> Enum . map ( fn { k , v } -> { k , config_path ( v ) } end )
end
2021-03-23 08:35:29 +00:00
2021-05-16 08:34:50 +00:00
defp mess_sources ( " 0 " ) , do : [ git : " deps.git " , hex : " deps.hex " ]
defp mess_sources ( _ ) , do : [ path : " deps.path " , git : " deps.git " , hex : " deps.hex " ]
2021-05-05 13:29:10 +00:00
2021-05-11 13:31:15 +00:00
def deps_to_clean ( ) do
2021-05-16 08:34:50 +00:00
deps ( :data )
|> deps_names ( )
2021-05-11 13:31:15 +00:00
end
def deps_to_update ( ) do
2021-05-16 08:34:50 +00:00
deps ( :update )
|> deps_names ( )
|> IO . inspect ( label : " Running Bonfire #{ version ( ) } with configuration from #{ flavour_path ( ) } in #{ Mix . env ( ) } environment. You can run `mix bonfire.deps.update` to update these extensions and dependencies " )
2021-05-11 13:31:15 +00:00
end
2021-06-09 11:42:40 +00:00
def deps_to_localise ( ) do
deps ( :test )
|> Enum . map ( & dep_name / 1 )
end
2021-05-16 08:34:50 +00:00
# Specifies which paths to include when running tests
defp test_paths ( ) , do : [ " test " | Enum . flat_map ( deps ( :test ) , & dep_paths ( &1 , " test " ) ) ]
# Specifies which paths to compile per environment
defp elixirc_paths ( :test ) , do : [ " lib " , " test/support " | Enum . flat_map ( deps ( :test ) , & dep_paths ( &1 , " test/support " ) ) ]
2021-07-28 10:11:11 +00:00
defp elixirc_paths ( _ ) , do : [ " lib " ] ++ catalogues ( )
2021-05-16 08:34:50 +00:00
defp include_dep? ( :test , dep ) , do : String . starts_with? ( dep_name ( dep ) , @config [ :test_deps_prefixes ] )
defp include_dep? ( :data , dep ) , do : String . starts_with? ( dep_name ( dep ) , @config [ :data_deps_prefixes ] )
defp include_dep? ( :update , dep ) when is_tuple ( dep ) , do : unpinned_git_dep? ( dep )
2021-05-11 13:31:15 +00:00
defp unpinned_git_dep? ( dep ) do
spec = elem ( dep , 1 )
is_list ( spec ) && spec [ :git ] && ! spec [ :commit ]
end
2021-05-16 08:34:50 +00:00
defp dep_name ( dep ) when is_tuple ( dep ) , do : elem ( dep , 0 ) |> dep_name ( )
defp dep_name ( dep ) when is_atom ( dep ) , do : Atom . to_string ( dep )
defp dep_name ( dep ) when is_binary ( dep ) , do : dep
def deps_names ( deps ) do
deps
|> Enum . map ( & dep_name / 1 )
|> Enum . join ( " " )
end
2021-05-15 14:28:18 +00:00
defp dep_path ( dep ) when is_binary ( dep ) do
2021-05-15 18:54:46 +00:00
path_if_exists ( Mix.Project . deps_path ( ) <> " / " <> dep |> Path . relative_to ( File . cwd! ) )
2021-05-16 08:34:50 +00:00
|| path_if_exists ( forks_path ( ) <> dep )
2021-05-15 17:37:37 +00:00
|| " . "
2021-05-15 14:28:18 +00:00
end
2021-05-05 13:29:10 +00:00
defp dep_path ( dep ) do
spec = elem ( dep , 1 )
2021-05-15 14:28:18 +00:00
path = if is_list ( spec ) && spec [ :path ] ,
2021-05-08 18:17:50 +00:00
do : spec [ :path ] ,
2021-05-11 12:16:15 +00:00
else : Mix.Project . deps_path ( ) <> " / " <> dep_name ( dep ) |> Path . relative_to ( File . cwd! )
2021-05-15 14:28:18 +00:00
path_if_exists ( path )
2020-12-26 17:01:34 +00:00
end
2021-05-15 14:28:18 +00:00
defp path_if_exists ( path ) , do : if File . exists? ( path ) , do : path
2021-05-05 13:29:10 +00:00
defp dep_paths ( dep , extra ) when is_list ( extra ) , do : Enum . flat_map ( extra , & dep_paths ( dep , &1 ) )
defp dep_paths ( dep , extra ) when is_binary ( extra ) do
2021-05-15 17:33:58 +00:00
dep_path = dep_path ( dep )
2021-05-19 06:42:43 +00:00
if dep_path do
path = Path . join ( dep_path , extra ) |> path_if_exists ( )
if path , do : [ path ] , else : [ ]
else
[ ]
end
2020-12-26 17:01:34 +00:00
end
2021-05-19 08:37:10 +00:00
def version do
@config [ :version ]
|> String . split ( " - " , parts : 2 )
|> List . insert_at ( 1 , flavour ( ) )
|> Enum . join ( " - " )
end
2020-08-05 07:39:59 +00:00
end