#!/bin/bash # Create or update a shared Forgejo release with branded macOS assets. set -e VERSION="" BRANDS=("agravity") FORGEJO_USER="${FORGEJO_USER}" FORGEJO_PASS="${FORGEJO_PASS}" FORGEJO_URL="https://git.him-tools.de" REPO="HIM-public/webdrop-bridge" CLEAR_CREDS=false PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" BRAND_HELPER="$PROJECT_ROOT/build/scripts/brand_config.py" MANIFEST_OUTPUT="$PROJECT_ROOT/build/dist/release-manifest.json" while [[ $# -gt 0 ]]; do case $1 in -v|--version) VERSION="$2"; shift 2 ;; -u|--url) FORGEJO_URL="$2"; shift 2 ;; --brand) BRANDS+=("$2"); shift 2 ;; --clear-credentials) CLEAR_CREDS=true; shift ;; *) echo "Unknown option: $1"; exit 1 ;; esac done if [ ${#BRANDS[@]} -gt 1 ] && [ "${BRANDS[0]}" = "agravity" ]; then BRANDS=("${BRANDS[@]:1}") fi if [ "$CLEAR_CREDS" = true ]; then unset FORGEJO_USER unset FORGEJO_PASS echo "[OK] Credentials cleared from this session" exit 0 fi if [ -z "$VERSION" ]; then VERSION="$(python3 -c "from pathlib import Path; import sys; sys.path.insert(0, str(Path(r'$PROJECT_ROOT/build/scripts').resolve())); from version_utils import get_current_version; print(get_current_version())")" fi if [ -z "$FORGEJO_USER" ] || [ -z "$FORGEJO_PASS" ]; then echo "Forgejo credentials not found. Enter your credentials:" if [ -z "$FORGEJO_USER" ]; then read -r -p "Username: " FORGEJO_USER fi if [ -z "$FORGEJO_PASS" ]; then read -r -s -p "Password: " FORGEJO_PASS echo "" fi export FORGEJO_USER export FORGEJO_PASS fi ARTIFACTS=() for BRAND in "${BRANDS[@]}"; do BRAND_JSON=$(python3 "$BRAND_HELPER" show --brand "$BRAND") BRAND_ID=$(printf '%s' "$BRAND_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["brand_id"])') ASSET_PREFIX=$(printf '%s' "$BRAND_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["asset_prefix"])') DMG_PATH="$PROJECT_ROOT/build/dist/macos/$BRAND_ID/${ASSET_PREFIX}-${VERSION}-macos-universal.dmg" CHECKSUM_PATH="$DMG_PATH.sha256" if [ -f "$DMG_PATH" ]; then ARTIFACTS+=("$DMG_PATH") [ -f "$CHECKSUM_PATH" ] && ARTIFACTS+=("$CHECKSUM_PATH") DMG_SIZE=$(du -m "$DMG_PATH" | cut -f1) echo "macOS artifact: $(basename "$DMG_PATH") ($DMG_SIZE MB)" fi done python3 "$BRAND_HELPER" release-manifest --version "$VERSION" --output "$MANIFEST_OUTPUT" --brands "${BRANDS[@]}" >/dev/null [ -f "$MANIFEST_OUTPUT" ] && ARTIFACTS+=("$MANIFEST_OUTPUT") if [ ${#ARTIFACTS[@]} -eq 0 ]; then echo "ERROR: No macOS artifacts found" exit 1 fi BASIC_AUTH=$(echo -n "${FORGEJO_USER}:${FORGEJO_PASS}" | base64) RELEASE_URL="$FORGEJO_URL/api/v1/repos/$REPO/releases" RELEASE_LOOKUP_URL="$FORGEJO_URL/api/v1/repos/$REPO/releases/tags/v$VERSION" RESPONSE=$(curl -s -H "Authorization: Basic $BASIC_AUTH" "$RELEASE_LOOKUP_URL") RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) if [ -z "$RELEASE_ID" ]; then RELEASE_DATA=$(cat <