A todo and personal organisation app
1#!/bin/bash
2set -e
3
4# Usage: ./scripts/build_release.sh v1.0.0
5VERSION=$1
6
7if [ -z "$VERSION" ]; then
8 echo "No version argument provided. Fetching latest git tag..."
9 # Fetch tags if needed (optional, but good if strictly local)
10 # git fetch --tags
11 VERSION=$(git describe --tags --abbrev=0 2>/dev/null || true)
12fi
13
14if [ -z "$VERSION" ]; then
15 echo "Error: Could not determine version. Please provide a version argument or create a git tag."
16 exit 1
17fi
18
19# Clean version string (remove leading v or V)
20VERSION_CLEAN=$(echo "$VERSION" | sed 's/^[vV]//')
21
22PROJECT_ROOT=$(git rev-parse --show-toplevel)
23BUILD_DIR="$PROJECT_ROOT/deploy/builds"
24ANDROID_DIR="$BUILD_DIR/android"
25LINUX_DIR="$BUILD_DIR/linux"
26WINDOWS_DIR="$BUILD_DIR/windows"
27VERSION_FILE="$BUILD_DIR/version.json"
28
29echo "=== Building Release $VERSION ($VERSION_CLEAN) ==="
30
31# Create directories
32mkdir -p "$ANDROID_DIR" "$LINUX_DIR" "$WINDOWS_DIR"
33
34# 1. Build Android
35echo "--> Building Android APK..."
36cd "$PROJECT_ROOT"
37flutter build apk --release --build-name=$VERSION_CLEAN --build-number=$(date +%s)
38cp build/app/outputs/flutter-apk/app-release.apk "$ANDROID_DIR/toadist-$VERSION_CLEAN.apk"
39echo "Android APK built: $ANDROID_DIR/toadist-$VERSION_CLEAN.apk"
40
41# 2. Build Linux
42if [[ "$OSTYPE" == "linux-gnu"* ]]; then
43 echo "--> Building Linux App..."
44 if flutter build linux --release --build-name=$VERSION_CLEAN --build-number=$(date +%s); then
45 # Simple zip distribution for now (AppImage requires extra tools)
46 # If appimagetool is available, we could use it, but keeping it simple for now.
47 # Just zip the bundle.
48 cd build/linux/x64/release/bundle
49 zip -r "$LINUX_DIR/toadist-$VERSION_CLEAN-linux.zip" .
50 cd "$PROJECT_ROOT"
51 echo "Linux Build zipped: $LINUX_DIR/toadist-$VERSION_CLEAN-linux.zip"
52 else
53 echo "Linux build failed (missing dependencies?). Skipping Linux artifact."
54 fi
55else
56 echo "Skipping Linux build (not on Linux)"
57fi
58
59# 3. Build Windows (Optional)
60if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then
61 echo "--> Building Windows..."
62 flutter build windows --release --build-name=$VERSION_CLEAN --build-number=$(date +%s)
63 # Simple zip
64 cd build/windows/runner/release
65 zip -r "$WINDOWS_DIR/toadist-$VERSION_CLEAN-windows.zip" .
66 cd "$PROJECT_ROOT"
67else
68 echo "Skipping Windows build (not on Windows environment)"
69fi
70
71
72# 4. Update version.json
73# 4. Update version.json
74echo "--> Updating version.json..."
75TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
76
77# construct downloads json
78# construct downloads json
79DOWNLOADS_JSON=" \"android\": \"/downloads/android/toadist-$VERSION_CLEAN.apk\""
80
81if [ -f "$LINUX_DIR/toadist-$VERSION_CLEAN-linux.zip" ]; then
82 DOWNLOADS_JSON="$DOWNLOADS_JSON,
83 \"linux\": \"/downloads/linux/toadist-$VERSION_CLEAN-linux.zip\""
84fi
85
86if [ -f "$WINDOWS_DIR/toadist-$VERSION_CLEAN-windows.zip" ]; then
87 DOWNLOADS_JSON="$DOWNLOADS_JSON,
88 \"windows\": \"/downloads/windows/toadist-$VERSION_CLEAN-windows.zip\""
89fi
90
91cat > "$VERSION_FILE" <<EOF
92{
93 "latest": "$VERSION_CLEAN",
94 "releaseDate": "$TIMESTAMP",
95 "downloads": {
96$DOWNLOADS_JSON
97 }
98}
99EOF
100
101echo "=== Build Complete ==="
102echo "Artifacts are in $BUILD_DIR"