#!/bin/bash # test-package-publish.sh - Test NuGet package publishing to local Gitea # Sprint: SPRINT_20251226_004_CICD # # Prerequisites: # - Docker running # - Gitea test instance running (docker compose -f devops/compose/docker-compose.gitea-test.yaml up -d) # - GITEA_TEST_TOKEN environment variable set # - GITEA_TEST_OWNER environment variable set (default: stellaops) # # Usage: # export GITEA_TEST_TOKEN="your-access-token" # ./test-package-publish.sh # Test with sample package # ./test-package-publish.sh --module Authority # Test specific module set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" # Configuration GITEA_URL="${GITEA_TEST_URL:-http://localhost:3000}" GITEA_OWNER="${GITEA_TEST_OWNER:-stellaops}" GITEA_TOKEN="${GITEA_TEST_TOKEN:-}" TEST_MODULE="" DRY_RUN=false # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --module) TEST_MODULE="$2" shift 2 ;; --dry-run) DRY_RUN=true shift ;; --help) echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" echo " --module MODULE Test specific module (e.g., Authority)" echo " --dry-run Validate without pushing" echo " --help Show this help message" echo "" echo "Environment Variables:" echo " GITEA_TEST_URL Gitea URL (default: http://localhost:3000)" echo " GITEA_TEST_OWNER Package owner (default: stellaops)" echo " GITEA_TEST_TOKEN Access token with package:write scope" exit 0 ;; *) echo "Unknown option: $1" exit 1 ;; esac done echo "=== Package Publishing Test ===" echo "Gitea URL: $GITEA_URL" echo "Owner: $GITEA_OWNER" echo "Dry Run: $DRY_RUN" # Check prerequisites if [[ -z "$GITEA_TOKEN" && "$DRY_RUN" == "false" ]]; then echo -e "${RED}ERROR: GITEA_TEST_TOKEN environment variable is required${NC}" echo "Generate a token at: $GITEA_URL/user/settings/applications" exit 1 fi # Check if Gitea is running if ! curl -s "$GITEA_URL/api/healthz" >/dev/null 2>&1; then echo -e "${YELLOW}WARNING: Gitea not reachable at $GITEA_URL${NC}" echo "Start it with: docker compose -f devops/compose/docker-compose.gitea-test.yaml up -d" if [[ "$DRY_RUN" == "false" ]]; then exit 1 fi fi # NuGet source URL NUGET_SOURCE="$GITEA_URL/api/packages/$GITEA_OWNER/nuget/index.json" echo "NuGet Source: $NUGET_SOURCE" echo "" # Create a test package TEST_DIR="$REPO_ROOT/out/package-test" mkdir -p "$TEST_DIR" # If no module specified, use a simple test if [[ -z "$TEST_MODULE" ]]; then echo "=== Creating Test Package ===" # Create a minimal test package TEST_PROJ_DIR="$TEST_DIR/StellaOps.PackageTest" mkdir -p "$TEST_PROJ_DIR" cat > "$TEST_PROJ_DIR/StellaOps.PackageTest.csproj" <<'EOF' net10.0 StellaOps.PackageTest 0.0.1-test StellaOps Test package for registry validation AGPL-3.0-or-later EOF cat > "$TEST_PROJ_DIR/Class1.cs" <<'EOF' namespace StellaOps.PackageTest; public class TestClass { } EOF echo "Building test package..." dotnet pack "$TEST_PROJ_DIR/StellaOps.PackageTest.csproj" -c Release -o "$TEST_DIR/packages" PACKAGE_FILE=$(find "$TEST_DIR/packages" -name "*.nupkg" | head -1) else echo "=== Packing Module: $TEST_MODULE ===" # Find the module's main project MODULE_PROJ=$(find "$REPO_ROOT/src" -path "*/$TEST_MODULE/*" -name "StellaOps.$TEST_MODULE.csproj" | head -1) if [[ -z "$MODULE_PROJ" ]]; then echo -e "${RED}ERROR: Module project not found for $TEST_MODULE${NC}" exit 1 fi echo "Project: $MODULE_PROJ" dotnet pack "$MODULE_PROJ" -c Release -p:Version=0.0.1-test -o "$TEST_DIR/packages" PACKAGE_FILE=$(find "$TEST_DIR/packages" -name "*.nupkg" | head -1) fi if [[ -z "$PACKAGE_FILE" ]]; then echo -e "${RED}ERROR: No package file created${NC}" exit 1 fi echo "" echo "Package created: $PACKAGE_FILE" echo "" if [[ "$DRY_RUN" == "true" ]]; then echo -e "${YELLOW}=== DRY RUN: Skipping push ===${NC}" echo "Package validated successfully!" echo "" echo "To push manually:" echo " dotnet nuget push \"$PACKAGE_FILE\" \\" echo " --source $NUGET_SOURCE \\" echo " --api-key YOUR_TOKEN" else echo "=== Pushing Package ===" if dotnet nuget push "$PACKAGE_FILE" \ --source "$NUGET_SOURCE" \ --api-key "$GITEA_TOKEN" \ --skip-duplicate; then echo "" echo -e "${GREEN}SUCCESS: Package pushed to Gitea registry${NC}" echo "View at: $GITEA_URL/$GITEA_OWNER/-/packages" else echo "" echo -e "${RED}FAILED: Package push failed${NC}" exit 1 fi fi echo "" echo "=== Cleanup ===" rm -rf "$TEST_DIR" echo "Test directory cleaned up" echo "" echo -e "${GREEN}Done!${NC}"