-
-
Notifications
You must be signed in to change notification settings - Fork 298
feat(tags): adds legacy_tag_formats
and ignored_tag_formats
settings
#1297
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(tags): adds legacy_tag_formats
and ignored_tag_formats
settings
#1297
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@ ## master #1297 +/- ## ========================================== + Coverage 97.33% 97.67% +0.33% ========================================== Files 42 56 +14 Lines 2104 2625 +521 ========================================== + Hits 2048 2564 +516 - Misses 56 61 +5
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
dc08a79
to
c1f2e4f
Compare
wow, this is a huge one. I'll be mostly out for the following month but will try to take a look after I'm back
Yes, I know, sorry. I had this idea long ago, just not had time to cover it all until now.
Actually, this is as of today the main remaining pain point I have. I had to migrate a lot of projects on different tagging conventions in a corporate environment and as of today it involves lots of manual steps as well as features lost.
So 🎉 there it is, this one fixes all my cases (and I'm sure I'm not the only one facing those).
In the meantime, enjoy your holidays !
Could you add a tutorial for this case? Otherwise it feels like we are adding a lot of features and it's unclear what a user can do with them.
I'll review it this week 👍🏻
I completed the monorepo tutorial and added a FAQ entry but yes, I can totally write a full tutorial on changing tag convention while keeping backward compatibility 👍🏽
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @noirbizarre , thanks for making such an awesome PR! I left a few questions. I think we might need a few rounds of change and discussions before merging. But again, this is great!
844c5e2
to
fa48ec9
Compare
I like this a lot 💪🏻 super cool work! if possible please add some tests for test_tag
mainly to understand how its api should be used. I think most of the coverage probably comes from the other tests, but still it would be nice, at a quick glance on a test to see how it works.
I'll add some examples. I already pushed a few changes/fixes.
It started with a use case I have on lot of projects at work (tag convention that changed) and while working on this, I realized the tag management logic spread on multiple modules, that many things depends on it but on different phases, used in and that it was difficult to change, so I introduced the TagRules
object. It should make easier to work on this kind of topic later.
Anyway, I have some time today, I'll advance the documentation and rework and hope to be able to provide a new iteration
fa48ec9
to
7f7f8bd
Compare
c9d956e
to
070bfdf
Compare
070bfdf
to
37c45cd
Compare
There it is, PR updated with:
- a tutorial
- more docstrings and examples
- all comments applied
I noticed a few possible edge-cases (not introduced in this PR) I might handle after this PR.
Example: it is possible to have tag_format = ${major}
and then, tree processing is broken, incremental changelog is broken, version ranging is broken...
It is logical, but I think it is worth documenting it, and I think that's why there were 2 different logics (that I kept as it is in this PR to avoid regressions) for version parsing:
- 1 assuming that it's possible to have only
${major}
or${major}.${minor}
as tag format - 1 assuming version sorting, changelog rendering always requires the full version
One solution may be to only allow ${version}
in tag format and support some extra tag format (which would in addition allow bumping v3.2.1
, v3.2
ad v3
at the same time, which have some use cases like GitHub actions versioning). But that's another story
I'll wait for your feedback 👍🏼
My comment is non-blocking. Feel free to merge it or make changes if you deem necessary. Awesome PR. Thanks a lot!
74554c2
into
commitizen-tools:master
Thanks ! 🙏🏼
PR merged, I'll be reactive if any breakage is introduced (but it shouldn't given how it has been tested)
this PR causes cz bump
to break when one tag is invalid, see #1375
Starting in 4.4.0 due to commitizen-tools#1297 when an invalid tag is present an exception is thrown This commit ignores the invalid tags Follow up from commitizen-tools#1375
Starting in 4.4.0 due to commitizen-tools#1297 when an invalid tag is present an exception is thrown This commit ignores the invalid tags Follow up from commitizen-tools#1375
Description
This PR add 2 new settings to handle tag formats;
legacy_tag_formats
allowing tag format to change over time while retaining the ability to work with legacy versionignored_tag_formats
to specify expected tag that should not raiseInvalidVersion
.So projects which change tag formats and have expected but non-version tags can have these settings:
By doing so, I had to start grouping tag handling and introduce a
tags.TagRules
object which is responsible for handling all tags rules, initially spread overtag_format
,version_scheme
s andversion_provider
sChecklist
./scripts/format
and./scripts/test
locally to ensure this change passes linter check and testExpected behavior
Steps to Test This Pull Request
version_provider = "scm"
(not mandatory but allows testing the full scope)tag_format
tag_format
inlegacy_tag_format
and define a newtag_format
tag_format
then:
random-*
toignored_tag_formats
random-tag
Additional context
There might be a 2nd PR handling a
changelog_version_format
setting to customize the version rendering in the changelog so:tag_format
changes