From 8b299d161b2590e3ca3fdb26410c511697ee4a22 Mon Sep 17 00:00:00 2001 From: Eduardo Date: Thu, 8 Jun 2023 20:38:20 +0000 Subject: [PATCH] feat(AllowedTags): Add config allow_untagged? to tags --- README.md | 2 ++ lib/git_ops/config.ex | 3 +++ lib/mix/tasks/git_ops.release.ex | 20 ++++++++++---------- test/config_test.exs | 12 +++++++++++- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 44aae96..b35af4e 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,8 @@ config :git_ops, tags: [ # Only add commits to the changelog that has the "backend" tag allowed: ["backend"], + # Filter out or not commits that don't contain tags + allow_untagged?: true ] # Instructs the tool to manage your mix version in your `mix.exs` file # See below for more information diff --git a/lib/git_ops/config.ex b/lib/git_ops/config.ex index 6870c3d..a4bc663 100644 --- a/lib/git_ops/config.ex +++ b/lib/git_ops/config.ex @@ -91,6 +91,9 @@ defmodule GitOps.Config do def allowed_tags, do: :git_ops |> Application.get_env(:tags, []) |> Keyword.get(:allowed, :any) + def allow_untagged?, + do: :git_ops |> Application.get_env(:tags, []) |> Keyword.get(:allow_untagged?, true) + def prefix, do: Application.get_env(:git_ops, :version_tag_prefix) || "" defp truthy?(nil), do: false diff --git a/lib/mix/tasks/git_ops.release.ex b/lib/mix/tasks/git_ops.release.ex index 5ea6e7b..25ef1a0 100644 --- a/lib/mix/tasks/git_ops.release.ex +++ b/lib/mix/tasks/git_ops.release.ex @@ -91,6 +91,7 @@ defmodule Mix.Tasks.GitOps.Release do config_types = Config.types() allowed_tags = Config.allowed_tags() + allow_untagged? = Config.allow_untagged?() from_rc? = Version.parse!(current_version).pre != [] {commit_messages_for_version, commit_messages_for_changelog} = @@ -99,10 +100,10 @@ defmodule Mix.Tasks.GitOps.Release do log_for_version? = !opts[:initial] commits_for_version = - parse_commits(commit_messages_for_version, config_types, allowed_tags, log_for_version?) + parse_commits(commit_messages_for_version, config_types, allowed_tags, allow_untagged?, log_for_version?) commits_for_changelog = - parse_commits(commit_messages_for_changelog, config_types, allowed_tags, false) + parse_commits(commit_messages_for_changelog, config_types, allowed_tags, allow_untagged?, false) prefixed_new_version = if opts[:initial] do @@ -261,15 +262,15 @@ defmodule Mix.Tasks.GitOps.Release do end end - defp parse_commits(messages, config_types, allowed_tags, log?) do - Enum.flat_map(messages, &parse_commit(&1, config_types, allowed_tags, log?)) + defp parse_commits(messages, config_types, allowed_tags, allow_untagged?, log?) do + Enum.flat_map(messages, &parse_commit(&1, config_types, allowed_tags, allow_untagged?, log?)) end - defp parse_commit(text, config_types, allowed_tags, log?) do + defp parse_commit(text, config_types, allowed_tags, allow_untagged?, log?) do case Commit.parse(text) do {:ok, commits} -> commits - |> commits_with_allowed_tags(allowed_tags) + |> commits_with_allowed_tags(allowed_tags, allow_untagged?) |> commits_with_type(config_types, text, log?) _ -> @@ -279,13 +280,12 @@ defmodule Mix.Tasks.GitOps.Release do end end - defp commits_with_allowed_tags(commits, :any), do: commits + defp commits_with_allowed_tags(commits, :any, _), do: commits - defp commits_with_allowed_tags(commits, allowed_tags) do + defp commits_with_allowed_tags(commits, allowed_tags, allow_untagged?) do case Enum.find(commits, fn %{type: type} -> type == "TAGS" end) do nil -> - # If the commits don't have a tag, we allow it to go through by default - commits + if allow_untagged?, do: commits, else: [] commit -> tags = commit.message |> String.split(",", trim: true) |> Enum.map(&String.trim/1) diff --git a/test/config_test.exs b/test/config_test.exs index 7bcd903..e370524 100644 --- a/test/config_test.exs +++ b/test/config_test.exs @@ -10,7 +10,7 @@ defmodule GitOps.Test.ConfigTest do Application.put_env(:git_ops, :changelog_file, "CUSTOM_CHANGELOG.md") Application.put_env(:git_ops, :manage_readme_version, true) Application.put_env(:git_ops, :types, custom: [header: "Custom"], docs: [hidden?: false]) - Application.put_env(:git_ops, :tags, [allowed: ["tag_1", "tag_2"]]) + Application.put_env(:git_ops, :tags, [allowed: ["tag_1", "tag_2"], allow_untagged?: false]) Application.put_env(:git_ops, :version_tag_prefix, "v") end @@ -102,6 +102,16 @@ defmodule GitOps.Test.ConfigTest do assert Config.allowed_tags() == :any end + test "Allow untagged? configuration returns correcly" do + assert Config.allow_untagged?() == false + end + + test "Allow untagged? configuration returns true if not set" do + Application.delete_env(:git_ops, :tags) + + assert Config.allow_untagged?() == true + end + test "custom prefixes returns correctly" do assert Config.prefix() == "v" end