Skip to content

Commit ed770e3

Browse files
committed
feat: add changelog and release script with version validation
- CHANGELOG.md following keepachangelog format with all versions documented - scripts/release.sh validates: - Version exists in CHANGELOG.md with a date - Comparison link exists at bottom of CHANGELOG.md - Working tree is clean - Tag doesn't already exist - Syncs version across package.json and tauri.conf.json - Creates annotated git tag - Prompts before pushing - Supports --dry-run for preview - Sync both package.json and tauri.conf.json to 0.3.0
1 parent 98146f2 commit ed770e3

4 files changed

Lines changed: 235 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [Unreleased]
9+
10+
## [0.3.0] - 2026-04-09
11+
12+
### Added
13+
- Custom SQL injection-themed app icon for all platforms
14+
- Auto-update plugin with GitHub Releases endpoint
15+
- Light/dark theme toggle with persistence
16+
- Interactive stdin input for responding to sqlmap prompts
17+
- Findings panel that parses vulnerabilities from output
18+
- SQLite persistence for scan history and profiles
19+
- Multi-platform CI pipeline (macOS, Linux, Windows)
20+
- Keyboard shortcuts (Cmd+R run, Cmd+. stop, Cmd+T/W tabs, Cmd+F search)
21+
- Drag & drop support (.txt for batch URLs, .req for import)
22+
- Burp Suite XML import and findings export
23+
- PyInstaller build scripts inside the repo (scripts/)
24+
25+
## [0.2.0] - 2026-04-08
26+
27+
### Added
28+
- Smart syntax coloring (CRITICAL, WARNING, INFO, injectable, Parameter)
29+
- Search in output with Cmd+F and live highlighting
30+
- Resizable config panel (280px-600px)
31+
- System notifications when scan completes
32+
- Scan history persisted in localStorage (max 50)
33+
- Profiles/Templates (save, load, delete named configurations)
34+
- Import raw HTTP requests from Burp Suite or DevTools
35+
- Export HTML reports with color-coded output
36+
- Batch scan (paste multiple URLs, one tab per target)
37+
- Requests view tab for captured HTTP traffic
38+
- HTTP method selector (GET, POST, PUT, DELETE, PATCH)
39+
- Custom headers field
40+
- SVG icons in header toolbar
41+
42+
## [0.1.0] - 2026-04-08
43+
44+
### Added
45+
- Initial release
46+
- Tauri v2 desktop app with React frontend
47+
- Full sqlmap configuration UI (URL, POST data, cookies, level, risk, threads, DBMS, techniques, tamper scripts)
48+
- Real-time terminal output
49+
- Multi-tab support with independent scans
50+
- Command preview tab
51+
- Self-contained sidecar binary (sqlmap + Python bundled via PyInstaller)
52+
- macOS .app and .dmg builds
53+
- Initializing indicator while sidecar loads
54+
55+
[Unreleased]: https://github.com/javierpr0/sqlmap-ui/compare/v0.3.0...HEAD
56+
[0.3.0]: https://github.com/javierpr0/sqlmap-ui/compare/v0.2.0...v0.3.0
57+
[0.2.0]: https://github.com/javierpr0/sqlmap-ui/compare/v0.1.0...v0.2.0
58+
[0.1.0]: https://github.com/javierpr0/sqlmap-ui/releases/tag/v0.1.0

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sqlmap-ui",
3-
"version": "1.0.0",
3+
"version": "0.3.0",
44
"description": "",
55
"main": "index.js",
66
"scripts": {

scripts/release.sh

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
#!/bin/bash
2+
# Release script for SQLMap UI.
3+
# Validates changelog, syncs version across files, creates tag, and pushes.
4+
#
5+
# Usage:
6+
# ./scripts/release.sh 0.3.0
7+
# ./scripts/release.sh 0.3.0 --dry-run # Preview without changes
8+
#
9+
# Prerequisites:
10+
# - Clean working tree (no uncommitted changes)
11+
# - Version documented in CHANGELOG.md under ## [x.x.x] - YYYY-MM-DD
12+
# - Comparison link at bottom of CHANGELOG.md
13+
14+
set -e
15+
16+
RED='\033[0;31m'
17+
GREEN='\033[0;32m'
18+
YELLOW='\033[1;33m'
19+
NC='\033[0m'
20+
21+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
22+
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
23+
CHANGELOG="$PROJECT_DIR/CHANGELOG.md"
24+
PACKAGE_JSON="$PROJECT_DIR/package.json"
25+
TAURI_CONF="$PROJECT_DIR/src-tauri/tauri.conf.json"
26+
27+
VERSION="$1"
28+
DRY_RUN=false
29+
30+
if [ "$2" = "--dry-run" ]; then
31+
DRY_RUN=true
32+
fi
33+
34+
# ── Validate input ──
35+
36+
if [ -z "$VERSION" ]; then
37+
echo -e "${RED}Error: version required${NC}"
38+
echo ""
39+
echo "Usage: ./scripts/release.sh <version> [--dry-run]"
40+
echo "Example: ./scripts/release.sh 0.4.0"
41+
echo ""
42+
echo "Before running, document the release in CHANGELOG.md:"
43+
echo " ## [$VERSION] - $(date +%Y-%m-%d)"
44+
exit 1
45+
fi
46+
47+
# Strip leading 'v' if provided
48+
VERSION="${VERSION#v}"
49+
50+
echo ""
51+
echo "=== SQLMap UI Release v$VERSION ==="
52+
echo ""
53+
54+
# ── Check clean working tree ──
55+
56+
if [ -n "$(git -C "$PROJECT_DIR" status --porcelain)" ]; then
57+
echo -e "${RED}Error: working tree is not clean${NC}"
58+
echo "Commit or stash your changes before releasing."
59+
git -C "$PROJECT_DIR" status --short
60+
exit 1
61+
fi
62+
63+
# ── Validate CHANGELOG.md exists ──
64+
65+
if [ ! -f "$CHANGELOG" ]; then
66+
echo -e "${RED}Error: CHANGELOG.md not found${NC}"
67+
exit 1
68+
fi
69+
70+
# ── Validate version is documented in CHANGELOG.md ──
71+
72+
CHANGELOG_ENTRY=$(grep -E "^## \[$VERSION\]" "$CHANGELOG" || true)
73+
74+
if [ -z "$CHANGELOG_ENTRY" ]; then
75+
echo -e "${RED}Error: version $VERSION not found in CHANGELOG.md${NC}"
76+
echo ""
77+
echo "Add an entry before releasing:"
78+
echo ""
79+
echo " ## [$VERSION] - $(date +%Y-%m-%d)"
80+
echo ""
81+
echo " ### Added"
82+
echo " - ..."
83+
echo ""
84+
exit 1
85+
fi
86+
87+
# Validate it has a date
88+
if ! echo "$CHANGELOG_ENTRY" | grep -qE "\d{4}-\d{2}-\d{2}"; then
89+
echo -e "${RED}Error: version $VERSION in CHANGELOG.md has no date${NC}"
90+
echo "Expected format: ## [$VERSION] - YYYY-MM-DD"
91+
exit 1
92+
fi
93+
94+
# Validate comparison link exists
95+
if ! grep -q "\[$VERSION\]:" "$CHANGELOG"; then
96+
echo -e "${YELLOW}Warning: no comparison link for [$VERSION] at bottom of CHANGELOG.md${NC}"
97+
echo "Add: [$VERSION]: https://github.com/javierpr0/sqlmap-ui/compare/vPREV...v$VERSION"
98+
fi
99+
100+
echo -e "${GREEN}CHANGELOG.md:${NC} $CHANGELOG_ENTRY"
101+
102+
# ── Validate tag doesn't already exist ──
103+
104+
if git -C "$PROJECT_DIR" tag -l "v$VERSION" | grep -q "v$VERSION"; then
105+
echo -e "${RED}Error: tag v$VERSION already exists${NC}"
106+
exit 1
107+
fi
108+
109+
# ── Show what will change ──
110+
111+
CURRENT_PKG=$(grep '"version"' "$PACKAGE_JSON" | head -1 | sed 's/.*"version": "\(.*\)".*/\1/')
112+
CURRENT_TAURI=$(grep '"version"' "$TAURI_CONF" | head -1 | sed 's/.*"version": "\(.*\)".*/\1/')
113+
114+
echo ""
115+
echo "Version updates:"
116+
echo " package.json: $CURRENT_PKG -> $VERSION"
117+
echo " tauri.conf.json: $CURRENT_TAURI -> $VERSION"
118+
echo " git tag: v$VERSION"
119+
echo ""
120+
121+
if [ "$DRY_RUN" = true ]; then
122+
echo -e "${YELLOW}Dry run complete. No changes made.${NC}"
123+
exit 0
124+
fi
125+
126+
# ── Confirm ──
127+
128+
read -p "Proceed with release v$VERSION? (y/N) " -n 1 -r
129+
echo ""
130+
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
131+
echo "Aborted."
132+
exit 0
133+
fi
134+
135+
# ── Update versions ──
136+
137+
# package.json
138+
sed -i.bak "s/\"version\": \"$CURRENT_PKG\"/\"version\": \"$VERSION\"/" "$PACKAGE_JSON"
139+
rm -f "$PACKAGE_JSON.bak"
140+
141+
# tauri.conf.json
142+
sed -i.bak "s/\"version\": \"$CURRENT_TAURI\"/\"version\": \"$VERSION\"/" "$TAURI_CONF"
143+
rm -f "$TAURI_CONF.bak"
144+
145+
echo -e "${GREEN}Updated versions in package.json and tauri.conf.json${NC}"
146+
147+
# ── Commit version bump ──
148+
149+
cd "$PROJECT_DIR"
150+
git add package.json src-tauri/tauri.conf.json
151+
git commit -m "chore: bump version to $VERSION"
152+
153+
echo -e "${GREEN}Committed version bump${NC}"
154+
155+
# ── Create tag ──
156+
157+
git tag -a "v$VERSION" -m "Release v$VERSION"
158+
echo -e "${GREEN}Created tag v$VERSION${NC}"
159+
160+
# ── Push ──
161+
162+
echo ""
163+
read -p "Push to origin? (y/N) " -n 1 -r
164+
echo ""
165+
if [[ $REPLY =~ ^[Yy]$ ]]; then
166+
git push origin master --tags
167+
echo -e "${GREEN}Pushed to origin. GitHub Actions will build and create the release.${NC}"
168+
else
169+
echo ""
170+
echo "To push manually:"
171+
echo " git push origin master --tags"
172+
fi
173+
174+
echo ""
175+
echo -e "${GREEN}=== Release v$VERSION complete ===${NC}"

src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
33
"productName": "SQLMap UI",
4-
"version": "0.1.0",
4+
"version": "0.3.0",
55
"identifier": "com.sqlmapui.desktop",
66
"build": {
77
"frontendDist": "../dist",

0 commit comments

Comments
 (0)