From a4b76433ab6342153de462cb1d19cecffa6ae507 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Wed, 17 Dec 2025 17:32:16 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB(release)=20in?= =?UTF-8?q?troduce=20a=20release=20helper=20tool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Discussed at lunch with our CTO, enhance tooling around release preparation. Naive bash script generated using Claude. Please feel free to enhance it. --- bin/prepare-release.sh | 160 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100755 bin/prepare-release.sh diff --git a/bin/prepare-release.sh b/bin/prepare-release.sh new file mode 100755 index 00000000..2eb499c3 --- /dev/null +++ b/bin/prepare-release.sh @@ -0,0 +1,160 @@ +#!/bin/bash + +set -e # Exit on error + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Function to print colored output +print_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +print_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + + +# Function to update npm package version +update_npm_version() { + local component=$1 + print_info "Updating $component version..." + cd "src/$component" + npm version "$VERSION" --no-git-tag-version + cd - +} + +# Function to update Python project version in pyproject.toml +update_python_version() { + local component=$1 + print_info "Updating $component version..." + cd "src/$component" + + if [ ! -f "pyproject.toml" ]; then + print_error "pyproject.toml not found in src/$component!" + exit 1 + fi + + if grep -q '^version = "' pyproject.toml; then + sed -i.bak "s/^version = \".*\"/version = \"$VERSION\"/" pyproject.toml + rm pyproject.toml.bak + print_info "Updated pyproject.toml version to $VERSION" + else + print_error "Could not find version line in pyproject.toml" + exit 1 + fi + + cd - +} + +# Check if we're in a git repository +if ! git rev-parse --git-dir > /dev/null 2>&1; then + print_error "Not a git repository. Please run this script from the root of your project." + exit 1 +fi + +# Check if working directory is clean +if ! git diff-index --quiet HEAD --; then + print_error "Working directory is not clean. Please commit or stash your changes first." + exit 1 +fi + +# Ask user for release version number +echo "" +read -p "Enter release version number (e.g., 1.2.3): " VERSION + +# Validate version format (basic semver check) +if ! [[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + print_error "Invalid version format. Please use semantic versioning (e.g., 1.2.3)" + exit 1 +fi + +print_info "Release version: $VERSION" + +# Check if branch already exists +BRANCH_NAME="release/$VERSION" +if git show-ref --verify --quiet "refs/heads/$BRANCH_NAME"; then + print_error "Branch $BRANCH_NAME already exists!" + exit 1 +fi + +# Create and checkout new branch +print_info "Creating branch: $BRANCH_NAME" +git checkout -b "$BRANCH_NAME" + +# Update frontend +update_npm_version "frontend" + +# Update SDK +update_npm_version "sdk" + +# Update mail +update_npm_version "mail" + +# Update backend pyproject.toml +update_python_version "backend" + +# Update summary pyproject.toml +update_python_version "summary" + +# Update agents pyproject.toml +update_python_version "agents" + +# Update CHANGELOG +print_info "Updating CHANGELOG..." + +if [ ! -f "CHANGELOG.md" ]; then + print_error "CHANGELOG.md not found in project root!" + exit 1 +fi + +# Get current date in YYYY-MM-DD format +CURRENT_DATE=$(date +%Y-%m-%d) + +# Replace [Unreleased] with [version number] - YYYY-MM-DD +if grep -q '\[Unreleased\]' CHANGELOG.md; then + sed -i.bak "s/\[Unreleased\]/[$VERSION] - $CURRENT_DATE/" CHANGELOG.md + + # Add new [Unreleased] section after the header + # This adds it after the line containing "Semantic Versioning" + sed -i.bak "/Semantic Versioning/a\\ +\\ +## [Unreleased] +" CHANGELOG.md + + rm CHANGELOG.md.bak + print_info "Updated CHANGELOG.md" +else + print_warning "Could not find [Unreleased] section in CHANGELOG.md" +fi + + + +# Summary +echo "" +print_info "Release preparation complete!" +echo "" +echo "Summary:" +echo " - Branch created: $BRANCH_NAME" +echo " - Version updated to: $VERSION" +echo " - Files modified:" +echo " - src/frontend/package.json" +echo " - src/sdk/package.json" +echo " - src/mail/package.json" +echo " - src/backend/pyproject.toml" +echo " - src/summary/pyproject.toml" +echo " - src/agents/pyproject.toml" +echo " - CHANGELOG.md" +echo "" +print_warning "Next steps:" +echo " 1. Review the changes: git status" +echo " 2. Commit the changes: git add . && git commit -m 'Release $VERSION'" +echo " 3. Push the branch: git push origin $BRANCH_NAME" +echo "" \ No newline at end of file