-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathversion.sh
More file actions
executable file
·180 lines (147 loc) · 5.24 KB
/
version.sh
File metadata and controls
executable file
·180 lines (147 loc) · 5.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#!/bin/bash
# PGShift Version Bump Script
# Usage: ./version.sh [major|minor|patch] "Commit message"
# Example: ./version.sh minor "Add new feature X"
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PGSHIFT_DIR="$SCRIPT_DIR/pgshift"
CARGO_TOML="$PGSHIFT_DIR/src-tauri/Cargo.toml"
TAURI_CONF="$PGSHIFT_DIR/src-tauri/tauri.conf.json"
PACKAGE_JSON="$PGSHIFT_DIR/package.json"
CHANGELOG="$SCRIPT_DIR/CHANGELOG.md"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
print_usage() {
echo -e "${BLUE}PGShift Version Bump Script${NC}"
echo ""
echo "Usage: $0 [major|minor|patch] \"Commit message\""
echo ""
echo "Options:"
echo " major - Breaking changes (1.0.0 -> 2.0.0)"
echo " minor - New features (1.0.0 -> 1.1.0)"
echo " patch - Bug fixes (1.0.0 -> 1.0.1)"
echo ""
echo "Example:"
echo " $0 minor \"Add multi-connection support\""
echo " $0 patch \"Fix ENUM quoting issue\""
echo " $0 major \"Complete rewrite with new architecture\""
}
if [ $# -lt 1 ]; then
print_usage
exit 1
fi
BUMP_TYPE=$1
COMMIT_MSG=${2:-"Version bump"}
# Get current version from Cargo.toml
CURRENT_VERSION=$(grep '^version = ' "$CARGO_TOML" | head -1 | sed 's/version = "\(.*\)"/\1/')
if [ -z "$CURRENT_VERSION" ]; then
echo -e "${RED}Error: Could not read current version from Cargo.toml${NC}"
exit 1
fi
echo -e "${BLUE}Current version: ${YELLOW}$CURRENT_VERSION${NC}"
# Parse version components
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION"
# Calculate new version
case $BUMP_TYPE in
major)
MAJOR=$((MAJOR + 1))
MINOR=0
PATCH=0
;;
minor)
MINOR=$((MINOR + 1))
PATCH=0
;;
patch)
PATCH=$((PATCH + 1))
;;
*)
echo -e "${RED}Error: Invalid bump type '$BUMP_TYPE'. Use major, minor, or patch.${NC}"
print_usage
exit 1
;;
esac
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
echo -e "${GREEN}New version: ${YELLOW}$NEW_VERSION${NC}"
# Update Cargo.toml
echo -e "${BLUE}Updating Cargo.toml...${NC}"
sed -i '' "s/^version = \"$CURRENT_VERSION\"/version = \"$NEW_VERSION\"/" "$CARGO_TOML"
# Update tauri.conf.json
echo -e "${BLUE}Updating tauri.conf.json...${NC}"
sed -i '' "s/\"version\": \"$CURRENT_VERSION\"/\"version\": \"$NEW_VERSION\"/" "$TAURI_CONF"
# Update package.json
echo -e "${BLUE}Updating package.json...${NC}"
sed -i '' "s/\"version\": \"$CURRENT_VERSION\"/\"version\": \"$NEW_VERSION\"/" "$PACKAGE_JSON"
# Update CHANGELOG.md - add new version section
echo -e "${BLUE}Updating CHANGELOG.md...${NC}"
DATE=$(date +%Y-%m-%d)
# Create new changelog entry
NEW_ENTRY="## [$NEW_VERSION] - $DATE
### Changed
- $COMMIT_MSG
"
# Insert after the header (after first ## line pattern)
sed -i '' "/^## \[/i\\
$NEW_ENTRY
" "$CHANGELOG" 2>/dev/null || {
# If sed fails, use awk
awk -v entry="$NEW_ENTRY" '
/^## \[/ && !inserted {
print entry
inserted=1
}
{print}
' "$CHANGELOG" > "$CHANGELOG.tmp" && mv "$CHANGELOG.tmp" "$CHANGELOG"
}
echo -e "${GREEN}✓ Version bumped from $CURRENT_VERSION to $NEW_VERSION${NC}"
# Ask to build and commit
echo ""
read -p "Build release bundles? (y/n) " -n 1 -r BUILD_CHOICE
echo ""
if [[ $BUILD_CHOICE =~ ^[Yy]$ ]]; then
echo -e "${BLUE}Building release bundles...${NC}"
cd "$PGSHIFT_DIR"
# Build DMG
echo -e "${YELLOW}Building macOS DMG...${NC}"
npm run tauri build -- --bundles dmg
# Copy DMG to root
DMG_FILE="$PGSHIFT_DIR/src-tauri/target/release/bundle/dmg/PGShift_${NEW_VERSION}_x64.dmg"
if [ -f "$DMG_FILE" ]; then
cp "$DMG_FILE" "$SCRIPT_DIR/"
echo -e "${GREEN}✓ DMG copied to $SCRIPT_DIR/PGShift_${NEW_VERSION}_x64.dmg${NC}"
fi
cd "$SCRIPT_DIR"
fi
echo ""
read -p "Commit and tag this version? (y/n) " -n 1 -r COMMIT_CHOICE
echo ""
if [[ $COMMIT_CHOICE =~ ^[Yy]$ ]]; then
echo -e "${BLUE}Committing changes...${NC}"
git add -A
git commit -m "v$NEW_VERSION: $COMMIT_MSG"
git tag -a "v$NEW_VERSION" -m "Version $NEW_VERSION: $COMMIT_MSG"
echo -e "${GREEN}✓ Changes committed and tagged as v$NEW_VERSION${NC}"
read -p "Push to remote? (y/n) " -n 1 -r PUSH_CHOICE
echo ""
if [[ $PUSH_CHOICE =~ ^[Yy]$ ]]; then
git push origin main --tags
echo -e "${GREEN}✓ Pushed to remote with tags${NC}"
echo -e "${YELLOW}🚀 GitHub Actions will now build Windows EXE and macOS DMG automatically!${NC}"
echo -e "${BLUE} Check: https://github.com/ervsoft/pgshift/actions${NC}"
fi
fi
echo ""
echo -e "${GREEN}═══════════════════════════════════════════${NC}"
echo -e "${GREEN} Version $NEW_VERSION release complete!${NC}"
echo -e "${GREEN}═══════════════════════════════════════════${NC}"
echo ""
echo "Next steps:"
echo " 1. GitHub Actions will build macOS DMG and Windows EXE"
echo " 2. Go to GitHub Releases to download the builds"
echo " 3. Update download links in README.md if needed"
echo ""
echo " Release URL: https://github.com/ervsoft/pgshift/releases/tag/v$NEW_VERSION"