From 4461972b91493649e317a9cf2105e57ea8d42f55 Mon Sep 17 00:00:00 2001 From: Simon de Haan Date: Thu, 2 Mar 2023 13:46:12 +0100 Subject: [PATCH 1/2] add support for release candidates --- .tool-versions | 2 ++ config/config.exs | 2 +- lib/mix/tasks/next.ex | 16 ++++++++++++++++ lib/mix/tasks/rc.ex | 26 ++++++++++++++++++++++++++ mix.exs | 2 +- test/tasks/rc_test.exs | 12 ++++++++++++ 6 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 .tool-versions create mode 100644 lib/mix/tasks/rc.ex create mode 100644 test/tasks/rc_test.exs diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..73654c1 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,2 @@ +elixir 1.14.0-otp-25 +erlang 25.0.4 diff --git a/config/config.exs b/config/config.exs index 3240921..36430c3 100644 --- a/config/config.exs +++ b/config/config.exs @@ -1,4 +1,4 @@ -use Mix.Config +import Config # config(:version_tasks, key: :value) # diff --git a/lib/mix/tasks/next.ex b/lib/mix/tasks/next.ex index 6a31ed5..6d4337a 100644 --- a/lib/mix/tasks/next.ex +++ b/lib/mix/tasks/next.ex @@ -32,4 +32,20 @@ defmodule Mix.Tasks.Version.Next do {new_val, ""} = Integer.parse(major) "#{new_val + 1}.0.0" end + + def uptick([major, minor, patch], "rc") do + {major, ""} = Integer.parse(major) + + {major, patch, rc_patch} = + case Integer.parse(patch) do + {patch_val, ""} -> + {major + 1, patch_val, "rc0"} + + {patch_val, "-rc" <> existing_rc} -> + {rc_val, ""} = Integer.parse(existing_rc) + {major, patch_val, "rc#{rc_val + 1}"} + end + + "#{major}.#{minor}.#{patch}-#{rc_patch}" + end end diff --git a/lib/mix/tasks/rc.ex b/lib/mix/tasks/rc.ex new file mode 100644 index 0000000..171a6b1 --- /dev/null +++ b/lib/mix/tasks/rc.ex @@ -0,0 +1,26 @@ +defmodule Mix.Tasks.Version.Rc do + use Mix.Task + use VersionTasks.FnExpr + alias Mix.Tasks.Version.Current + + @shortdoc "Return RC number (so return '1' for version '1.2.3-rc1'" + def run(_) do + calc() |> IO.puts() + end + + def calc(), do: calc(Current.calc()) + + def calc(version) do + version + |> String.split(".") + |> name + end + + defp name([_, _, patch]) do + case Integer.parse(patch) do + {_patch_val, ""} -> "0" + {_patch_val, "-rc" <> existing_rc} -> existing_rc + end + end + defp name(_), do: "" +end diff --git a/mix.exs b/mix.exs index 0444a1d..04a98b9 100644 --- a/mix.exs +++ b/mix.exs @@ -28,7 +28,7 @@ defmodule VersionTasks.Mixfile do [ app: @app, version: @version, - elixir: "~> 1.11", + elixir: "~> 1.14", name: "VersionTasks", description: "A suite of mix tasks for managing your libs version numbers with git and hex", package: @package, diff --git a/test/tasks/rc_test.exs b/test/tasks/rc_test.exs new file mode 100644 index 0000000..e341c92 --- /dev/null +++ b/test/tasks/rc_test.exs @@ -0,0 +1,12 @@ +defmodule Mix.Tasks.Version.RcTest do + use ExUnit.Case + alias Mix.Tasks.Version.Rc + + test "calc" do + assert "0" == Rc.calc("1.2.3") + assert "0" == Rc.calc("2.0.0") + assert "0" == Rc.calc("3.1.0-rc0") + assert "1" == Rc.calc("3.1.0-rc1") + assert "" == Rc.calc("") + end +end From 348e19e86bd3533cd36bd6faf27406ad771a54f9 Mon Sep 17 00:00:00 2001 From: Simon de Haan Date: Thu, 2 Mar 2023 13:56:46 +0100 Subject: [PATCH 2/2] reset minor & patch when doing rc0 --- lib/mix/tasks/next.ex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/mix/tasks/next.ex b/lib/mix/tasks/next.ex index 6d4337a..70d1508 100644 --- a/lib/mix/tasks/next.ex +++ b/lib/mix/tasks/next.ex @@ -36,14 +36,14 @@ defmodule Mix.Tasks.Version.Next do def uptick([major, minor, patch], "rc") do {major, ""} = Integer.parse(major) - {major, patch, rc_patch} = + {major, minor, patch, rc_patch} = case Integer.parse(patch) do - {patch_val, ""} -> - {major + 1, patch_val, "rc0"} + {_patch_val, ""} -> + {major + 1, 0, 0, "rc0"} {patch_val, "-rc" <> existing_rc} -> {rc_val, ""} = Integer.parse(existing_rc) - {major, patch_val, "rc#{rc_val + 1}"} + {major, minor, patch_val, "rc#{rc_val + 1}"} end "#{major}.#{minor}.#{patch}-#{rc_patch}"