The deploy pipeline builds AppImage, APK, and CLI on Linux, but the Windows installer is produced on a separate Windows host (no cross-compile toolchain here). Print a reminder at the end of every deploy with the exact filename the Windows team needs to upload, so the handoff stays unambiguous.
88 lines
3.2 KiB
Bash
Executable file
88 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
|
# Full build + deploy: AppImage, APK, CLI, website, anchor
|
|
# Usage: ./deploy.sh
|
|
# Requires: cargo, cargo-tauri, Android SDK, sshpass
|
|
set -e
|
|
|
|
# Load credentials from .deploy-creds (not in git)
|
|
if [ -f .deploy-creds ]; then
|
|
source .deploy-creds
|
|
else
|
|
echo "ERROR: .deploy-creds not found. Create it with:"
|
|
echo ' SSH_PASS="your-ssh-password"'
|
|
echo ' KS_PASS="your-keystore-password"'
|
|
exit 1
|
|
fi
|
|
SSH_HOST="itsgoin@itsgoin.com"
|
|
SSH_OPTS="-o StrictHostKeyChecking=no"
|
|
KEYSTORE="itsgoin.keystore"
|
|
KS_ALIAS="itsgoin"
|
|
|
|
VERSION=$(grep '"version"' crates/tauri-app/tauri.conf.json | head -1 | sed 's/.*"\([0-9.]*\)".*/\1/')
|
|
echo "=== Deploying v${VERSION} ==="
|
|
|
|
# Build CLI
|
|
echo "=== Building CLI ==="
|
|
cargo build -p itsgoin-cli --release &
|
|
CLI_PID=$!
|
|
|
|
# Build APK
|
|
echo "=== Building APK ==="
|
|
cargo tauri android build --apk &
|
|
APK_PID=$!
|
|
|
|
# Build AppImage (includes GStreamer patch)
|
|
echo "=== Building AppImage ==="
|
|
./build-appimage.sh
|
|
wait $CLI_PID
|
|
echo "=== CLI build complete ==="
|
|
wait $APK_PID
|
|
echo "=== APK build complete ==="
|
|
|
|
# Sign APK
|
|
echo "=== Signing APK ==="
|
|
UNSIGNED="crates/tauri-app/gen/android/app/build/outputs/apk/universal/release/app-universal-release-unsigned.apk"
|
|
ALIGNED="itsgoin-aligned.apk"
|
|
SIGNED="itsgoin-${VERSION}.apk"
|
|
ZIPALIGN=$(find ~/Android/Sdk/build-tools -name "zipalign" 2>/dev/null | sort -V | tail -1)
|
|
APKSIGNER=$(find ~/Android/Sdk/build-tools -name "apksigner" 2>/dev/null | sort -V | tail -1)
|
|
"$ZIPALIGN" -f 4 "$UNSIGNED" "$ALIGNED"
|
|
"$APKSIGNER" sign --ks "$KEYSTORE" --ks-pass "pass:$KS_PASS" --ks-key-alias "$KS_ALIAS" --out "$SIGNED" "$ALIGNED"
|
|
echo "Signed: $SIGNED"
|
|
|
|
# Upload (sequential to avoid SSH rate limiting)
|
|
echo "=== Uploading website ==="
|
|
sshpass -p "$SSH_PASS" scp $SSH_OPTS website/*.html website/style.css "$SSH_HOST:~/public_html/"
|
|
sleep 5
|
|
|
|
echo "=== Uploading AppImage ==="
|
|
sshpass -p "$SSH_PASS" scp $SSH_OPTS "target/release/bundle/appimage/itsgoin_${VERSION}_amd64.AppImage" "$SSH_HOST:~/public_html/itsgoin_${VERSION}_amd64.AppImage"
|
|
sleep 5
|
|
|
|
echo "=== Uploading APK ==="
|
|
sshpass -p "$SSH_PASS" scp $SSH_OPTS "$SIGNED" "$SSH_HOST:~/public_html/"
|
|
sleep 5
|
|
|
|
echo "=== Uploading CLI ==="
|
|
sshpass -p "$SSH_PASS" scp $SSH_OPTS target/release/itsgoin "$SSH_HOST:~/public_html/itsgoin-cli-${VERSION}-linux-amd64"
|
|
sleep 5
|
|
|
|
echo "=== Uploading anchor binary ==="
|
|
sshpass -p "$SSH_PASS" scp $SSH_OPTS target/release/itsgoin "$SSH_HOST:~/bin/itsgoin.new"
|
|
sleep 5
|
|
|
|
echo "=== Swapping anchor ==="
|
|
sshpass -p "$SSH_PASS" ssh $SSH_OPTS "$SSH_HOST" 'kill $(cat ~/itsgoin-anchor.pid 2>/dev/null) 2>/dev/null; sleep 1; mv ~/bin/itsgoin.new ~/bin/itsgoin && chmod +x ~/bin/itsgoin && bash ~/bin/start-anchor.sh'
|
|
sleep 2
|
|
|
|
echo "=== Verifying anchor ==="
|
|
sshpass -p "$SSH_PASS" ssh $SSH_OPTS "$SSH_HOST" 'ps aux | grep "[i]tsgoin.*daemon"'
|
|
|
|
echo ""
|
|
echo "=== Deploy complete: v${VERSION} ==="
|
|
echo ""
|
|
echo "Windows installer: this script does NOT build the Windows .exe."
|
|
echo "download.html carries a link to itsgoin-${VERSION}-windows-x64-setup.exe"
|
|
echo "The Windows build host needs to produce that file and SCP it to:"
|
|
echo " $SSH_HOST:~/public_html/itsgoin-${VERSION}-windows-x64-setup.exe"
|
|
echo "Until they do, the Windows download link 404s (stable-target pattern)."
|