136 lines
3.4 KiB
Bash
Executable File
136 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script to release a new version of the application
|
|
# Usage: ./release <new_version>
|
|
|
|
set -e # Exit on any error
|
|
|
|
if [ $# -ne 1 ]; then
|
|
echo "Usage: $0 <new_version>"
|
|
echo "Example: $0 1.0.0"
|
|
exit 1
|
|
fi
|
|
|
|
NEW_VERSION="$1"
|
|
WORKSPACE_CARGO="Cargo.toml"
|
|
CRATE_CARGO="crates/coop/Cargo.toml"
|
|
|
|
# Check if both Cargo.toml files exist
|
|
if [ ! -f "$WORKSPACE_CARGO" ]; then
|
|
echo "Error: $WORKSPACE_CARGO not found in current directory"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$CRATE_CARGO" ]; then
|
|
echo "Error: $CRATE_CARGO not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Function to update version in a Cargo.toml file
|
|
update_version() {
|
|
local file="$1"
|
|
local backup="${file}.bak"
|
|
|
|
# Backup the original file
|
|
cp "$file" "$backup"
|
|
|
|
# Replace the version in Cargo.toml
|
|
if sed -i.bak -E "s/^version = \"[0-9]+\.[0-9]+\.[0-9]+\"/version = \"$NEW_VERSION\"/" "$file"; then
|
|
echo "✓ Updated version to $NEW_VERSION in $file"
|
|
# Remove backup created by sed
|
|
if [ -f "${file}.bak" ]; then
|
|
rm "${file}.bak"
|
|
fi
|
|
else
|
|
echo "Error: Failed to update version in $file"
|
|
# Restore original backup
|
|
mv "$backup" "$file"
|
|
exit 1
|
|
fi
|
|
|
|
# Remove the initial backup file
|
|
rm -f "$backup"
|
|
}
|
|
|
|
# Update both Cargo.toml files
|
|
echo "Updating versions..."
|
|
update_version "$WORKSPACE_CARGO"
|
|
update_version "$CRATE_CARGO"
|
|
|
|
# Check git status before committing
|
|
echo "Checking git status..."
|
|
if git status --porcelain | grep -q .; then
|
|
echo "Current uncommitted changes:"
|
|
git status --short
|
|
|
|
# Ask user if they want to commit all changes or just version files
|
|
echo ""
|
|
echo "Do you want to:"
|
|
echo "1) Commit all current changes (including the version updates)"
|
|
echo "2) Commit only the version file changes"
|
|
echo "3) Abort the release"
|
|
read -p "Enter choice (1/2/3): " choice
|
|
|
|
case $choice in
|
|
1)
|
|
echo "Committing all changes..."
|
|
git add .
|
|
;;
|
|
2)
|
|
echo "Committing only version file changes..."
|
|
git add "$WORKSPACE_CARGO" "$CRATE_CARGO"
|
|
;;
|
|
3)
|
|
echo "Release aborted by user"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Invalid choice. Release aborted."
|
|
exit 1
|
|
;;
|
|
esac
|
|
else
|
|
# Only version files were modified, add them specifically
|
|
echo "Only version files were modified, adding them for commit..."
|
|
git add "$WORKSPACE_CARGO" "$CRATE_CARGO"
|
|
fi
|
|
|
|
# Commit the changes
|
|
COMMIT_MSG="chore: release version $NEW_VERSION"
|
|
|
|
if git commit -m "$COMMIT_MSG"; then
|
|
echo "✓ Committed version changes"
|
|
else
|
|
echo "Error: Failed to commit version changes"
|
|
exit 1
|
|
fi
|
|
|
|
# Push version changes to origin
|
|
echo "Pushing version changes to origin..."
|
|
if git push origin master; then
|
|
echo "✓ Successfully pushed version changes to origin"
|
|
else
|
|
echo "Error: Failed to push version changes to origin"
|
|
exit 1
|
|
fi
|
|
|
|
# Create git tag
|
|
TAG_NAME="v$NEW_VERSION"
|
|
|
|
if git tag -a "$TAG_NAME" -m "$COMMIT_MSG"; then
|
|
echo "✓ Created git tag: $TAG_NAME"
|
|
else
|
|
echo "Error: Failed to create git tag"
|
|
exit 1
|
|
fi
|
|
|
|
# Push tag to origin
|
|
echo "Pushing tag to origin..."
|
|
if git push origin "$TAG_NAME"; then
|
|
echo "✓ Successfully pushed tag to origin"
|
|
echo "✓ Release $NEW_VERSION completed successfully!"
|
|
else
|
|
echo "Error: Failed to push tag to origin"
|
|
exit 1
|
|
fi
|