Skip to content

Commit 4b82dcb

Browse files
committed
Added
1 parent 6d9bc43 commit 4b82dcb

File tree

8 files changed

+1169
-0
lines changed

8 files changed

+1169
-0
lines changed

.github/dependabot.yml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# Dependabot configuration for automated dependency updates
2+
version: 2
3+
4+
updates:
5+
# Python dependencies
6+
- package-ecosystem: "pip"
7+
directory: "/"
8+
schedule:
9+
interval: "weekly"
10+
day: "monday"
11+
time: "04:00"
12+
open-pull-requests-limit: 10
13+
reviewers:
14+
- "ypratap11"
15+
assignees:
16+
- "ypratap11"
17+
commit-message:
18+
prefix: "deps"
19+
prefix-development: "deps-dev"
20+
include: "scope"
21+
labels:
22+
- "dependencies"
23+
- "python"
24+
ignore:
25+
# Ignore major version updates for stable dependencies
26+
- dependency-name: "fastapi"
27+
update-types: ["version-update:semver-major"]
28+
- dependency-name: "streamlit"
29+
update-types: ["version-update:semver-major"]
30+
31+
# Docker dependencies
32+
- package-ecosystem: "docker"
33+
directory: "/"
34+
schedule:
35+
interval: "weekly"
36+
day: "tuesday"
37+
time: "04:00"
38+
open-pull-requests-limit: 5
39+
reviewers:
40+
- "ypratap11"
41+
commit-message:
42+
prefix: "docker"
43+
include: "scope"
44+
labels:
45+
- "dependencies"
46+
- "docker"
47+
48+
# GitHub Actions dependencies
49+
- package-ecosystem: "github-actions"
50+
directory: "/.github/workflows"
51+
schedule:
52+
interval: "weekly"
53+
day: "wednesday"
54+
time: "04:00"
55+
open-pull-requests-limit: 5
56+
reviewers:
57+
- "ypratap11"
58+
commit-message:
59+
prefix: "ci"
60+
include: "scope"
61+
labels:
62+
- "dependencies"
63+
- "github-actions"
64+
65+
# Helm dependencies (if using Helm charts)
66+
- package-ecosystem: "gitsubmodule"
67+
directory: "/helm"
68+
schedule:
69+
interval: "weekly"
70+
day: "thursday"
71+
time: "04:00"
72+
open-pull-requests-limit: 3
73+
reviewers:
74+
- "ypratap11"
75+
commit-message:
76+
prefix: "helm"
77+
include: "scope"
78+
labels:
79+
- "dependencies"
80+
- "helm"

.github/workflows/ci-cd.yml

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
name: CI/CD Pipeline
2+
3+
on:
4+
push:
5+
branches: [ main, develop ]
6+
pull_request:
7+
branches: [ main ]
8+
9+
env:
10+
PYTHON_VERSION: '3.11'
11+
NODE_VERSION: '18'
12+
13+
jobs:
14+
# Code Quality and Testing
15+
test:
16+
name: Test and Quality Checks
17+
runs-on: ubuntu-latest
18+
strategy:
19+
matrix:
20+
python-version: ['3.8', '3.9', '3.10', '3.11']
21+
22+
steps:
23+
- name: Checkout code
24+
uses: actions/checkout@v4
25+
26+
- name: Set up Python ${{ matrix.python-version }}
27+
uses: actions/setup-python@v4
28+
with:
29+
python-version: ${{ matrix.python-version }}
30+
31+
- name: Cache pip dependencies
32+
uses: actions/cache@v3
33+
with:
34+
path: ~/.cache/pip
35+
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
36+
restore-keys: |
37+
${{ runner.os }}-pip-
38+
39+
- name: Install dependencies
40+
run: |
41+
python -m pip install --upgrade pip
42+
pip install -r requirements.txt
43+
pip install pytest pytest-cov pytest-asyncio flake8 black isort mypy
44+
45+
- name: Code formatting check (Black)
46+
run: black --check --diff src/ frontend/
47+
48+
- name: Import sorting check (isort)
49+
run: isort --check-only --diff src/ frontend/
50+
51+
- name: Lint with flake8
52+
run: |
53+
# Stop the build if there are Python syntax errors or undefined names
54+
flake8 src/ --count --select=E9,F63,F7,F82 --show-source --statistics
55+
# Exit-zero treats all errors as warnings
56+
flake8 src/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
57+
58+
- name: Type checking with mypy
59+
run: mypy src/ --ignore-missing-imports
60+
61+
- name: Run unit tests with pytest
62+
run: |
63+
pytest tests/ --cov=src/ --cov-report=xml --cov-report=html -v
64+
65+
- name: Upload coverage to Codecov
66+
if: matrix.python-version == '3.11'
67+
uses: codecov/codecov-action@v3
68+
with:
69+
file: ./coverage.xml
70+
flags: unittests
71+
name: codecov-umbrella
72+
73+
# Security Scanning
74+
security:
75+
name: Security Scan
76+
runs-on: ubuntu-latest
77+
78+
steps:
79+
- name: Checkout code
80+
uses: actions/checkout@v4
81+
82+
- name: Set up Python
83+
uses: actions/setup-python@v4
84+
with:
85+
python-version: ${{ env.PYTHON_VERSION }}
86+
87+
- name: Install dependencies
88+
run: |
89+
python -m pip install --upgrade pip
90+
pip install -r requirements.txt
91+
92+
- name: Run security scan with bandit
93+
run: |
94+
pip install bandit
95+
bandit -r src/ -f json -o bandit-report.json
96+
97+
- name: Run dependency vulnerability scan
98+
uses: pypa/gh-action-pip-audit@v1.0.8
99+
with:
100+
inputs: requirements.txt
101+
102+
# Docker Build and Test
103+
docker-build:
104+
name: Docker Build and Test
105+
runs-on: ubuntu-latest
106+
needs: [test, security]
107+
108+
steps:
109+
- name: Checkout code
110+
uses: actions/checkout@v4
111+
112+
- name: Set up Docker Buildx
113+
uses: docker/setup-buildx-action@v3
114+
115+
- name: Build backend Docker image
116+
run: |
117+
docker build --target backend -t invoice-ai-backend:test .
118+
119+
- name: Build frontend Docker image
120+
run: |
121+
docker build --target frontend -t invoice-ai-frontend:test .
122+
123+
- name: Test Docker images
124+
run: |
125+
# Test backend health endpoint
126+
docker run --rm -d --name backend-test -p 8000:8000 invoice-ai-backend:test
127+
sleep 10
128+
curl -f http://localhost:8000/ || exit 1
129+
docker stop backend-test
130+
131+
- name: Run container security scan
132+
uses: aquasecurity/trivy-action@master
133+
with:
134+
image-ref: 'invoice-ai-backend:test'
135+
format: 'sarif'
136+
output: 'trivy-results.sarif'
137+
138+
# Performance Testing
139+
performance:
140+
name: Performance Testing
141+
runs-on: ubuntu-latest
142+
needs: docker-build
143+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
144+
145+
steps:
146+
- name: Checkout code
147+
uses: actions/checkout@v4
148+
149+
- name: Run performance tests
150+
run: |
151+
# Add performance testing with locust or similar
152+
echo "Performance testing would run here"
153+
154+
# Deploy to Staging
155+
deploy-staging:
156+
name: Deploy to Staging
157+
runs-on: ubuntu-latest
158+
needs: [test, security, docker-build]
159+
if: github.ref == 'refs/heads/develop'
160+
environment: staging
161+
162+
steps:
163+
- name: Checkout code
164+
uses: actions/checkout@v4
165+
166+
- name: Deploy to staging
167+
run: |
168+
echo "Deploy to staging environment"
169+
# Add deployment scripts here
170+
171+
# Deploy to Production
172+
deploy-production:
173+
name: Deploy to Production
174+
runs-on: ubuntu-latest
175+
needs: [test, security, docker-build, performance]
176+
if: github.ref == 'refs/heads/main'
177+
environment: production
178+
179+
steps:
180+
- name: Checkout code
181+
uses: actions/checkout@v4
182+
183+
- name: Login to DockerHub
184+
uses: docker/login-action@v3
185+
with:
186+
username: ${{ secrets.DOCKERHUB_USERNAME }}
187+
password: ${{ secrets.DOCKERHUB_TOKEN }}
188+
189+
- name: Build and push Docker images
190+
run: |
191+
# Backend
192+
docker build --target backend -t ${{ secrets.DOCKERHUB_USERNAME }}/invoice-ai-backend:latest .
193+
docker push ${{ secrets.DOCKERHUB_USERNAME }}/invoice-ai-backend:latest
194+
195+
# Frontend
196+
docker build --target frontend -t ${{ secrets.DOCKERHUB_USERNAME }}/invoice-ai-frontend:latest .
197+
docker push ${{ secrets.DOCKERHUB_USERNAME }}/invoice-ai-frontend:latest
198+
199+
- name: Deploy to production
200+
run: |
201+
echo "Deploy to production environment"
202+
# Add production deployment scripts here
203+
204+
# Cleanup
205+
cleanup:
206+
name: Cleanup
207+
runs-on: ubuntu-latest
208+
needs: [deploy-production]
209+
if: always()
210+
211+
steps:
212+
- name: Clean up Docker images
213+
run: |
214+
docker system prune -f

0 commit comments

Comments
 (0)