forked from heavy-duty/stoke
53 lines
2 KiB
Bash
53 lines
2 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
#
|
||
|
|
# Publish a .deb to the Forgejo Debian package registry.
|
||
|
|
#
|
||
|
|
# Usage: scripts/publish-deb.sh <path-to-deb> [owner] [distribution] [component]
|
||
|
|
#
|
||
|
|
# owner registry owner (user or org), default: heavy-duty
|
||
|
|
# distribution APT distribution, default: stable
|
||
|
|
# component APT component, default: main
|
||
|
|
#
|
||
|
|
# Authentication (first match wins):
|
||
|
|
# 1. STOKE_TOKEN environment variable
|
||
|
|
# 2. The token stored by `stoke auth login`
|
||
|
|
#
|
||
|
|
# The Forgejo URL defaults to the instance in the stoke config, falling back
|
||
|
|
# to https://forgejo.heavyduty.builders. Override with FORGE_URL.
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
|
|
|
||
|
|
DEB="${1:?usage: publish-deb.sh <path-to-deb> [owner] [distribution] [component]}"
|
||
|
|
OWNER="${2:-heavy-duty}"
|
||
|
|
DISTRIBUTION="${3:-stable}"
|
||
|
|
COMPONENT="${4:-main}"
|
||
|
|
|
||
|
|
[ -f "$DEB" ] || { echo "error: no such file: $DEB" >&2; exit 1; }
|
||
|
|
|
||
|
|
CONFIG_JSON="$(node -e "const c = require('$ROOT/src/config').loadConfig(); if (c) process.stdout.write(JSON.stringify(c));" 2>/dev/null || true)"
|
||
|
|
TOKEN="${STOKE_TOKEN:-$(node -pe "(JSON.parse(process.argv[1] || '{}').token) || ''" "$CONFIG_JSON")}"
|
||
|
|
FORGE_URL="${FORGE_URL:-$(node -pe "(JSON.parse(process.argv[1] || '{}').url) || 'https://forgejo.heavyduty.builders'" "$CONFIG_JSON")}"
|
||
|
|
|
||
|
|
[ -n "$TOKEN" ] || { echo "error: no token. Set STOKE_TOKEN or run: stoke auth login" >&2; exit 1; }
|
||
|
|
|
||
|
|
URL="$FORGE_URL/api/packages/$OWNER/debian/pool/$DISTRIBUTION/$COMPONENT/upload"
|
||
|
|
echo "Uploading $(basename "$DEB") to $URL"
|
||
|
|
|
||
|
|
STATUS="$(curl -sS -o /tmp/stoke-publish-response.$$ -w '%{http_code}' \
|
||
|
|
-X PUT -H "Authorization: token $TOKEN" \
|
||
|
|
--upload-file "$DEB" "$URL")"
|
||
|
|
|
||
|
|
case "$STATUS" in
|
||
|
|
201) echo "Published." ;;
|
||
|
|
409) echo "Already published (409): this exact version already exists in the registry." ;;
|
||
|
|
*)
|
||
|
|
echo "error: upload failed with HTTP $STATUS" >&2
|
||
|
|
cat /tmp/stoke-publish-response.$$ >&2 || true
|
||
|
|
rm -f /tmp/stoke-publish-response.$$
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
rm -f /tmp/stoke-publish-response.$$
|