diff --git a/lib/mix/tasks/tailwind/check_version.ex b/lib/mix/tasks/tailwind/check_version.ex new file mode 100644 index 00000000..efeb9441 --- /dev/null +++ b/lib/mix/tasks/tailwind/check_version.ex @@ -0,0 +1,35 @@ +defmodule Mix.Tasks.Tailwind.CheckVersion do + use Mix.Task + + @shortdoc "Checks the the current Tailwind version is the latest" + @moduledoc """ + Checks the the current Tailwind version is the latest. + + Exits with 0 if versions match, 1 if the Tailwind needs to be updated. + """ + + @impl Mix.Task + def run(_args) do + Application.ensure_all_started(:req) + + current_version = + Application.get_env(:tailwind, :version) + + latest_version_url = + "https://api.github.com/repos/tailwindlabs/tailwindcss/releases/latest" + + latest_version = + Req.get!(latest_version_url).body["tag_name"] + |> String.replace_prefix("v", "") + + if current_version !== latest_version do + Mix.Shell.IO.info( + "A new tailwind version is available: #{current_version} ==> #{latest_version}" + ) + + System.halt(1) + else + Mix.Shell.IO.info("The tailwind version is up to date (#{current_version})") + end + end +end diff --git a/mise.toml b/mise.toml index 08174e98..355a7629 100644 --- a/mise.toml +++ b/mise.toml @@ -29,6 +29,11 @@ description = 'Update the Tailwind version configured in the project' run = 'mix tailwind.update_version' hide = true +[tasks.tailwind-outdated] +description = 'Checks that the Tailwind version is up to date' +run = 'mix tailwind.check_version' +hide = true + [tasks.setup] depends = ['npm-install'] description = 'Install dependencies and setup the database' @@ -40,7 +45,7 @@ description = 'Update dependencies' run = ['mix deps.update --all'] [tasks.deps-outdated] -depends = ['npm-outdated'] +depends = ['npm-outdated', 'tailwind-outdated'] description = 'Show outdated dependencies' run = ['mix hex.outdated --all']