#!/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-worker-app.sh [app-name]" exit 1 fi APP_DIR="$WORKSPACE_DIR/$APP_ID" 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 <(); var host = builder.Build(); host.Run(); public class Worker : BackgroundService { private readonly ILogger _logger; public Worker(ILogger logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Service $APP_ID is running at {time}", DateTimeOffset.Now); await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken); } } } EOF_DOTNET cat > Dockerfile < .dockerignore <<'EOF_IGNORE' bin/ obj/ .git/ EOF_IGNORE cat > README.md </dev/null || true GITEA_PUSH_URL="${GITEA_URL/http:\/\//http:\/\/${GITEA_TOKEN}@}" 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