Skip to content

Commit 7626bae

Browse files
olivermeyerclaude
andcommitted
refactor: simplify prepare-release to accept explicit version only
Remove patch/minor/major version arithmetic from prepare-release.yml. Callers must now pass an explicit x.y.z semver string; the workflow validates the format and fails fast on invalid input. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent c906848 commit 7626bae

5 files changed

Lines changed: 18 additions & 35 deletions

File tree

.github/CLAUDE.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,9 +1018,6 @@ Releases use a four-phase workflow triggered from the developer's machine via `g
10181018
**Phase 1 — Prepare the release branch** (triggers `prepare-release.yml`):
10191019

10201020
```bash
1021-
make prepare-release patch # 1.0.0 → 1.0.1
1022-
make prepare-release minor # 1.0.0 → 1.1.0
1023-
make prepare-release major # 1.0.0 → 2.0.0
10241021
make prepare-release 1.2.3 # explicit version
10251022
```
10261023

.github/workflows/prepare-release.yml

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ name: "Prepare Release"
33
on:
44
workflow_dispatch:
55
inputs:
6-
version_part:
7-
description: 'Version part to bump ("patch", "minor", "major") or an explicit "x.y.z" version'
6+
version:
7+
description: 'Version to release (e.g. "1.3.0")'
88
required: true
99
type: string
1010

@@ -41,28 +41,20 @@ jobs:
4141
enable-cache: true
4242
cache-dependency-glob: uv.lock
4343

44-
- name: Compute next version
44+
- name: Validate version
4545
id: version
4646
run: |
47-
CURRENT=$(cat VERSION)
48-
INPUT="${{ inputs.version_part }}"
49-
50-
if echo "$INPUT" | grep -qE '^\d+\.\d+\.\d+$'; then
51-
NEW_VERSION="$INPUT"
52-
else
53-
MAJOR=$(echo "$CURRENT" | cut -d. -f1)
54-
MINOR=$(echo "$CURRENT" | cut -d. -f2)
55-
PATCH=$(echo "$CURRENT" | cut -d. -f3)
56-
case "$INPUT" in
57-
major) NEW_VERSION="$((MAJOR + 1)).0.0" ;;
58-
minor) NEW_VERSION="${MAJOR}.$((MINOR + 1)).0" ;;
59-
patch) NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH + 1))" ;;
60-
*) echo "❌ Invalid version_part: '$INPUT'. Use patch, minor, major, or x.y.z."; exit 1 ;;
61-
esac
47+
INPUT="${{ inputs.version }}"
48+
49+
# Must be an explicit x.y.z semver
50+
if ! echo "$INPUT" | grep -qE '^\d+\.\d+\.\d+$'; then
51+
echo "❌ Invalid version: '$INPUT'. Must be an explicit semver like '1.3.0'."
52+
exit 1
6253
fi
6354
64-
BRANCH_NAME="release/v${NEW_VERSION}"
65-
echo "new_version=${NEW_VERSION}" >> "$GITHUB_OUTPUT"
55+
CURRENT=$(cat VERSION)
56+
BRANCH_NAME="release/v${INPUT}"
57+
echo "new_version=${INPUT}" >> "$GITHUB_OUTPUT"
6658
echo "branch_name=${BRANCH_NAME}" >> "$GITHUB_OUTPUT"
6759
echo "current_version=${CURRENT}" >> "$GITHUB_OUTPUT"
6860

CLAUDE.md

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,7 +1281,7 @@ Releases follow a **four-phase GitHub workflow–based strategy** that allows Ke
12811281

12821282
```
12831283
Phase 0 (anytime): Create the Ketryx release in the Ketryx portal
1284-
Phase 1: make prepare-release patch|minor|major|x.y.z
1284+
Phase 1: make prepare-release x.y.z
12851285
Phase 2: Point Ketryx release to release/vX.Y.Z; collect approvals
12861286
Phase 3: make publish-release
12871287
Phase 4: make merge-release
@@ -1292,9 +1292,6 @@ Phase 4: make merge-release
12921292
```bash
12931293
# Creates release/vX.Y.Z branch from main, bumps version files, and pushes.
12941294
# No tag is created yet.
1295-
make prepare-release patch # 1.0.0 → 1.0.1
1296-
make prepare-release minor # 1.0.0 → 1.1.0
1297-
make prepare-release major # 1.0.0 → 2.0.0
12981295
make prepare-release 1.2.3 # explicit version
12991296
```
13001297

CONTRIBUTING.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,6 @@ Releases follow a four-phase workflow that allows Ketryx compliance approvals to
129129
**Phase 1 — Create the release branch:**
130130

131131
```shell
132-
make prepare-release patch # 1.0.0 → 1.0.1
133-
make prepare-release minor # 1.0.0 → 1.1.0
134-
make prepare-release major # 1.0.0 → 2.0.0
135132
make prepare-release 1.2.3 # explicit version
136133
```
137134

Makefile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,14 @@ test_coverage_reset:
104104
rm -rf reports/coverage*
105105

106106
## Trigger the prepare-release GitHub workflow to create a release/vX.Y.Z branch
107-
## Usage: make prepare-release patch|minor|major|x.y.z
107+
## Usage: make prepare-release x.y.z
108108
prepare-release:
109-
$(eval VERSION_PART := $(filter-out $@,$(MAKECMDGOALS)))
110-
@if [ -z "$(VERSION_PART)" ]; then \
111-
echo "❌ Usage: make prepare-release patch|minor|major|x.y.z"; \
109+
$(eval VERSION := $(filter-out $@,$(MAKECMDGOALS)))
110+
@if [ -z "$(VERSION)" ]; then \
111+
echo "❌ Usage: make prepare-release x.y.z"; \
112112
exit 1; \
113113
fi
114-
gh workflow run prepare-release.yml --field version_part=$(VERSION_PART)
114+
gh workflow run prepare-release.yml --field version=$(VERSION)
115115
@echo "Workflow triggered. Monitor at: https://github.com/aignostics/python-sdk/actions"
116116

117117
## Trigger the publish-release GitHub workflow to generate changelog, tag, and push

0 commit comments

Comments
 (0)