extend custom runtime system (#108)

Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/108
This commit is contained in:
floatingghost 2022-07-24 16:42:43 +00:00
parent f9a7b456eb
commit c4e9c4bc95
7 changed files with 46 additions and 3 deletions

View file

@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased] ## [Unreleased]
### Added
- extended runtime module support, see config cheatsheet
### Fixed ### Fixed
- Updated mastoFE path, for the newer version - Updated mastoFE path, for the newer version
@ -18,7 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- `/api/v1/notifications/dismiss` - `/api/v1/notifications/dismiss`
- `/api/v1/search` - `/api/v1/search`
- `/api/v1/statuses/{id}/card` - `/api/v1/statuses/{id}/card`
- LDAP authenticator - LDAP authenticator (use the akkoma-contrib-authenticator-ldap runtime module)
- Chats, they were half-baked. Just use PMs. - Chats, they were half-baked. Just use PMs.
- Prometheus, it causes massive slowdown - Prometheus, it causes massive slowdown

View file

@ -1012,7 +1012,22 @@ config :pleroma, Pleroma.Formatter,
## Custom Runtime Modules (`:modules`) ## Custom Runtime Modules (`:modules`)
* `runtime_dir`: A path to custom Elixir modules (such as MRF policies). * `runtime_dir`: A path to custom Elixir modules, such as MRF policies or
custom authenticators. These modules will be loaded on boot, and can be
contained in subdirectories. It is advised to use version-controlled
subdirectories to make management of them a bit easier. Note that only
files with the extension `.ex` will be loaded.
```elixir
config :pleroma, :modules, runtime_dir: "instance/modules"
```
### Adding a module
```bash
cd instance/modules/
git clone <MY MODULE>
```
## :configurable_from_database ## :configurable_from_database

View file

@ -14,10 +14,23 @@ defmodule Pleroma.Utils do
@repo_timeout Pleroma.Config.get([Pleroma.Repo, :timeout], 15_000) @repo_timeout Pleroma.Config.get([Pleroma.Repo, :timeout], 15_000)
def compile_dir(dir) when is_binary(dir) do def compile_dir(dir) when is_binary(dir) do
dir
|> elixir_files()
|> Kernel.ParallelCompiler.compile()
end
defp elixir_files(dir) when is_binary(dir) do
dir dir
|> File.ls!() |> File.ls!()
|> Enum.map(&Path.join(dir, &1)) |> Enum.map(&Path.join(dir, &1))
|> Kernel.ParallelCompiler.compile() |> Enum.flat_map(fn path ->
if File.dir?(path) do
elixir_files(path)
else
[path]
end
end)
|> Enum.filter(fn path -> String.ends_with?(path, ".ex") end)
end end
@doc """ @doc """

View file

@ -0,0 +1,2 @@
defmodule DynamicModule.First do
end

View file

@ -0,0 +1 @@
def thisisnotloaded

View file

@ -0,0 +1,2 @@
defmodule DynamicModule.Second do
end

View file

@ -12,4 +12,11 @@ defmodule Pleroma.UtilsTest do
File.rm_rf(path) File.rm_rf(path)
end end
end end
describe "compile_dir/1" do
test "recursively compiles directories" do
{:ok, [DynamicModule.First, DynamicModule.Second], []} =
Pleroma.Utils.compile_dir("test/fixtures/runtime_modules")
end
end
end end