DEVX-6: fix: correct version tags, changelog, and release script recovery

This commit is contained in:
2026-06-22 20:21:44 +00:00
parent 0c3e8a7b8d
commit 33063038a1
7 changed files with 87 additions and 29 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
"""devx — reusable development and CI/CD tools for oblachno-oss projects."""
__version__ = "0.1.0"
__version__ = "0.4.0"
+22 -4
View File
@@ -271,16 +271,34 @@ def main(dry_run: bool, skip_tests: bool) -> None:
)
)
# Release lock: if HEAD is already a release commit, another release
# run is in progress (or already completed). Skip to prevent duplicate tags.
# Release lock: if HEAD is already a release commit, check if the tag
# exists. If the tag is missing (e.g., tag push failed in a previous run),
# create and push it instead of skipping — this recovers from the
# common failure mode where the commit was pushed but the tag was not.
head_msg = run_cmd(["git", "log", "-1", "--pretty=%s"]).stdout.strip()
if re.match(r"^release: v\d+\.\d+\.\d+", head_msg):
release_match = re.match(r"^release: v(\d+\.\d+\.\d+)", head_msg)
if release_match:
release_version = release_match.group(1)
release_tag = f"v{release_version}"
if tag_exists(release_tag):
click.echo(
_(
"HEAD is already a release commit ('{msg}') and tag {tag} exists. Skipping.",
msg=head_msg,
tag=release_tag,
)
)
return
# Tag is missing — recover by creating and pushing it
click.echo(
_(
"HEAD is already a release commit ('{msg}'). Another release may have just completed. Skipping.",
"HEAD is a release commit ('{msg}') but tag {tag} is missing. Recovering by creating tag.",
msg=head_msg,
tag=release_tag,
)
)
changelog = get_changelog(release_version)
create_and_push_tag(release_version, changelog, dry_run)
return
# Check if any user-facing files changed since the last tag.
+6
View File
@@ -651,5 +651,11 @@
},
"Unknown check category '{check}'. Available: all, user-facing{tags}": {
"en": "Unknown check category '{check}'. Available: all, user-facing{tags}"
},
"HEAD is a release commit ('{msg}') but tag {tag} is missing. Recovering by creating tag.": {
"en": "HEAD is a release commit ('{msg}') but tag {tag} is missing. Recovering by creating tag."
},
"HEAD is already a release commit ('{msg}') and tag {tag} exists. Skipping.": {
"en": "HEAD is already a release commit ('{msg}') and tag {tag} exists. Skipping."
}
}