1
+ #! /bin/bash
2
+
3
+ # Simple release script for Milo
4
+ # Usage: ./scripts/release.sh v0.1.9
5
+
6
+ set -e
7
+
8
+ # Colors for output
9
+ RED=' \033[0;31m'
10
+ GREEN=' \033[0;32m'
11
+ BLUE=' \033[0;34m'
12
+ YELLOW=' \033[1;33m'
13
+ NC=' \033[0m' # No Color
14
+
15
+ # Configuration
16
+ REPO_OWNER=" antoncoding"
17
+ REPO_NAME=" milo"
18
+
19
+ if [ $# -eq 0 ]; then
20
+ echo -e " ${RED} ❌ Error: Please provide a version${NC} "
21
+ echo " Usage: ./scripts/release.sh v0.1.9"
22
+ exit 1
23
+ fi
24
+
25
+ VERSION=$1
26
+ VERSION_CLEAN=${VERSION# v} # Remove 'v' prefix
27
+
28
+ echo -e " ${BLUE} 🚀 Starting release process for ${VERSION}${NC} "
29
+
30
+ # Step 1: Update version in files
31
+ echo -e " ${YELLOW} 📝 Updating version files...${NC} "
32
+
33
+ # Update Cargo.toml
34
+ sed -i ' ' " s/version = \" .*\" /version = \" ${VERSION_CLEAN} \" /" src-tauri/Cargo.toml
35
+
36
+ # Update package.json
37
+ if command -v jq & > /dev/null; then
38
+ tmp=$( mktemp)
39
+ jq " .version = \" ${VERSION_CLEAN} \" " package.json > " $tmp " && mv " $tmp " package.json
40
+ else
41
+ # Fallback method without jq
42
+ sed -i ' ' " s/\" version\" : \" .*\" /\" version\" : \" ${VERSION_CLEAN} \" /" package.json
43
+ fi
44
+
45
+ echo -e " ${GREEN} ✅ Version files updated${NC} "
46
+
47
+ # Step 2: Build the app
48
+ echo -e " ${YELLOW} 🔨 Building Tauri app...${NC} "
49
+
50
+ export TAURI_SIGNING_PRIVATE_KEY_PATH=" $HOME /.tauri/milo.key"
51
+ export TAURI_SIGNING_PRIVATE_KEY_PASSWORD=" test123"
52
+
53
+ if pnpm tauri build; then
54
+ echo -e " ${GREEN} ✅ Build completed${NC} "
55
+ else
56
+ echo -e " ${RED} ❌ Build failed${NC} "
57
+ exit 1
58
+ fi
59
+
60
+ # Step 3: Generate latest.json
61
+ echo -e " ${YELLOW} 📄 Generating latest.json...${NC} "
62
+
63
+ cat > latest.json << EOF
64
+ {
65
+ "version": "${VERSION} ",
66
+ "notes": "Milo ${VERSION} - Bug fixes and improvements",
67
+ "pub_date": "$( date -u +" %Y-%m-%dT%H:%M:%SZ" ) ",
68
+ "platforms": {
69
+ "darwin-aarch64": {
70
+ "signature": "SIGNATURE_FROM_BUILD_PROCESS_AARCH64",
71
+ "url": "https://github.com/${REPO_OWNER} /${REPO_NAME} /releases/download/${VERSION} /Milo_aarch64.app.tar.gz"
72
+ },
73
+ "darwin-x86_64": {
74
+ "signature": "SIGNATURE_FROM_BUILD_PROCESS_X64",
75
+ "url": "https://github.com/${REPO_OWNER} /${REPO_NAME} /releases/download/${VERSION} /Milo_x64.app.tar.gz"
76
+ }
77
+ }
78
+ }
79
+ EOF
80
+
81
+ # Try to extract actual signatures
82
+ BUNDLE_DIR=" src-tauri/target/release/bundle"
83
+ if [ -d " $BUNDLE_DIR " ]; then
84
+ echo -e " ${YELLOW} 🔍 Looking for signature files...${NC} "
85
+
86
+ # Find .sig files and extract signatures
87
+ find " $BUNDLE_DIR " -name " *.sig" | while read -r sig_file; do
88
+ signature=$( cat " $sig_file " )
89
+ filename=$( basename " $sig_file " .sig)
90
+
91
+ echo -e " ${BLUE} 📝 Found signature for: $filename ${NC} "
92
+
93
+ # Update latest.json with actual signature
94
+ # This is a simple approach - you might want to use jq for more robust JSON editing
95
+ if [[ " $filename " == * " aarch64" * ]] || [[ " $filename " == * " arm64" * ]]; then
96
+ sed -i ' ' " s/SIGNATURE_FROM_BUILD_PROCESS_AARCH64/$signature /" latest.json
97
+ elif [[ " $filename " == * " x64" * ]] || [[ " $filename " == * " x86_64" * ]]; then
98
+ sed -i ' ' " s/SIGNATURE_FROM_BUILD_PROCESS_X64/$signature /" latest.json
99
+ fi
100
+ done
101
+ fi
102
+
103
+ echo -e " ${GREEN} ✅ latest.json generated${NC} "
104
+
105
+ # Step 4: Show the result
106
+ echo -e " ${BLUE} 📋 Generated latest.json:${NC} "
107
+ cat latest.json
108
+
109
+ # Step 5: Commit and tag
110
+ echo " "
111
+ read -p " $( echo -e ${YELLOW} ❓ Commit changes and create tag? [y/N]: ${NC} ) " -n 1 -r
112
+ echo " "
113
+
114
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
115
+ echo -e " ${YELLOW} 📦 Committing and tagging...${NC} "
116
+
117
+ git add .
118
+ git commit -m " chore: release ${VERSION} "
119
+ git tag " $VERSION "
120
+
121
+ echo -e " ${GREEN} ✅ Changes committed and tagged${NC} "
122
+ echo -e " ${BLUE} 🚀 To publish: git push origin main && git push origin ${VERSION}${NC} "
123
+ else
124
+ echo -e " ${YELLOW} ⏭️ Skipping git operations${NC} "
125
+ fi
126
+
127
+ echo " "
128
+ echo -e " ${GREEN} 🎉 Release preparation complete!${NC} "
129
+ echo -e " ${BLUE} Next steps:${NC} "
130
+ echo " 1. Review the generated latest.json"
131
+ echo " 2. Push to GitHub: git push origin main && git push origin ${VERSION} "
132
+ echo " 3. Create GitHub release with the built artifacts"
133
+ echo " 4. The app will automatically detect the update!"
0 commit comments