-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbump-version.sh
More file actions
executable file
·131 lines (110 loc) · 4.6 KB
/
bump-version.sh
File metadata and controls
executable file
·131 lines (110 loc) · 4.6 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
#!/bin/bash
# Nine Semantic Version Bumper
# Usage: ./bump-version.sh [major|minor|patch] [--bump-db]
#
# App version and database schema version are independent.
# Pass --bump-db only when this release includes a schema change.
# Without --bump-db the DatabaseFileName in appsettings.json is left unchanged.
set -e
VERSION_TYPE="${1:-patch}"
BUMP_DB=false
for arg in "$@"; do
if [ "$arg" == "--bump-db" ]; then
BUMP_DB=true
fi
done
CSPROJ_FILE="4-Nine/Nine.csproj"
APPSETTINGS_FILE="4-Nine/appsettings.json"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}🔄 Nine Version Bumper${NC}"
echo ""
# Extract current version from .csproj
CURRENT_VERSION=$(grep -oP '<Version>\K[^<]+' "$CSPROJ_FILE" | head -1)
if [ -z "$CURRENT_VERSION" ]; then
echo -e "${RED}❌ Could not find version in $CSPROJ_FILE${NC}"
exit 1
fi
echo -e "Current Version: ${GREEN}$CURRENT_VERSION${NC}"
# Parse version components
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION"
# Increment based on type
case "$VERSION_TYPE" in
major)
MAJOR=$((MAJOR + 1))
MINOR=0
PATCH=0
echo -e "Bump Type: ${YELLOW}MAJOR${NC} (breaking changes)"
;;
minor)
MINOR=$((MINOR + 1))
PATCH=0
echo -e "Bump Type: ${YELLOW}MINOR${NC} (new features, backward compatible)"
;;
patch)
PATCH=$((PATCH + 1))
echo -e "Bump Type: ${YELLOW}PATCH${NC} (bug fixes, no DB changes)"
;;
*)
echo -e "${RED}❌ Invalid version type. Use: major, minor, or patch${NC}"
exit 1
;;
esac
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
echo -e "New Version: ${GREEN}$NEW_VERSION${NC}"
echo ""
# Determine database version (ignores PATCH for DB filename)
DB_VERSION="$MAJOR.$MINOR.0"
# Ask for confirmation
read -p "Continue with version bump? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${RED}❌ Aborted${NC}"
exit 1
fi
# Update .csproj file
echo -e "${YELLOW}📝 Updating $CSPROJ_FILE...${NC}"
sed -i "s|<Version>$CURRENT_VERSION</Version>|<Version>$NEW_VERSION</Version>|g" "$CSPROJ_FILE"
sed -i "s|<AssemblyVersion>$CURRENT_VERSION.0</AssemblyVersion>|<AssemblyVersion>$NEW_VERSION.0</AssemblyVersion>|g" "$CSPROJ_FILE"
sed -i "s|<FileVersion>$CURRENT_VERSION.0</FileVersion>|<FileVersion>$NEW_VERSION.0</FileVersion>|g" "$CSPROJ_FILE"
sed -i "s|<InformationalVersion>$CURRENT_VERSION</InformationalVersion>|<InformationalVersion>$NEW_VERSION</InformationalVersion>|g" "$CSPROJ_FILE"
# Update appsettings.json
echo -e "${YELLOW}📝 Updating $APPSETTINGS_FILE...${NC}"
sed -i "s|\"Version\": \"$CURRENT_VERSION\"|\"Version\": \"$NEW_VERSION\"|g" "$APPSETTINGS_FILE"
# Update database settings only when --bump-db is explicitly passed
if [ "$BUMP_DB" == "true" ]; then
echo -e "${YELLOW}📝 Updating database version to app_v${DB_VERSION}.db...${NC}"
# Get current database filename
CURRENT_DB=$(grep -oP '"DatabaseFileName": "\K[^"]+' "$APPSETTINGS_FILE")
NEW_DB="app_v${DB_VERSION}.db"
# Update DatabaseFileName and PreviousDatabaseFileName
sed -i "s|\"DatabaseFileName\": \"$CURRENT_DB\"|\"DatabaseFileName\": \"$NEW_DB\"|g" "$APPSETTINGS_FILE"
sed -i "s|\"PreviousDatabaseFileName\": \"[^\"]*\"|\"PreviousDatabaseFileName\": \"$CURRENT_DB\"|g" "$APPSETTINGS_FILE"
sed -i "s|\"SchemaVersion\": \"[^\"]*\"|\"SchemaVersion\": \"$DB_VERSION\"|g" "$APPSETTINGS_FILE"
# Update connection string
sed -i "s|DataSource=Infrastructure/Data/$CURRENT_DB|DataSource=Infrastructure/Data/$NEW_DB|g" "$APPSETTINGS_FILE"
echo -e "${YELLOW}⚠️ Database version changed!${NC}"
echo -e " - New DB file: ${GREEN}$NEW_DB${NC}"
echo -e " - Previous DB: ${GREEN}$CURRENT_DB${NC}"
echo -e " - ${RED}You may need to create a migration or copy the old database${NC}"
else
if [ "$VERSION_TYPE" == "patch" ]; then
echo -e "${GREEN}✓ Database version unchanged (PATCH update)${NC}"
else
echo -e "${GREEN}✓ Database version unchanged (no --bump-db flag)${NC}"
echo -e " DatabaseFileName stays: ${GREEN}$(grep -oP '"DatabaseFileName": "\K[^"]+' "$APPSETTINGS_FILE")${NC}"
fi
fi
echo ""
echo -e "${GREEN}✅ Version bump complete!${NC}"
echo -e " $CURRENT_VERSION → ${GREEN}$NEW_VERSION${NC}"
echo ""
echo -e "${YELLOW}Next steps:${NC}"
echo " 1. Review changes: git diff"
echo " 2. Build and test: dotnet build Nine.sln"
echo " 3. Commit: git add . && git commit -m 'chore: bump version to $NEW_VERSION'"
echo " 4. Tag: git tag v$NEW_VERSION"
echo " 5. Push: git push && git push --tags"