Discussed at lunch with our CTO, enhance tooling around release preparation. Naive bash script generated using Claude. Please feel free to enhance it.
160 lines
3.9 KiB
Bash
Executable File
160 lines
3.9 KiB
Bash
Executable File
#!/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 "" |