#!/usr/bin/env bash set -euo pipefail # Script to publish NuGet packages to a Gitea registry # Usage: nuget_push.sh 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