54 lines
1.7 KiB
Bash
54 lines
1.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Script to publish NuGet packages to a Gitea registry
|
|
# Usage: nuget_push.sh <nupkg-path-pattern>
|
|
|
|
NUPKG_PATTERN="${1:?Missing nupkg pattern argument}"
|
|
|
|
# Function to run commands, optionally in nix-shell
|
|
run_cmd() {
|
|
nix-shell --run "$*"
|
|
}
|
|
|
|
# Find the nupkg file
|
|
NUPKG_FILE=$(find "$(dirname "$NUPKG_PATTERN")" -maxdepth 1 -name "$(basename "$NUPKG_PATTERN")" -type f | head -n 1)
|
|
|
|
if [[ -z "$NUPKG_FILE" ]]; then
|
|
echo "Error: No .nupkg file found matching pattern: $NUPKG_PATTERN"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Found package: $NUPKG_FILE"
|
|
|
|
# Extract version from filename
|
|
FILENAME=$(basename "$NUPKG_FILE")
|
|
VERSION=$(echo "$FILENAME" | sed -E "s/^${PACKAGE_NAME}\.(.+)\.nupkg$/\1/")
|
|
echo "Package version: $VERSION"
|
|
|
|
# Add NuGet source if not already present
|
|
echo "Configuring NuGet source: $SOURCE_NAME"
|
|
run_cmd "$DOTNET_EXE nuget list source" | grep -q "$SOURCE_NAME" || \
|
|
run_cmd "$DOTNET_EXE nuget add source --name \"$SOURCE_NAME\" \"$REGISTRY_URL\""
|
|
|
|
# Publish the package
|
|
echo "Publishing package to $SOURCE_NAME..."
|
|
|
|
PUSH_CMD="$DOTNET_EXE nuget push \"$NUPKG_FILE\" --api-key \"$NUGET_API_KEY\" --source \"$SOURCE_NAME\""
|
|
|
|
if [[ "${SKIP_DUPLICATE:-true}" == "true" ]]; then
|
|
PUSH_CMD="$PUSH_CMD --skip-duplicate"
|
|
fi
|
|
|
|
if run_cmd "$PUSH_CMD"; then
|
|
# Check if it was skipped or actually pushed
|
|
# If skip-duplicate is enabled and package exists, dotnet exits with 0 but prints a message
|
|
echo "result=published" >> "$GITHUB_OUTPUT"
|
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
echo "Successfully published (or skipped duplicate): $PACKAGE_NAME $VERSION"
|
|
else
|
|
echo "result=failed" >> "$GITHUB_OUTPUT"
|
|
echo "Failed to publish package"
|
|
exit 1
|
|
fi
|