A todo and personal organisation app
at main 102 lines 3.2 kB view raw
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"