#!/bin/bash # Upload macOS Build to Forgejo Packages # Usage: ./upload_to_packages.sh -v 1.0.0 # Set token via: export FORGEJO_TOKEN="your_token" # Or store in config: ./upload_to_packages.sh --save-token -t "your_token" set -e # Parse arguments VERSION="" FORGEJO_TOKEN="" 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" SAVE_TOKEN=false while [[ $# -gt 0 ]]; do case $1 in -v|--version) VERSION="$2"; shift 2;; -t|--token) FORGEJO_TOKEN="$2"; shift 2;; -u|--url) FORGEJO_URL="$2"; shift 2;; --save-token) SAVE_TOKEN=true; shift;; *) echo "Unknown option: $1"; exit 1;; esac done # Load token from environment or .env file if [ -z "$FORGEJO_TOKEN" ]; then # Check if .env file exists in project root if [ -f ".env" ]; then export $(grep "FORGEJO_TOKEN" .env | xargs) fi # Check if saved in home config if [ -z "$FORGEJO_TOKEN" ] && [ -f "$HOME/.config/webdrop-bridge/.env" ]; then export $(grep "FORGEJO_TOKEN" "$HOME/.config/webdrop-bridge/.env" | xargs) fi fi # Handle --save-token flag if [ "$SAVE_TOKEN" = true ]; then if [ -z "$FORGEJO_TOKEN" ]; then read -sp "Enter Forgejo token to save: " FORGEJO_TOKEN echo "" fi mkdir -p "$HOME/.config/webdrop-bridge" echo "FORGEJO_TOKEN=$FORGEJO_TOKEN" > "$HOME/.config/webdrop-bridge/.env" chmod 600 "$HOME/.config/webdrop-bridge/.env" echo "✓ Token saved to $HOME/.config/webdrop-bridge/.env" exit 0 fi # Verify required parameters if [ -z "$VERSION" ]; then echo "ERROR: Version parameter required" >&2 echo "Usage: $0 -v VERSION [-t TOKEN] [-u FORGEJO_URL]" >&2 echo "Example: $0 -v 1.0.0" >&2 echo "" >&2 echo "Token can be set via:" >&2 echo " 1. Environment: export FORGEJO_TOKEN='your_token'" >&2 echo " 2. .env file: FORGEJO_TOKEN=your_token (in project root)" >&2 echo " 3. Config: $0 --save-token -t 'your_token'" >&2 echo " 4. Parameter: -t 'your_token'" >&2 exit 1 fi if [ -z "$FORGEJO_TOKEN" ]; then echo "ERROR: Forgejo token not found!" >&2 echo "" >&2 echo "Set token using one of these methods:" >&2 echo " 1. Environment: export FORGEJO_TOKEN='your_token'" >&2 echo " 2. .env file: FORGEJO_TOKEN=your_token (in project root)" >&2 echo " 3. Config: $0 --save-token -t 'your_token'" >&2 echo " 4. Parameter: -t 'your_token'" >&2 exit 1 fi # Verify files exist if [ ! -f "$DMG_PATH" ]; then echo "ERROR: DMG file not found at $DMG_PATH" exit 1 fi if [ ! -f "$CHECKSUM_PATH" ]; then echo "ERROR: Checksum file not found at $CHECKSUM_PATH" 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}..." # 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: token $FORGEJO_TOKEN" \ --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: token $FORGEJO_TOKEN" \ -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"