#!/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-nodejs-ts-app.sh [app-name]" exit 1 fi APP_DIR="$WORKSPACE_DIR/$APP_ID" mkdir -p "$APP_DIR/src" cd "$APP_DIR" cat > package.json < tsconfig.json <<'EOF_JSON' { "compilerOptions": { "target": "ES2022", "module": "CommonJS", "outDir": "dist", "rootDir": "src", "strict": true, "esModuleInterop": true } } EOF_JSON cat > src/index.ts < { res.json({ name: "$APP_NAME", service: "$APP_ID", status: "ok" }); }); app.get("/health", (_req, res) => { res.json({ status: "ok" }); }); if (rootPath) { app.get(rootPath, (_req, res) => { res.json({ name: "$APP_NAME", service: "$APP_ID", status: "ok" }); }); app.get(rootPath + "/health", (_req, res) => { res.json({ status: "ok" }); }); } app.listen(port, "0.0.0.0", () => { console.log("$APP_ID listening on port " + port); }); EOF_TS cat > Dockerfile <<'EOF_DOCKER' FROM node:20-slim AS build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build FROM node:20-slim WORKDIR /app ENV PORT=3000 EXPOSE 3000 COPY package*.json ./ RUN npm install --omit=dev COPY --from=build /app/dist ./dist CMD ["npm", "start"] EOF_DOCKER cat > .dockerignore <<'EOF_IGNORE' node_modules/ dist/ .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