otp_version refactor
[akkoma] / lib / pleroma / otp_version.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.OTPVersion do
6 @type check_status() :: :ok | :undefined | {:error, String.t()}
7
8 @spec check() :: check_status()
9 def check do
10 # OTP Version https://erlang.org/doc/system_principles/versions.html#otp-version
11 [
12 Path.join(:code.root_dir(), "OTP_VERSION"),
13 Path.join([:code.root_dir(), "releases", :erlang.system_info(:otp_release), "OTP_VERSION"])
14 ]
15 |> get_version_from_files()
16 |> do_check()
17 end
18
19 @spec check([Path.t()]) :: check_status()
20 def check(paths) do
21 paths
22 |> get_version_from_files()
23 |> do_check()
24 end
25
26 defp get_version_from_files([]), do: nil
27
28 defp get_version_from_files([path | paths]) do
29 if File.exists?(path) do
30 File.read!(path)
31 else
32 get_version_from_files(paths)
33 end
34 end
35
36 defp do_check(nil), do: :undefined
37
38 defp do_check(version) do
39 version = String.replace(version, ~r/\r|\n|\s/, "")
40
41 [major, minor] =
42 version
43 |> String.split(".")
44 |> Enum.map(&String.to_integer/1)
45 |> Enum.take(2)
46
47 if (major == 22 and minor >= 2) or major > 22 do
48 :ok
49 else
50 {:error, version}
51 end
52 end
53 end