Skip to content

Commit ec3e6fc

Browse files
Merge pull request #21 from nextinterfaces/pdf-analyzer-1
Adds PDF Analyzer service
2 parents 42eca72 + 7e16de8 commit ec3e6fc

File tree

13 files changed

+2386
-8
lines changed

13 files changed

+2386
-8
lines changed

Taskfile.yml

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,11 @@ tasks:
121121
echo "🚀 Starting Air hot reload on port 8090..."
122122
air -c .air.toml
123123
124-
# dev:stop-port-forwards:
125-
# desc: Stop all kubectl port-forward processes
126-
# cmds:
127-
# - |
128-
# echo "🛑 Stopping all kubectl port-forward processes..."
129-
# pkill -f "kubectl port-forward" || echo "No port-forwards running"
130-
# echo "✅ Done"
124+
dev:pdf-analyzer-service:
125+
desc: Run pdf-analyzer-service in development mode with hot reload
126+
dir: apps/pdf-analyzer-service
127+
cmds:
128+
- pnpm install && PORT=8091 pnpm dev
131129

132130
# Docker tasks
133131
docker:build:items-service:
@@ -145,12 +143,18 @@ tasks:
145143
cmds:
146144
- docker build -t semcache-service:local ./apps/semcache-service
147145

146+
docker:build:pdf-analyzer-service:
147+
desc: Build Docker image for pdf-analyzer-service
148+
cmds:
149+
- docker build -t pdf-analyzer-service:local ./apps/pdf-analyzer-service
150+
148151
docker:build:all:
149152
desc: Build Docker images for all apps
150153
cmds:
151154
- task: docker:build:items-service
152155
- task: docker:build:website-app
153156
- task: docker:build:semcache-service
157+
- task: docker:build:pdf-analyzer-service
154158

155159
docker:run:items-service:
156160
desc: Run items-service Docker container locally
@@ -167,6 +171,11 @@ tasks:
167171
cmds:
168172
- docker run --rm -p 8080:8080 semcache-service:local
169173

174+
docker:run:pdf-analyzer-service:
175+
desc: Run pdf-analyzer-service Docker container locally
176+
cmds:
177+
- docker run --rm -p 8080:8080 pdf-analyzer-service:local
178+
170179
# Terraform tasks
171180
tf:init:
172181
desc: Initialize Terraform
@@ -273,6 +282,11 @@ tasks:
273282
cmds:
274283
- kubectl --kubeconfig={{.KUBECONFIG}} logs -l app=semcache-service --tail=100 -f
275284

285+
k8s:logs:pdf-analyzer-service:
286+
desc: Get logs from pdf-analyzer-service
287+
cmds:
288+
- kubectl --kubeconfig={{.KUBECONFIG}} logs -l app=pdf-analyzer-service --tail=100 -f
289+
276290
k8s:describe:items-service:
277291
desc: Describe items-service deployment
278292
cmds:
@@ -288,6 +302,11 @@ tasks:
288302
cmds:
289303
- kubectl --kubeconfig={{.KUBECONFIG}} describe deployment semcache-service
290304

305+
k8s:describe:pdf-analyzer-service:
306+
desc: Describe pdf-analyzer-service deployment
307+
cmds:
308+
- kubectl --kubeconfig={{.KUBECONFIG}} describe deployment pdf-analyzer-service
309+
291310
# Deployment tasks
292311
deploy:items-service:
293312
desc: Deploy items-service to Kubernetes
@@ -310,6 +329,14 @@ tasks:
310329
- echo "Waiting for rollout to complete..."
311330
- kubectl --kubeconfig={{.KUBECONFIG}} rollout status deployment/semcache-service --timeout=120s
312331

332+
deploy:pdf-analyzer-service:
333+
desc: Deploy pdf-analyzer-service to Kubernetes
334+
cmds:
335+
- kubectl --kubeconfig={{.KUBECONFIG}} apply -f {{.K8S_DIR}}/apps/pdf-analyzer-service-deployment.yaml
336+
- echo "✅ pdf-analyzer-service deployed"
337+
- echo "Waiting for rollout to complete..."
338+
- kubectl --kubeconfig={{.KUBECONFIG}} rollout status deployment/pdf-analyzer-service --timeout=120s
339+
313340
deploy:headlamp-readonly:
314341
desc: Deploy Headlamp Kubernetes Dashboard (Read-Only Public)
315342
cmds:
@@ -324,6 +351,7 @@ tasks:
324351
- task: deploy:items-service
325352
- task: deploy:website-app
326353
- task: deploy:semcache-service
354+
- task: deploy:pdf-analyzer-service
327355
- task: deploy:headlamp-readonly
328356

329357
deploy:items-service:with-postgres:
@@ -422,6 +450,11 @@ tasks:
422450
cmds:
423451
- kubectl --kubeconfig={{.KUBECONFIG}} rollout restart deployment/semcache-service
424452

453+
rollout:restart:pdf-analyzer-service:
454+
desc: Restart pdf-analyzer-service deployment
455+
cmds:
456+
- kubectl --kubeconfig={{.KUBECONFIG}} rollout restart deployment/pdf-analyzer-service
457+
425458
rollout:status:items-service:
426459
desc: Check rollout status for items-service
427460
cmds:
@@ -437,6 +470,11 @@ tasks:
437470
cmds:
438471
- kubectl --kubeconfig={{.KUBECONFIG}} rollout status deployment/semcache-service
439472

473+
rollout:status:pdf-analyzer-service:
474+
desc: Check rollout status for pdf-analyzer-service
475+
cmds:
476+
- kubectl --kubeconfig={{.KUBECONFIG}} rollout status deployment/pdf-analyzer-service
477+
440478
# DNS and networking tasks
441479
dns:clear-cache:
442480
desc: Clear DNS cache (macOS)
@@ -466,10 +504,15 @@ tasks:
466504
cmds:
467505
- curl -s https://app.roussev.com/semcache/v1/health | jq
468506

507+
health:pdf-analyzer-service:
508+
desc: Check health of pdf-analyzer-service
509+
cmds:
510+
- curl -s https://app.roussev.com/pdf-analyzer/v1/health | jq
511+
469512
clean:docker:
470513
desc: Clean Docker images
471514
cmds:
472-
- docker rmi items-service:local website-app:local semcache-service:local || true
515+
- docker rmi items-service:local website-app:local semcache-service:local pdf-analyzer-service:local || true
473516

474517
# Port forwarding tasks
475518
# port-forward:items-service:

Tiltfile

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,37 @@ k8s_resource(
215215
]
216216
)
217217

218+
# ============================================================================
219+
# PDF Analyzer Service (Node.js + Express + TypeScript)
220+
# ============================================================================
221+
222+
# Build Docker image for pdf-analyzer-service (using dev Dockerfile with hot reload)
223+
docker_build(
224+
'pdf-analyzer-service',
225+
context='./apps/pdf-analyzer-service',
226+
dockerfile='./apps/pdf-analyzer-service/Dockerfile.dev',
227+
live_update=[
228+
sync('./apps/pdf-analyzer-service/src', '/app/src'),
229+
sync('./apps/pdf-analyzer-service/package.json', '/app/package.json'),
230+
run('cd /app && pnpm install', trigger=['./apps/pdf-analyzer-service/package.json']),
231+
]
232+
)
233+
234+
# Deploy pdf-analyzer-service
235+
k8s_yaml('infra/k8s/local/pdf-analyzer-service-local.yaml')
236+
237+
# Configure pdf-analyzer-service resource
238+
k8s_resource(
239+
'pdf-analyzer-service',
240+
port_forwards='8085:8080',
241+
labels=['apps'],
242+
resource_deps=['jaeger', 'prometheus'],
243+
links=[
244+
link('http://localhost:8085/v1/health', 'Health Check'),
245+
link('http://localhost:8085/docs', 'API Docs (Swagger UI)'),
246+
]
247+
)
248+
218249
# ============================================================================
219250
# Headlamp Kubernetes Dashboard (Read-Only)
220251
# ============================================================================
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
node_modules
2+
.dist
3+
dist
4+
.git
5+
Dockerfile
6+
Dockerfile.dev
7+
.env
8+
**/.DS_Store
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# syntax=docker/dockerfile:1
2+
3+
# ---------- deps ----------
4+
FROM node:20-alpine AS deps
5+
WORKDIR /app
6+
RUN corepack enable && corepack prepare [email protected] --activate
7+
COPY package.json pnpm-lock.yaml* ./
8+
RUN pnpm install --frozen-lockfile || pnpm install
9+
10+
# ---------- builder ----------
11+
FROM node:20-alpine AS builder
12+
WORKDIR /app
13+
RUN corepack enable && corepack prepare [email protected] --activate
14+
COPY --from=deps /app/node_modules ./node_modules
15+
COPY package.json tsconfig.json ./
16+
COPY src ./src
17+
COPY api ./api
18+
RUN pnpm build
19+
20+
# prune dev deps to prod-only
21+
RUN pnpm prune --prod
22+
23+
# ---------- runner ----------
24+
FROM node:20-alpine AS runner
25+
WORKDIR /app
26+
ENV NODE_ENV=production
27+
ENV PORT=8080
28+
29+
# only copy runtime artifacts
30+
COPY --from=builder /app/dist ./dist
31+
COPY --from=builder /app/api ./api
32+
COPY --from=builder /app/node_modules ./node_modules
33+
COPY package.json ./package.json
34+
35+
EXPOSE 8080
36+
CMD ["node", "dist/index.js"]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Development Dockerfile with hot reload using tsx
2+
FROM node:20-alpine
3+
4+
WORKDIR /app
5+
6+
# Enable pnpm
7+
RUN corepack enable && corepack prepare [email protected] --activate
8+
9+
# Install dependencies first for cache
10+
COPY package.json pnpm-lock.yaml* ./
11+
RUN pnpm install
12+
13+
# Copy source
14+
COPY . .
15+
16+
EXPOSE 8080
17+
ENV PORT=8080
18+
19+
CMD ["pnpm", "dev"]
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
openapi: 3.0.3
2+
info:
3+
title: PDF Analyzer Service API
4+
version: 0.1.0
5+
description: Simple service with health and docs for PDF Analyzer
6+
servers:
7+
- url: /
8+
paths:
9+
/v1/health:
10+
get:
11+
summary: Health check
12+
operationId: healthCheck
13+
tags: [system]
14+
responses:
15+
'200':
16+
description: Service is healthy
17+
content:
18+
application/json:
19+
schema:
20+
type: object
21+
properties:
22+
status:
23+
type: string
24+
example: ok
25+
commit:
26+
type: string
27+
example: local-dev

0 commit comments

Comments
 (0)