From 178f6369f6638d1b5428b7d83288abd3e73e5591 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Wed, 3 Sep 2025 10:00:38 +0300 Subject: [PATCH] Add task to check sqlean extensions version --- lib/mix/tasks/sqlean/check_version.ex | 31 +++++++++++++++++++++++ lib/mix/tasks/sqlean/release.ex | 36 +++++++++++++++++++++++++++ priv/sqlite_extensions/VERSION | 1 + 3 files changed, 68 insertions(+) create mode 100644 lib/mix/tasks/sqlean/check_version.ex create mode 100644 lib/mix/tasks/sqlean/release.ex create mode 100644 priv/sqlite_extensions/VERSION diff --git a/lib/mix/tasks/sqlean/check_version.ex b/lib/mix/tasks/sqlean/check_version.ex new file mode 100644 index 00000000..6c2cef60 --- /dev/null +++ b/lib/mix/tasks/sqlean/check_version.ex @@ -0,0 +1,31 @@ +defmodule Mix.Tasks.Sqlean.CheckVersion do + @shortdoc "Checks the the current Sqlean extensions version is the latest" + @moduledoc """ + Checks the the current Sqlean extensions version is the latest. + + Exits with 0 if versions match, 1 if the extensions needs to be updated. + """ + + use Mix.Task + + alias Mix.Tasks.Sqlean.Release + + @impl Mix.Task + def run(_args) do + current_version = + Release.fetch_current_version() + + latest_version = + Release.fetch_latest_version!() + + if current_version === latest_version do + Mix.Shell.IO.info("The sqlean extensions version is up to date (#{current_version})") + else + Mix.Shell.IO.info( + "A new sqlean extensions version is available: #{current_version} ==> #{latest_version}" + ) + + System.halt(1) + end + end +end diff --git a/lib/mix/tasks/sqlean/release.ex b/lib/mix/tasks/sqlean/release.ex new file mode 100644 index 00000000..f8a9f320 --- /dev/null +++ b/lib/mix/tasks/sqlean/release.ex @@ -0,0 +1,36 @@ +defmodule Mix.Tasks.Sqlean.Release do + @latest_version_url "https://raw.githubusercontent.com/nalgeon/sqlean/refs/heads/main/sqlpkg.json" + + def fetch_latest_version! do + Application.ensure_all_started(:req) + + @latest_version_url + |> Req.get!() + |> Map.get(:body) + |> JSON.decode!() + |> Map.get("version") + end + + def fetch_current_version do + Application.app_dir(:music_library, [ + "priv", + "sqlite_extensions", + "VERSION" + ]) + |> File.read!() + |> String.trim() + end + + def update_config_file!(config_file, current_version, latest_version) do + config_contents = File.read!(config_file) + + new_config_contents = + String.replace( + config_contents, + ~s(version: "#{current_version}"), + "version: \"#{latest_version}\"" + ) + + File.write!(config_file, new_config_contents) + end +end diff --git a/priv/sqlite_extensions/VERSION b/priv/sqlite_extensions/VERSION new file mode 100644 index 00000000..697f087f --- /dev/null +++ b/priv/sqlite_extensions/VERSION @@ -0,0 +1 @@ +0.28.0