Padmanav commited on
Commit
0b33efa
·
1 Parent(s): bb08a92

feat: add Dockerfile, GitHub Actions CI and Kubernetes manifests

Browse files
.github/workflows/ci.yml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: CI Pipeline
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ lint-and-test:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Checkout code
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Set up Python
18
+ uses: actions/setup-python@v5
19
+ with:
20
+ python-version: "3.11"
21
+
22
+ - name: Install dependencies
23
+ run: |
24
+ python -m pip install --upgrade pip
25
+ pip install -r requirements.txt
26
+
27
+ - name: Run Ruff linter
28
+ run: |
29
+ ruff check app/
30
+
31
+ - name: Run Bandit security check
32
+ run: |
33
+ bandit -r app/ -f text -q
34
+
35
+ - name: Run tests
36
+ env:
37
+ OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
38
+ LLM_MODEL: meta-llama/llama-3.3-70b-instruct
39
+ REPO_CLONE_DIR: /tmp/repositories
40
+ MAX_REPO_SIZE_MB: 500
41
+ APP_ENV: test
42
+ APP_PORT: 8000
43
+ LOG_LEVEL: info
44
+ run: |
45
+ pytest tests/ -v --tb=short
46
+
47
+ docker-build:
48
+ runs-on: ubuntu-latest
49
+ needs: lint-and-test
50
+
51
+ steps:
52
+ - name: Checkout code
53
+ uses: actions/checkout@v4
54
+
55
+ - name: Build Docker image
56
+ run: |
57
+ docker build -t ai-code-review-agent:latest .
DocerkFile ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # Install git (needed for GitPython)
6
+ RUN apt-get update && apt-get install -y \
7
+ git \
8
+ && rm -rf /var/lib/apt/lists/*
9
+
10
+ # Install dependencies
11
+ COPY requirements.txt .
12
+ RUN pip install --no-cache-dir -r requirements.txt
13
+
14
+ # Copy app code
15
+ COPY . .
16
+
17
+ # Expose ports
18
+ EXPOSE 8000
19
+ EXPOSE 7860
20
+
21
+ # Default command runs FastAPI
22
+ CMD ["uvicorn", "app.api.main:app", "--host", "0.0.0.0", "--port", "8000"]
kubernetes/configmap.yaml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ apiVersion: v1
2
+ kind: ConfigMap
3
+ metadata:
4
+ name: ai-agent-config
5
+ data:
6
+ llm-model: "meta-llama/llama-3.3-70b-instruct"
7
+ repo-clone-dir: "/tmp/repositories"
8
+ max-repo-size-mb: "500"
9
+ app-env: "production"
10
+ app-port: "8000"
11
+ log-level: "info"
kubernetes/deployment.yaml ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: ai-code-review-agent
5
+ labels:
6
+ app: ai-code-review-agent
7
+ spec:
8
+ replicas: 2
9
+ selector:
10
+ matchLabels:
11
+ app: ai-code-review-agent
12
+ template:
13
+ metadata:
14
+ labels:
15
+ app: ai-code-review-agent
16
+ spec:
17
+ containers:
18
+ - name: ai-code-review-agent
19
+ image: ai-code-review-agent:latest
20
+ ports:
21
+ - containerPort: 8000
22
+ env:
23
+ - name: OPENROUTER_API_KEY
24
+ valueFrom:
25
+ secretKeyRef:
26
+ name: ai-agent-secret
27
+ key: openrouter-api-key
28
+ - name: LLM_MODEL
29
+ valueFrom:
30
+ configMapKeyRef:
31
+ name: ai-agent-config
32
+ key: llm-model
33
+ - name: REPO_CLONE_DIR
34
+ valueFrom:
35
+ configMapKeyRef:
36
+ name: ai-agent-config
37
+ key: repo-clone-dir
38
+ resources:
39
+ requests:
40
+ memory: "512Mi"
41
+ cpu: "250m"
42
+ limits:
43
+ memory: "1Gi"
44
+ cpu: "500m"
kubernetes/ingress.yaml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ apiVersion: networking.k8s.io/v1
2
+ kind: Ingress
3
+ metadata:
4
+ name: ai-code-review-agent-ingress
5
+ annotations:
6
+ nginx.ingress.kubernetes.io/rewrite-target: /
7
+ spec:
8
+ rules:
9
+ - host: ai-agent.local
10
+ http:
11
+ paths:
12
+ - path: /
13
+ pathType: Prefix
14
+ backend:
15
+ service:
16
+ name: ai-code-review-agent-service
17
+ port:
18
+ number: 80
kubernetes/secret.yaml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ apiVersion: v1
2
+ kind: Secret
3
+ metadata:
4
+ name: ai-agent-secret
5
+ type: Opaque
6
+ stringData:
7
+ openrouter-api-key: your_openrouter_key_here
kubernetes/services.yaml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ apiVersion: v1
2
+ kind: Service
3
+ metadata:
4
+ name: ai-code-review-agent-service
5
+ spec:
6
+ selector:
7
+ app: ai-code-review-agent
8
+ ports:
9
+ - name: api
10
+ protocol: TCP
11
+ port: 80
12
+ targetPort: 8000
13
+ type: ClusterIP