#!/bin/bash # Upload macOS Build to Forgejo Packages # Usage: ./upload_to_packages.sh -v 1.0.0 # Uses your Forgejo credentials (same as git) # Set via: export FORGEJO_USER="username"; export FORGEJO_PASS="password" set -e # Parse arguments VERSION="" FORGEJO_USER="" FORGEJO_PASS="" FORGEJO_URL="https://git.him-tools.de" REPO="HIM-public/webdrop-bridge" DMG_PATH="build/dist/macos/WebDropBridge.dmg" CHECKSUM_PATH="build/dist/macos/WebDropBridge.dmg.sha256" while [[ $# -gt 0 ]]; do case $1 in -v|--version) VERSION="$2"; shift 2;; -u|--url) FORGEJO_URL="$2"; shift 2;; *) echo "Unknown option: $1"; exit 1;; esac done # Load credentials from environment if [ -z "$FORGEJO_USER" ]; then FORGEJO_USER="$FORGEJO_USER" fi if [ -z "$FORGEJO_PASS" ]; then FORGEJO_PASS="$FORGEJO_PASS" fi # Verify required parameters if [ -z "$VERSION" ]; then echo "ERROR: Version parameter required" >&2 echo "Usage: $0 -v VERSION [-u FORGEJO_URL]" >&2 echo "Example: $0 -v 1.0.0" >&2 exit 1 fi if [ -z "$FORGEJO_USER" ] || [ -z "$FORGEJO_PASS" ]; then echo "ERROR: Forgejo credentials not found!" >&2 echo "" >&2 echo "Set your credentials using environment variables:" >&2 echo " export FORGEJO_USER='your_username'" >&2 echo " export FORGEJO_PASS='your_password'" >&2 echo "" >&2 echo "These should match your Forgejo login credentials." >&2 exit 1 fi echo "Uploading WebDropBridge $VERSION to Forgejo Packages..." # Get file info DMG_SIZE=$(du -m "$DMG_PATH" | cut -f1) CHECKSUM=$(cat "$CHECKSUM_PATH") echo "File: WebDropBridge.dmg ($DMG_SIZE MB)" echo "Checksum: ${CHECKSUM:0:16}..." # Create basic auth header BASIC_AUTH=$(echo -n "${FORGEJO_USER}:${FORGEJO_PASS}" | base64) # Upload DMG echo "" echo "Uploading DMG..." DMG_URL="$FORGEJO_URL/api/v1/repos/$REPO/packages/generic/webdrop-bridge/$VERSION/WebDropBridge.dmg" HTTP_CODE=$(curl -s -w "%{http_code}" -X PUT \ -H "Authorization: Basic $BASIC_AUTH" \ --data-binary "@$DMG_PATH" \ -H "Content-Type: application/octet-stream" \ "$DMG_URL" \ -o /tmp/curl_response.txt) if [ "$HTTP_CODE" -eq 201 ] || [ "$HTTP_CODE" -eq 200 ]; then echo "✓ DMG uploaded successfully" else echo "ERROR uploading DMG (HTTP $HTTP_CODE)" cat /tmp/curl_response.txt exit 1 fi # Upload checksum echo "Uploading checksum..." CHECKSUM_URL="$FORGEJO_URL/api/v1/repos/$REPO/packages/generic/webdrop-bridge/$VERSION/WebDropBridge.dmg.sha256" HTTP_CODE=$(curl -s -w "%{http_code}" -X PUT \ -H "Authorization: Basic $BASIC_AUTH" \ -d "$CHECKSUM" \ -H "Content-Type: text/plain" \ "$CHECKSUM_URL" \ -o /tmp/curl_response.txt) if [ "$HTTP_CODE" -eq 201 ] || [ "$HTTP_CODE" -eq 200 ]; then echo "✓ Checksum uploaded successfully" else echo "ERROR uploading checksum (HTTP $HTTP_CODE)" cat /tmp/curl_response.txt exit 1 fi echo "" echo "✓ Upload complete!" echo "View at: $FORGEJO_URL/$REPO/packages"