Files
echoes-of-the-ash/scripts/release.sh

119 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# Echoes of the Ash - Release Script
# Generates package-lock.json, commits changes, and creates a new release tag
set -e # Exit on error
# Colors for output
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} Echoes of the Ash - Release Script${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
# Get the project root directory
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$PROJECT_ROOT"
# Step 1: Generate package-lock.json using Docker
echo -e "${YELLOW}[1/5]${NC} Generating package-lock.json with Docker..."
docker run --rm -v "$PROJECT_ROOT/pwa:/app" -w /app node:20-alpine npm install
# Optional: Remove node_modules to keep local directory clean
echo -e "${YELLOW}[2/5]${NC} Cleaning up node_modules..."
#rm -rf "$PROJECT_ROOT/pwa/node_modules"
echo -e "${GREEN}${NC} package-lock.json generated successfully"
echo ""
# Step 2: Get current version from git tags
echo -e "${YELLOW}[3/5]${NC} Determining version..."
CURRENT_VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
echo -e "Current version: ${GREEN}$CURRENT_VERSION${NC}"
# Parse version and suggest next version
if [[ $CURRENT_VERSION =~ v([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then
MAJOR="${BASH_REMATCH[1]}"
MINOR="${BASH_REMATCH[2]}"
PATCH="${BASH_REMATCH[3]}"
NEXT_PATCH=$((PATCH + 1))
SUGGESTED_VERSION="v${MAJOR}.${MINOR}.${NEXT_PATCH}"
else
SUGGESTED_VERSION="v0.1.0"
fi
echo -e "Suggested next version: ${BLUE}$SUGGESTED_VERSION${NC}"
echo ""
read -p "Enter version (or press Enter for $SUGGESTED_VERSION): " NEW_VERSION
# Use suggested version if user didn't provide one
if [ -z "$NEW_VERSION" ]; then
NEW_VERSION="$SUGGESTED_VERSION"
fi
# Ensure version starts with 'v'
if [[ ! $NEW_VERSION =~ ^v ]]; then
NEW_VERSION="v$NEW_VERSION"
fi
echo -e "Using version: ${GREEN}$NEW_VERSION${NC}"
echo ""
# Step 3: Git add and commit
echo -e "${YELLOW}[4/5]${NC} Committing changes..."
git add -A
# Check if there are changes to commit
if git diff --cached --quiet; then
echo -e "${YELLOW}No changes to commit${NC}"
else
git commit -m "Release $NEW_VERSION: Update package-lock.json and CI config"
echo -e "${GREEN}${NC} Changes committed"
fi
# Push to main
echo -e "${YELLOW}Pushing to main branch...${NC}"
git push origin main
echo -e "${GREEN}${NC} Pushed to main"
echo ""
# Step 4: Create and push tag
echo -e "${YELLOW}[5/5]${NC} Creating release tag..."
# Delete tag if it already exists (locally and remotely)
if git tag -l | grep -q "^$NEW_VERSION$"; then
echo -e "${YELLOW}Tag $NEW_VERSION already exists, deleting...${NC}"
git tag -d "$NEW_VERSION"
git push origin ":refs/tags/$NEW_VERSION" 2>/dev/null || true
fi
# Create new tag
git tag "$NEW_VERSION"
echo -e "${GREEN}${NC} Tag $NEW_VERSION created"
# Push tag
git push origin "$NEW_VERSION"
echo -e "${GREEN}${NC} Tag pushed to remote"
echo ""
# Step 5: Summary
echo -e "${BLUE}========================================${NC}"
echo -e "${GREEN}✓ Release $NEW_VERSION completed!${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
echo -e "Pipeline URL:"
echo -e "${BLUE}http://gitlab.kingstudio.es/patacuack/echoes-of-the-ash/-/pipelines${NC}"
echo ""
echo -e "The CI/CD pipeline will now build:"
echo -e " • Linux AppImage and .deb (compressed)"
echo -e " • Windows .exe installer (compressed)"
echo ""
echo -e "Build time: ~10-20 minutes"
echo ""