devops folders consolidate
This commit is contained in:
181
deploy/scripts/test-package-publish.sh
Normal file
181
deploy/scripts/test-package-publish.sh
Normal file
@@ -0,0 +1,181 @@
|
||||
#!/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'
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<PackageId>StellaOps.PackageTest</PackageId>
|
||||
<Version>0.0.1-test</Version>
|
||||
<Authors>StellaOps</Authors>
|
||||
<Description>Test package for registry validation</Description>
|
||||
<PackageLicenseExpression>BUSL-1.1</PackageLicenseExpression>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
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}"
|
||||
Reference in New Issue
Block a user