Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
bcfbd21
chore: add .gitignore, untrack secrets, create directory structure
johnnybabs Jun 1, 2026
2362cb6
feat: add Terraform IaC modules for VPC, IAM, EKS, and security groups
johnnybabs Jun 1, 2026
3e7fd6b
feat: add CI/CD pipeline (GitHub Actions + Jenkinsfile + Swarm stagin…
johnnybabs Jun 1, 2026
9d2c81e
feat: add health probes, resource limits, security contexts, CORS sup…
johnnybabs Jun 1, 2026
9f2c199
feat: add Prometheus, Grafana, Alertmanager with custom dashboard and…
johnnybabs Jun 1, 2026
f6afe4d
feat: add VidCast frontend with login, upload, download, dashboard, a…
johnnybabs Jun 1, 2026
da64b13
docs: add README, architecture guide, deployment guide, presentation …
johnnybabs Jun 1, 2026
983174e
Trigger CI for Docker image builds
johnnybabs Jun 1, 2026
be63d88
Remove CI trigger comment from README
johnnybabs Jun 1, 2026
a47207a
Edit Readme to trigger CI pipeline
johnnybabs Jun 1, 2026
75b3574
fix: resolve ruff lint failures blocking CI pipeline
johnnybabs Jun 1, 2026
ff3982a
fix: upgrade base image from bullseye to bookworm to pass Trivy scan
johnnybabs Jun 1, 2026
db854bc
fix: remove unused prometheus-client dependency from gateway-service
johnnybabs Jun 1, 2026
cc3d23d
fix: remove unnecessary ffmpeg from notification-service image
johnnybabs Jun 1, 2026
c9b213d
fix: run all service containers as non-root user 1000
johnnybabs Jun 1, 2026
091ffbf
chore: add .dockerignore to all four services
johnnybabs Jun 1, 2026
3f2c806
fix: move MongoDB credentials from ConfigMaps to Secrets
johnnybabs Jun 1, 2026
01af2a4
docs: annotate plaintext-credential and PV/PVC-sizing risks for harde…
johnnybabs Jun 1, 2026
5fff621
fix: patch OS-layer and toolchain CVEs in all Dockerfiles
johnnybabs Jun 1, 2026
5c224a3
fix: bump pinned Python deps to resolve CRITICAL/HIGH CVEs
johnnybabs Jun 1, 2026
78a73e6
feat: convert CD to GitHub OIDC and provision the deploy role in Terr…
johnnybabs Jun 1, 2026
cdd5992
fix(helm): add missing secret templates to MongoDB and RabbitMQ charts
johnnybabs Jun 2, 2026
94b117d
fix(eks-module): grant cluster creator admin permissions automatically
johnnybabs Jun 2, 2026
c91216a
feat: read RabbitMQ credentials from environment variables
johnnybabs Jun 2, 2026
4d5fc7d
feat: switch to operator-built images and inject RabbitMQ credentials
johnnybabs Jun 2, 2026
7f36e84
fix(helm): bump MongoDB image to 4.2 for PyMongo wire-version compat
johnnybabs Jun 2, 2026
16f49a0
fix: touch /tmp/healthy at consumer startup to satisfy liveness probe
johnnybabs Jun 2, 2026
d335b2c
fix(manifests): gateway /tmp volume, converter 2 replicas, pin images…
johnnybabs Jun 2, 2026
fd35335
fix(frontend): raise nginx client_max_body_size for video uploads
johnnybabs Jun 2, 2026
9fdcc8f
feat(frontend): deploy from account ECR, pinned to fd35335
johnnybabs Jun 2, 2026
8582bf1
feat: user self-registration (sign up)
johnnybabs Jun 2, 2026
6fd3b83
feat(rbac): real roles + bcrypt; stop every token claiming admin
johnnybabs Jun 3, 2026
8237f0a
fix(notification): harden consumer so SMTP failures nack instead of c…
johnnybabs Jun 3, 2026
043e4d9
fix(auth): return 401 not 500 when a stored credential isn't a valid …
johnnybabs Jun 3, 2026
f2c9f3f
docs(rbac): track the merge-time Postgres migration runbook
johnnybabs Jun 3, 2026
2119238
chore(frontend): pin manifest to vidcast-frontend:8582bf1 (matches EC…
johnnybabs Jun 3, 2026
1e384dc
feat(downloads): per-user file ownership + in-app "ready" bubble badge
johnnybabs Jun 3, 2026
973df00
feat(frontend): My Conversions page (file history)
johnnybabs Jun 3, 2026
c474547
chore(frontend): add package-lock.json for reproducibility
johnnybabs Jun 3, 2026
edc2a81
feat(signup): enforce 8-char minimum password + add email-notificatio…
johnnybabs Jun 3, 2026
49bf2b3
feat(admin): user management page — list users + promote/demote roles
johnnybabs Jun 3, 2026
fe29e2d
docs: consolidate branch architectural decisions (trade-off documenta…
johnnybabs Jun 3, 2026
d9e4282
Merge pull request #1 from johnnybabs/feature/rbac-and-notifications
johnnybabs Jun 3, 2026
32ea48f
fix(observability): set PYTHONUNBUFFERED=1 on gateway/converter/notif…
johnnybabs Jun 3, 2026
fa55f6d
docs: add post-merge addenda (bcrypt forward-only; 403/409 complement…
johnnybabs Jun 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: VidCast CD — Deploy to EKS

on:
workflow_run:
workflows: ["VidCast CI — Lint, Scan, Build, Push"]
types: [completed]
branches: [main]

permissions:
id-token: write # required to request the OIDC token
contents: read

jobs:
deploy:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Configure AWS credentials (OIDC)
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ secrets.AWS_DEPLOY_ROLE_ARN }}
aws-region: ${{ secrets.AWS_REGION }}

- name: Update kubeconfig for EKS
run: |
aws eks update-kubeconfig \
--name ${{ secrets.EKS_CLUSTER_NAME }} \
--region ${{ secrets.AWS_REGION }}

- name: Set short SHA from triggering workflow
run: |
echo "SHORT_SHA=$(echo ${{ github.event.workflow_run.head_sha }} | cut -c1-7)" >> $GITHUB_ENV

- name: Deploy services to EKS
run: |
for svc in auth-service gateway-service converter-service notification-service; do
deploy_name="${svc%-service}"
kubectl set image deployment/${deploy_name} \
${deploy_name}=${{ secrets.DOCKERHUB_USERNAME }}/${svc}:${{ env.SHORT_SHA }} || true
kubectl rollout status deployment/${deploy_name} --timeout=120s || true
done

- name: Verify all pods running
run: kubectl get pods -o wide
65 changes: 65 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: VidCast CI — Lint, Scan, Build, Push

on:
push:
branches: [main]
paths: ['src/**']
pull_request:
branches: [main]
paths: ['src/**']

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: '3.10'

- name: Install ruff
run: pip install ruff

- name: Lint Python services
run: ruff check src/ --exclude src/frontend

build-and-scan:
needs: lint
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
service: [auth-service, gateway-service, converter-service, notification-service]

steps:
- uses: actions/checkout@v4

- name: Set short SHA
run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_ENV

- name: Build Docker image
run: |
docker build \
-t ${{ secrets.DOCKERHUB_USERNAME }}/${{ matrix.service }}:${{ env.SHORT_SHA }} \
src/${{ matrix.service }}/

- name: Trivy vulnerability scan
uses: aquasecurity/trivy-action@master
with:
image-ref: ${{ secrets.DOCKERHUB_USERNAME }}/${{ matrix.service }}:${{ env.SHORT_SHA }}
severity: CRITICAL,HIGH
exit-code: '1'
ignore-unfixed: true
format: table

- name: Login to Docker Hub
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Push image to Docker Hub
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ matrix.service }}:${{ env.SHORT_SHA }}
64 changes: 64 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Terraform
terraform.tfvars
terraform.tfvars.json
*.tfstate
*.tfstate.*
.terraform/
.terraform.lock.hcl
tfplan
*.tfplan
crash.log

# Kubernetes secrets
**/secret.yaml
# ...except Helm chart secret *templates*, which hold no literal credentials
# (they reference values.yaml via {{ .Values.secret.* }}) and must be tracked
# so a clean `helm install` can render the Secret resource.
!Helm_charts/MongoDB/templates/secret.yaml
!Helm_charts/RabbitMQ/templates/secret.yaml
!Helm_charts/Postgres/templates/secret.yaml

# Deployment-specific files
DEPLOYMENT_CONFIG.md
DEPLOYMENT_HANDOVER.md
DEPLOYMENT_REPORT.md
SESSION_SUMMARY.md
DEPLOYMENT_PROBLEMS.md
deployment-ids.txt
customise.sh

# Build artifacts
*.mp3
!assets/video.mp4
output.*

# Python
__pycache__/
*.pyc
*.pyo
.env
venv/
*.egg-info/

# Node
node_modules/
dist/
build/
.cache/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

# Logs
*.log

# Explanation files (study material, not production)
*_EXPLAINED.md
Loading