#!/usr/bin/env bash set -euo pipefail source /opt/appfactory/config/appfactory.env APP_ID="${1:-}" APP_NAME="${2:-$APP_ID}" if [ -z "$APP_ID" ]; then echo "Usage: new-dotnet-api-app.sh [app-name]" exit 1 fi APP_DIR="$WORKSPACE_DIR/$APP_ID" TOOLS_DIR="$WORKSPACE_DIR/appfactory-tools" PROJECT_NAME="$(python3 - "$APP_ID" <<'PY' import re, sys parts = re.split(r'[^a-zA-Z0-9]+', sys.argv[1]) print(''.join(p[:1].upper() + p[1:] for p in parts if p)) PY )" mkdir -p "$APP_DIR" cd "$APP_DIR" cat > "$PROJECT_NAME.csproj" < net8.0 enable enable EOF_DOTNET cat > Program.cs < Results.Json(new { name = "$APP_NAME", service = "$APP_ID", status = "ok" })); app.MapGet("/health", () => Results.Json(new { status = "ok" })); app.Run(); EOF_DOTNET cat > appsettings.json <<'EOF_JSON' { "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" } EOF_JSON cat > Dockerfile < .dockerignore <<'EOF_IGNORE' bin/ obj/ .git/ EOF_IGNORE cat > README.md </dev/null || true echo "Creating Gitea webhook..." curl -sS -X POST \ "$GITEA_URL/api/v1/repos/$GITEA_ORG/$APP_ID/hooks" \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"type\": \"gitea\", \"active\": true, \"events\": [\"push\"], \"config\": { \"url\": \"$WEBHOOK_INTERNAL_URL\", \"content_type\": \"json\", \"secret\": \"$WEBHOOK_SECRET\" } }" > /tmp/appfactory-create-hook-response.json if grep -q '"message"' /tmp/appfactory-create-hook-response.json; then cat /tmp/appfactory-create-hook-response.json fi if [[ "$GITEA_URL" == http://* ]]; then GITEA_PUSH_URL="${GITEA_URL/http:\/\//http:\/\/${GITEA_TOKEN}@}" elif [[ "$GITEA_URL" == https://* ]]; then GITEA_PUSH_URL="${GITEA_URL/https:\/\//https:\/\/${GITEA_TOKEN}@}" else echo "Unsupported GITEA_URL: $GITEA_URL" exit 1 fi git remote remove origin 2>/dev/null || true git remote add origin "$GITEA_PUSH_URL/$GITEA_ORG/$APP_ID.git" git push -u origin main