mishima-nexus-client-csharp/scripts/nuget-push-download.sh

70 lines
1.9 KiB
Bash
Raw Permalink Normal View History

#!/usr/bin/env bash
# Push *.nupkg to download.robotico.dev (BaGetter). Never overwrites: --skip-duplicate.
# Existing version → warning only (exit 0).
set -euo pipefail
NUGET_SOURCE="${NUGET_PUSH_SOURCE:-https://download.robotico.dev/nuget/v3/index.json}"
API_KEY="${PUBLISH_TOKEN:?Set PUBLISH_TOKEN (Woodpecker secret publish_token)}"
DIR="${1:-./nupkgs}"
if ! command -v dotnet >/dev/null 2>&1; then
echo "error: dotnet required on PATH" >&2
exit 1
fi
if [[ ! -d "$DIR" ]]; then
echo "error: nupkg directory not found: $DIR" >&2
exit 1
fi
shopt -s nullglob
files=("$DIR"/*.nupkg)
shopt -u nullglob
if [[ "${#files[@]}" -eq 0 ]]; then
echo "error: no .nupkg files in $DIR" >&2
exit 1
fi
published=0
warnings=0
skipped_symbols=0
for f in "${files[@]}"; do
base="$(basename "$f")"
if [[ "$base" == *.symbols.nupkg ]]; then
skipped_symbols=$((skipped_symbols + 1))
continue
fi
set +e
out="$(dotnet nuget push "$f" --source "$NUGET_SOURCE" --api-key "$API_KEY" --skip-duplicate 2>&1)"
code=$?
set -e
printf '%s\n' "$out"
if [[ "$code" -eq 0 ]]; then
if echo "$out" | grep -qiE 'already exists|skipped|duplicate|409|conflict'; then
echo "[WARN] $base — version already on registry (not overwritten)"
warnings=$((warnings + 1))
else
echo "[OK] $base — published"
published=$((published + 1))
fi
else
if echo "$out" | grep -qiE 'already exists|skipped|duplicate|409|conflict|already been pushed'; then
echo "[WARN] $base — version already on registry (not overwritten)"
warnings=$((warnings + 1))
else
echo "[ERROR] $base — push failed:" >&2
echo "$out" >&2
exit 1
fi
fi
done
echo "nuget-push-download: published=$published warnings=$warnings symbols_skipped=$skipped_symbols"
if [[ "$published" -eq 0 && "$warnings" -gt 0 ]]; then
echo "nuget-push-download: all packages already present — pipeline OK (no overwrite)"
fi