diff --git a/scripts/release.sh b/scripts/release.sh new file mode 100755 index 0000000..1752e48 --- /dev/null +++ b/scripts/release.sh @@ -0,0 +1,93 @@ +#!/usr/bin/env bash +set -euo pipefail + +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' + +log() { echo -e "${GREEN}[release]${NC} $1"; } +err() { echo -e "${RED}[release]${NC} $1" >&2; } + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_DIR="$(dirname "$SCRIPT_DIR")" +ANDROID_DIR="$PROJECT_DIR/android" +APP_BUILD_GRADLE="$ANDROID_DIR/app/build.gradle" +SIGNING_PROPS="$ANDROID_DIR/signing.properties" +FORGEJO_URL="https://git.eddydevink.nl/api/v1/repos/eddy/Project_SylDa" +FIRMWARE_DIR="$ANDROID_DIR/app/src/main/assets/firmware" + +VERSION=$(grep -oP 'versionName\s+"\K[^"]+' "$APP_BUILD_GRADLE") +TAG="v$VERSION" +RELEASE_DIR="$PROJECT_DIR/release/$TAG" + +log "Release v$VERSION (tag $TAG)" + +if [ ! -f "$SIGNING_PROPS" ]; then + err "signing.properties niet gevonden op $SIGNING_PROPS" + exit 1 +fi + +log "Clean..." +cd "$ANDROID_DIR" +./gradlew clean + +log "Build APK + AAB..." +./gradlew assembleRelease bundleRelease + +log "Verzamel artefacten in $RELEASE_DIR" +mkdir -p "$RELEASE_DIR" + +cp "$ANDROID_DIR/app/build/outputs/apk/release/app-release.apk" "$RELEASE_DIR/" +cp "$ANDROID_DIR/app/build/outputs/bundle/release/app-release.aab" "$RELEASE_DIR/" +cp "$FIRMWARE_DIR/bootloader.bin" "$RELEASE_DIR/" +cp "$FIRMWARE_DIR/partitions.bin" "$RELEASE_DIR/" +cp "$FIRMWARE_DIR/boot_app0.bin" "$RELEASE_DIR/" +cp "$FIRMWARE_DIR/firmware.bin" "$RELEASE_DIR/" + +log "Checksums..." +cd "$RELEASE_DIR" +sha256sum * > checksums.txt +cat checksums.txt + +cd "$PROJECT_DIR" +if git rev-parse "$TAG" >/dev/null 2>&1; then + log "Tag $TAG bestaat al, skip git tag." +else + log "Git tag $TAG..." + git tag "$TAG" + git push origin "$TAG" +fi + +log "Forgejo release aanmaken..." +TOKEN_FILE="$HOME/.config/sylda/forgejo-token" +if [ ! -f "$TOKEN_FILE" ]; then + err "Forgejo token niet gevonden op $TOKEN_FILE" + err "Genereer een token in Forgejo: Settings > Applications > Generate Token (scope: write:repository)" + err "Sla op als: echo 'je-token' > $TOKEN_FILE" + exit 1 +fi +TOKEN=$(cat "$TOKEN_FILE") + +RELEASE_RESP=$(curl -s -X POST "$FORGEJO_URL/releases" \ + -H "Authorization: token $TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\": \"$TAG\", \"name\": \"$TAG\", \"body\": \"SylDa Android app + firmware\", \"draft\": false, \"prerelease\": false}") + +RELEASE_ID=$(echo "$RELEASE_RESP" | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])' 2>/dev/null || true) + +if [ -z "$RELEASE_ID" ]; then + err "Release aanmaken mislukt. Response:" + echo "$RELEASE_RESP" + exit 1 +fi +log "Release ID: $RELEASE_ID" + +for f in *; do + log " Upload $f..." + curl -s -X POST "$FORGEJO_URL/releases/$RELEASE_ID/assets?name=$f" \ + -H "Authorization: token $TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@$f" > /dev/null +done + +log "Klaar! Release $TAG staat op Forgejo."