defmodule Mobilizon.Mixfile do use Mix.Project @version "2.0.0-rc.3" def project do [ app: :mobilizon, version: @version, elixir: "~> 1.12", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:gettext] ++ Mix.compilers(), xref: [exclude: [:eldap]], start_permanent: Mix.env() == :prod, aliases: aliases(), deps: deps(), test_coverage: [tool: ExCoveralls], dialyzer: [plt_add_apps: [:mix]], preferred_cli_env: [ coveralls: :test, "coveralls.detail": :test, "coveralls.post": :test, "coveralls.html": :test ], name: "Mobilizon", source_url: "https://framagit.org/framasoft/mobilizon", homepage_url: "https://joinmobilizon.org", docs: docs(), releases: [ mobilizon: [ include_executables_for: [:unix], applications: [eldap: :transient], config_providers: [{Mobilizon.ConfigProvider, "/etc/mobilizon/config.exs"}], steps: [:assemble, ©_files/1, ©_config/1] ] ], unused: [ ignore: [ Mobilizon.Storage.Repo, Mobilizon.Storage.PostgresTypes, Mobilizon.Factory, Mobilizon.Web.Router.Helpers, Mobilizon.Web.Email.Mailer, Mobilizon.Web.Auth.Guardian.Plug, Mobilizon.Web.Gettext, Mobilizon.Web.Endpoint, Mobilizon.Web.Auth.Guardian, Mobilizon.Web, Mobilizon.GraphQL.Schema.Compiled, Mobilizon.GraphQL.Schema, Mobilizon.Web.Router, Mobilizon.Users.Setting.Location, {:_, :start_link, 1}, {:_, :child_spec, 1}, {:_, :__impl__, 1}, {:_, :__schema__, :_}, {:_, :__struct__, 0..1}, {:_, :__changeset__, 0}, {:_, :create_type, 0}, {:_, :drop_type, 0}, {:_, :schema, 0}, {:_, :schemaless_type, 0}, {:_, :valid_value?, 0..1}, {:_, :__enum_map__, 0}, {:_, :__absinthe_blueprint__, :_}, {:_, :__absinthe_function__, :_}, {~r/^Mobilizon.Web.*Controller/, :_, 2}, {~r/^Mobilizon.Web.*View/, :_, :_}, {~r/^Mobilizon.Web.Email.*/, :render, 3}, {~r/^Mobilizon.Service.HTTP.*Client/, :_, :_}, {~r/^Mobilizon.Cldr.*/, :_, :_}, {Mobilizon.Web.GraphQLSocket, :__channel__, 1} ] ] ] end # Configuration for the OTP application. # # Type `mix help compile.app` for more information. def application do [ mod: {Mobilizon, []}, extra_applications: [:logger, :runtime_tools, :guardian, :bamboo, :geolix, :crypto, :cachex] ] end def copy_files(%{path: target_path} = release) do File.cp_r!("./rel/overlays", target_path) release end def copy_config(%{path: target_path} = release) do support_path = Path.join([target_path, "support"]) File.mkdir!(support_path) File.cp_r!( "./support", support_path ) release end # Specifies which paths to compile per environment. defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(:dev), do: ["lib", "test/support/factory.ex"] defp elixirc_paths(_), do: ["lib"] # Specifies OAuth dependencies. defp oauth_deps do oauth_strategy_packages = System.get_env("OAUTH_CONSUMER_STRATEGIES") |> to_string() |> String.split() |> Enum.map(fn strategy_entry -> with [_strategy, dependency] <- String.split(strategy_entry, ":") do dependency else [strategy] -> "ueberauth_#{strategy}" end end) for s <- oauth_strategy_packages, do: {String.to_atom(s), ">= 0.0.0"} end # Specifies your project dependencies. # # Type `mix help deps` for examples and options. defp deps do [ {:phoenix, "~> 1.6.0"}, {:phoenix_pubsub, "~> 2.0"}, {:phoenix_ecto, "~> 4.0"}, {:postgrex, ">= 0.15.3"}, {:phoenix_html, "~> 3.0"}, {:phoenix_live_view, "~> 0.17.1"}, {:gettext, "~> 0.11"}, {:cowboy, "~> 2.6"}, {:guardian, "~> 2.0"}, {:guardian_db, "~> 2.1.0"}, {:guardian_phoenix, "~> 2.0"}, {:argon2_elixir, "~> 2.0"}, {:cors_plug, "~> 2.0"}, {:ecto_autoslug_field, "~> 3.0"}, {:geo, "~> 3.0"}, {:geo_postgis, "~> 3.1"}, {:timex, "~> 3.0"}, {:icalendar, github: "tcitworld/icalendar"}, {:exgravatar, "~> 2.0.1"}, # {:json_ld, "~> 0.3"}, {:jason, "~> 1.2"}, {:ecto_enum, "~> 1.4"}, {:ex_ical, "~> 0.2"}, {:bamboo, "~> 2.1"}, {:bamboo_phoenix, "~> 1.0"}, {:bamboo_smtp, "~> 4.0"}, {:geolix, "~> 2.0"}, {:geolix_adapter_mmdb2, "~> 0.6.0"}, {:absinthe, "~> 1.6"}, {:absinthe_phoenix, "~> 2.0.1"}, {:absinthe_plug, "~> 1.5.0"}, {:dataloader, "~> 1.0.6"}, {:plug_cowboy, "~> 2.0"}, {:atomex, "~> 0.4"}, {:cachex, "~> 3.1"}, {:geohax, "~> 0.4.0"}, {:mogrify, "~> 0.9"}, {:linkify, "~> 0.3"}, {:http_signatures, "~> 0.1.0"}, {:ex_cldr, "~> 2.0"}, {:ex_cldr_dates_times, "~> 2.2"}, {:ex_optimizer, "~> 0.1"}, {:progress_bar, "~> 2.0"}, {:oban, "~> 2.2"}, {:floki, "~> 0.31"}, {:ip_reserved, "~> 0.1.0"}, {:fast_sanitize, "~> 0.1"}, {:ueberauth, "~> 0.6"}, {:ueberauth_twitter, "~> 0.4"}, {:ueberauth_github, "~> 0.7"}, {:ueberauth_facebook, "~> 0.8"}, {:ueberauth_discord, "~> 0.5"}, {:ueberauth_google, "~> 0.10"}, {:ueberauth_keycloak_strategy, git: "https://github.com/tcitworld/ueberauth_keycloak.git", branch: "upgrade-deps"}, {:ueberauth_gitlab_strategy, git: "https://github.com/tcitworld/ueberauth_gitlab.git", branch: "upgrade-deps"}, {:ecto_shortuuid, "~> 0.1"}, {:tesla, "~> 1.4.0"}, {:sitemapper, "~> 0.6"}, {:xml_builder, "~> 2.2"}, {:remote_ip, "~> 1.0.0"}, {:ex_cldr_languages, "~> 0.3.0"}, {:slugger, "~> 0.3"}, {:sentry, "~> 8.0"}, {:html_entities, "~> 0.5"}, {:sweet_xml, "~> 0.7"}, {:web_push_encryption, "~> 0.3"}, {:eblurhash, "~> 1.2.0"}, {:struct_access, "~> 1.1.2"}, {:paasaa, "~> 0.5.0"}, {:nimble_csv, "~> 1.1"}, {:export, "~> 0.1.0"}, {:tz_world, "~> 1.0"}, {:tzdata, "~> 1.1"}, # Dev and test dependencies {:phoenix_live_reload, "~> 1.2", only: [:dev, :e2e]}, {:ex_machina, "~> 2.3", only: [:dev, :test]}, {:excoveralls, "~> 0.14.0", only: :test}, {:ex_doc, "~> 0.25", only: [:dev, :test], runtime: false}, {:mix_test_watch, "~> 1.0", only: :dev, runtime: false}, {:ex_unit_notifier, "~> 1.0", only: :test}, {:dialyxir, "~> 1.1", only: [:dev], runtime: false}, {:credo, "~> 1.5", only: [:dev, :test], runtime: false}, {:mock, "~> 0.3.4", only: :test}, {:elixir_feed_parser, "~> 2.1.0", only: :test}, {:mox, "~> 1.0", only: :test}, {:junit_formatter, "~> 3.1", only: [:test]}, {:sobelow, "~> 0.8", only: [:dev, :test]}, {:doctor, "~> 0.18.0", only: :dev} ] ++ oauth_deps() end # Aliases are shortcuts or tasks specific to the current project. # For example, to create, migrate and run the seeds file at once: # # $ mix ecto.setup # # See the documentation for `Mix` for more info on aliases. defp aliases do [ "ecto.setup": [ "ecto.create", "ecto.migrate", "run priv/repo/seeds.exs" ], "ecto.reset": [ "ecto.drop", "ecto.setup" ], test: [ "ecto.create", "ecto.migrate", "tz_world.update", &run_test/1 ], "phx.deps_migrate_serve": [ "deps.get", "ecto.create --quiet", "ecto.migrate", "cmd cd js && yarn install && cd ../", "phx.server" ] ] end defp run_test(args) do Mix.Task.run("test", args) File.rm_rf!("test/uploads") end defp docs() do [ source_ref: "v#{@version}", groups_for_modules: groups_for_modules(), nest_modules_by_prefix: [ Mobilizon, Mobilizon.Web, Mobilizon.Service.Geospatial, Mobilizon.Web.Resolvers, Mobilizon.GraphQL.Schema, Mobilizon.Service ] ] end defp groups_for_modules() do [ Models: [ Mobilizon.Actors, Mobilizon.Actors.Actor, Mobilizon.Actors.ActorOpenness, Mobilizon.Actors.ActorType, Mobilizon.Actors.MemberRole, Mobilizon.Actors.Bot, Mobilizon.Actors.Follower, Mobilizon.Actors.Member, Mobilizon.Addresses, Mobilizon.Addresses.Address, Mobilizon.Admin, Mobilizon.Admin.ActionLog, Mobilizon.Events, Mobilizon.Events.Event, Mobilizon.Events.FeedToken, Mobilizon.Events.Participant, Mobilizon.Events.Session, Mobilizon.Events.Tag, Mobilizon.Events.TagRelations, Mobilizon.Events.Track, Mobilizon.Events.EventCategory, Mobilizon.Events.EventStatus, Mobilizon.Events.EventVisibility, Mobilizon.Events.JoinOptions, Mobilizon.Events.ParticipantRole, Mobilizon.Events.Tag.TitleSlug, Mobilizon.Events.Tag.TitleSlug.Type, Mobilizon.Events.TagRelation, Mobilizon.Medias, Mobilizon.Medias.File, Mobilizon.Medias.Media, Mobilizon.Mention, Mobilizon.Reports, Mobilizon.Reports.Note, Mobilizon.Reports.Report, Mobilizon.Share, Mobilizon.Tombstone, Mobilizon.Users, Mobilizon.Users.User, Mobilizon.Users.UserRole, Mobilizon.Federation.ActivityPub.Activity ], APIs: [ Mobilizon.GraphQL.API.Comments, Mobilizon.GraphQL.API.Events, Mobilizon.GraphQL.API.Follows, Mobilizon.GraphQL.API.Groups, Mobilizon.GraphQL.API.Participations, Mobilizon.GraphQL.API.Reports, Mobilizon.GraphQL.API.Search, Mobilizon.GraphQL.API.Utils ], Web: [ Mobilizon.Web, Mobilizon.Web.Endpoint, Mobilizon.Web.Router, Mobilizon.Web.Router.Helpers, Mobilizon.Web.Plugs.UploadedMedia, Mobilizon.Web.FallbackController, Mobilizon.Web.FeedController, Mobilizon.Web.PageController, Mobilizon.Web.ChangesetView, Mobilizon.Web.JsonLD.ObjectView, Mobilizon.Web.EmailView, Mobilizon.Web.ErrorView, Mobilizon.Web.LayoutView, Mobilizon.Web.PageView, Mobilizon.Web.Auth.Context, Mobilizon.Web.Auth.ErrorHandler, Mobilizon.Web.Auth.Guardian, Mobilizon.Web.Auth.Pipeline, Mobilizon.Web.Cache, Mobilizon.Web.Cache.ActivityPub, Mobilizon.Web.Email, Mobilizon.Web.Email.Admin, Mobilizon.Web.Email.Checker, Mobilizon.Web.Email.Event, Mobilizon.Web.Email.Mailer, Mobilizon.Web.Email.Participation, Mobilizon.Web.Email.User, Mobilizon.Web.Upload, Mobilizon.Web.Upload.Filter, Mobilizon.Web.Upload.Filter.AnonymizeFilename, Mobilizon.Web.Upload.Filter.Dedupe, Mobilizon.Web.Upload.Filter.Mogrify, Mobilizon.Web.Upload.Filter.Optimize, Mobilizon.Web.Upload.MIME, Mobilizon.Web.Upload.Uploader, Mobilizon.Web.Upload.Uploader.Local, Mobilizon.Web.ReverseProxy ], Geospatial: [ Mobilizon.Service.Geospatial, Mobilizon.Service.Geospatial.Addok, Mobilizon.Service.Geospatial.GoogleMaps, Mobilizon.Service.Geospatial.MapQuest, Mobilizon.Service.Geospatial.Mimirsbrunn, Mobilizon.Service.Geospatial.Nominatim, Mobilizon.Service.Geospatial.Pelias, Mobilizon.Service.Geospatial.Photon, Mobilizon.Service.Geospatial.Provider ], Localization: [ Mobilizon.Cldr, Mobilizon.Web.Gettext ], GraphQL: [ Mobilizon.Web.GraphQLSocket, Mobilizon.GraphQL.Resolvers.Address, Mobilizon.GraphQL.Resolvers.Admin, Mobilizon.GraphQL.Resolvers.Comment, Mobilizon.GraphQL.Resolvers.Config, Mobilizon.GraphQL.Resolvers.Event, Mobilizon.GraphQL.Resolvers.FeedToken, Mobilizon.GraphQL.Resolvers.Group, Mobilizon.GraphQL.Resolvers.Member, Mobilizon.GraphQL.Resolvers.Person, Mobilizon.GraphQL.Resolvers.Media, Mobilizon.GraphQL.Resolvers.Report, Mobilizon.GraphQL.Resolvers.Search, Mobilizon.GraphQL.Resolvers.Tag, Mobilizon.GraphQL.Resolvers.User, Mobilizon.GraphQL.Schema, Mobilizon.GraphQL.Schema.ActorInterface, Mobilizon.GraphQL.Schema.Actors.ApplicationType, Mobilizon.GraphQL.Schema.Actors.FollowerType, Mobilizon.GraphQL.Schema.Actors.GroupType, Mobilizon.GraphQL.Schema.Actors.MemberType, Mobilizon.GraphQL.Schema.Actors.PersonType, Mobilizon.GraphQL.Schema.AddressType, Mobilizon.GraphQL.Schema.AdminType, Mobilizon.GraphQL.Schema.Discussions.CommentType, Mobilizon.GraphQL.Schema.ConfigType, Mobilizon.GraphQL.Schema.EventType, Mobilizon.GraphQL.Schema.Events.FeedTokenType, Mobilizon.GraphQL.Schema.Events.ParticipantType, Mobilizon.GraphQL.Schema.MediaType, Mobilizon.GraphQL.Schema.ReportType, Mobilizon.GraphQL.Schema.SearchType, Mobilizon.GraphQL.Schema.SortType, Mobilizon.GraphQL.Schema.TagType, Mobilizon.GraphQL.Schema.UserType, Mobilizon.GraphQL.Schema.Utils, Mobilizon.GraphQL.Schema.Custom.Point, Mobilizon.GraphQL.Schema.Custom.UUID ], ActivityPub: [ Mobilizon.Federation.ActivityPub, Mobilizon.Federation.ActivityPub.Audience, Mobilizon.Federation.ActivityPub.Federator, Mobilizon.Federation.ActivityPub.Relay, Mobilizon.Federation.ActivityPub.Transmogrifier, Mobilizon.Federation.ActivityPub.Visibility, Mobilizon.Federation.ActivityPub.Utils, Mobilizon.Federation.ActivityStream.Convertible, Mobilizon.Federation.ActivityStream.Converter, Mobilizon.Federation.ActivityStream.Converter.Actor, Mobilizon.Federation.ActivityStream.Converter.Address, Mobilizon.Federation.ActivityStream.Converter.Comment, Mobilizon.Federation.ActivityStream.Converter.Event, Mobilizon.Federation.ActivityStream.Converter.Flag, Mobilizon.Federation.ActivityStream.Converter.Follower, Mobilizon.Federation.ActivityStream.Converter.Participant, Mobilizon.Federation.ActivityStream.Converter.Media, Mobilizon.Federation.ActivityStream.Converter.Tombstone, Mobilizon.Federation.ActivityStream.Converter.Utils, Mobilizon.Federation.HTTPSignatures.Signature, Mobilizon.Federation.WebFinger, Mobilizon.Federation.WebFinger.XmlBuilder, Mobilizon.Web.Plugs.Federating, Mobilizon.Web.Plugs.HTTPSignatures, Mobilizon.Web.Plugs.MappedSignatureToIdentity, Mobilizon.Web.ActivityPubController, Mobilizon.Web.NodeInfoController, Mobilizon.Web.WebFingerController, Mobilizon.Web.ActivityPub.ActorView, Mobilizon.Web.ActivityPub.ObjectView ], Services: [ Mobilizon.Service.Export.Feed, Mobilizon.Service.Export.ICalendar, Mobilizon.Service.Formatter, Mobilizon.Service.Formatter.HTML, Mobilizon.Service.Formatter.DefaultScrubbler, Mobilizon.Service.Metadata, Mobilizon.Service.Metadata.Actor, Mobilizon.Service.Metadata.Comment, Mobilizon.Service.Metadata.Event, Mobilizon.Service.Metadata.Instance, Mobilizon.Service.Metadata.Utils, Mobilizon.Service.Statistics, Mobilizon.Service.Workers.Background, Mobilizon.Service.Workers.BuildSearch, Mobilizon.Service.Workers.Helper ], Tools: [ Mobilizon.Application, Mobilizon.Config, Mobilizon.Crypto, Mobilizon.Factory, Mobilizon.Storage.Ecto, Mobilizon.Storage.Page, Mobilizon.Storage.Repo ] ] end end