Skip to content

Commit bda694f

Browse files
committed
Add release script for version management
1 parent 59c1ec7 commit bda694f

2 files changed

Lines changed: 134 additions & 1 deletion

File tree

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"lint:fix": "eslint \"**/*.js\" --ext js --fix",
1010
"prepublishOnly": "npm run build",
1111
"build": "microbundle",
12-
"dev": "microbundle watch"
12+
"dev": "microbundle watch",
13+
"release": "./release.sh"
1314
},
1415
"source": "src/index.js",
1516
"exports": {

release.sh

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#!/bin/bash
2+
3+
# Colors for better readability
4+
RED='\033[0;31m'
5+
GREEN='\033[0;32m'
6+
YELLOW='\033[1;33m'
7+
NC='\033[0m' # No Color
8+
9+
echo -e "${GREEN}🚀 ItemsJS Release Script${NC}"
10+
echo ""
11+
12+
# Check if on master branch
13+
CURRENT_BRANCH=$(git branch --show-current)
14+
if [ "$CURRENT_BRANCH" != "master" ]; then
15+
echo -e "${RED}❌ You must be on master branch!${NC}"
16+
echo " Current branch: $CURRENT_BRANCH"
17+
exit 1
18+
fi
19+
20+
# Check for uncommitted changes
21+
if ! git diff-index --quiet HEAD --; then
22+
echo -e "${RED}❌ You have uncommitted changes!${NC}"
23+
git status --short
24+
exit 1
25+
fi
26+
27+
# Check if synchronized with origin
28+
git fetch origin
29+
LOCAL=$(git rev-parse @)
30+
REMOTE=$(git rev-parse @{u})
31+
32+
if [ $LOCAL != $REMOTE ]; then
33+
echo -e "${RED}❌ Your branch is not synchronized with origin!${NC}"
34+
echo " Run: git pull origin master"
35+
exit 1
36+
fi
37+
38+
# Get current version
39+
CURRENT_VERSION=$(node -p "require('./package.json').version")
40+
echo -e "Current version: ${YELLOW}$CURRENT_VERSION${NC}"
41+
echo ""
42+
43+
# Ask for release type
44+
echo "Select release type:"
45+
echo " 1) patch (e.g. 2.1.25 -> 2.1.26) - bug fixes"
46+
echo " 2) minor (e.g. 2.1.25 -> 2.2.0) - new features"
47+
echo " 3) major (e.g. 2.1.25 -> 3.0.0) - breaking changes"
48+
echo " 4) custom - specify your own version"
49+
echo ""
50+
read -p "Choice (1-4): " RELEASE_TYPE
51+
52+
case $RELEASE_TYPE in
53+
1)
54+
VERSION_TYPE="patch"
55+
;;
56+
2)
57+
VERSION_TYPE="minor"
58+
;;
59+
3)
60+
VERSION_TYPE="major"
61+
;;
62+
4)
63+
read -p "Enter new version (e.g. 2.1.26): " NEW_VERSION
64+
VERSION_TYPE="custom"
65+
;;
66+
*)
67+
echo -e "${RED}❌ Invalid choice!${NC}"
68+
exit 1
69+
;;
70+
esac
71+
72+
# Calculate new version
73+
if [ "$VERSION_TYPE" != "custom" ]; then
74+
NEW_VERSION=$(npm version $VERSION_TYPE --no-git-tag-version | sed 's/v//')
75+
else
76+
npm version $NEW_VERSION --no-git-tag-version > /dev/null
77+
fi
78+
79+
echo ""
80+
echo -e "New version: ${GREEN}$NEW_VERSION${NC}"
81+
echo ""
82+
83+
# Show changes since last version
84+
echo -e "${YELLOW}Changes since last version:${NC}"
85+
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "HEAD~10")
86+
git log $LAST_TAG..HEAD --oneline --no-decorate
87+
echo ""
88+
89+
# Confirmation
90+
read -p "Do you want to continue? (y/N): " CONFIRM
91+
if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then
92+
echo -e "${RED}Cancelled.${NC}"
93+
git checkout package.json package-lock.json 2>/dev/null
94+
exit 1
95+
fi
96+
97+
echo ""
98+
echo -e "${GREEN}📋 Running tests...${NC}"
99+
if ! npm test; then
100+
echo -e "${RED}❌ Tests failed!${NC}"
101+
git checkout package.json package-lock.json 2>/dev/null
102+
exit 1
103+
fi
104+
105+
echo ""
106+
echo -e "${GREEN}🔨 Building project...${NC}"
107+
if ! npm run build; then
108+
echo -e "${RED}❌ Build failed!${NC}"
109+
git checkout package.json package-lock.json 2>/dev/null
110+
exit 1
111+
fi
112+
113+
echo ""
114+
echo -e "${GREEN}📝 Creating commit...${NC}"
115+
git add package.json package-lock.json
116+
git commit -m "bump to $NEW_VERSION version"
117+
118+
echo ""
119+
echo -e "${GREEN}🏷️ Creating tag...${NC}"
120+
git tag -a "v$NEW_VERSION" -m "Release v$NEW_VERSION"
121+
122+
echo ""
123+
echo -e "${GREEN}✅ Done!${NC}"
124+
echo ""
125+
echo "Next steps:"
126+
echo -e " 1) Verify changes: ${YELLOW}git show HEAD${NC}"
127+
echo -e " 2) Push to GitHub: ${YELLOW}git push origin master --tags${NC}"
128+
echo -e " 3) Publish to npm: ${YELLOW}npm publish${NC}"
129+
echo ""
130+
echo -e "${YELLOW}Or all at once:${NC}"
131+
echo -e " ${YELLOW}git push origin master --tags && npm publish${NC}"
132+
echo ""

0 commit comments

Comments
 (0)