Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 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
c36b319
Merge pull request #2 from johnnybabs/fix/unbuffered-audit-logs
johnnybabs Jun 3, 2026
1fbd943
docs: comprehensive end-to-end project guide (PROJECT_GUIDE.md)
johnnybabs Jun 3, 2026
e4d2669
docs: add docs index + getting-started guide; scrub secrets; clean up…
johnnybabs Jun 4, 2026
ff90962
Remove note on T-type instances from README
johnnybabs Jun 5, 2026
6147e98
Update PROJECT_GUIDE.md
johnnybabs Jun 5, 2026
3113213
feat(A10): Kustomize overlays — base + dev/prod structure
johnnybabs Jun 9, 2026
e22f889
feat(A9): External Secrets Operator — IRSA + Parameter Store + Cluste…
johnnybabs Jun 9, 2026
c3d220f
feat(A4): gunicorn production server for auth + gateway
johnnybabs Jun 9, 2026
ae7be4a
feat(A1): transactional outbox — relay deployment + gateway outbox wr…
johnnybabs Jun 9, 2026
0a2ae28
feat(A3): retry/DLQ topology — bounded retries + dead-letter queue pe…
johnnybabs Jun 9, 2026
7df3d67
feat(A2): idempotent consumers — Redis claim-once with release-on-retry
johnnybabs Jun 9, 2026
541201c
feat(A7): KEDA scale-to-zero converter + HPA gateway
johnnybabs Jun 9, 2026
25d7af2
feat(A6): NetworkPolicy default-deny + per-service allow rules
johnnybabs Jun 9, 2026
288713d
feat(B1): Argo CD GitOps — auto-sync dev, manual-sync prod
johnnybabs Jun 9, 2026
2d3c136
feat(B2): Kyverno policy-as-code — 7 ClusterPolicies in Audit mode
johnnybabs Jun 9, 2026
4bbdb6e
feat(B4): SLO burn-rate alerting + M-2 metrics fix
johnnybabs Jun 9, 2026
760fdfd
feat(A8): supply chain — ECR hardening + SBOM/cosign identity
johnnybabs Jun 9, 2026
cf31693
feat(B5): cosign verification — Kyverno verify-images + Sigstore egress
johnnybabs Jun 9, 2026
1768bb4
feat(B3): Kubecost FinOps dashboard
johnnybabs Jun 9, 2026
d511473
chore: gap-fix — seccomp, image pins, datastore resource declarations…
johnnybabs Jun 9, 2026
d009cd3
docs: deployment handover, MANAGED_SERVICES, _EXPLAINED companions, R…
johnnybabs Jun 9, 2026
c9ad005
ci: add outbox-relay to build matrix
johnnybabs Jun 9, 2026
f9affe4
docs: PR description for phase-up branch
johnnybabs Jun 9, 2026
6531b02
fix: update repo references after rename to johnnybabs/vidcast
johnnybabs Jun 9, 2026
65f2f57
Merge pull request #3 from johnnybabs/feature/phase-up-sprint-1-4
johnnybabs Jun 9, 2026
653de4c
chore: update overlay image tags to 65f2f57
johnnybabs Jun 9, 2026
1f69a18
chore: gitignore CLAUDE.md & PR_DESCRIPTION.md; move docs into docs/
johnnybabs Jun 9, 2026
6b9f8ad
fix: disable enableServiceLinks on converter/notification to prevent …
johnnybabs Jun 9, 2026
73aeadd
fix: pin outbox-relay to existing tag 65f2f57 (e4d2669 placeholder wa…
johnnybabs Jun 9, 2026
8d97fbf
fix: monitoring embedding, PromQL parse bug, emptyDir storage, Kubeco…
johnnybabs Jun 9, 2026
fa7b8a6
Merge branch 'main' into feature/phase-up-sprint-1-4
johnnybabs Jun 9, 2026
e290383
Merge pull request #4 from johnnybabs/feature/phase-up-sprint-1-4
johnnybabs Jun 9, 2026
700e753
fix: bump notification-service to 65f2f57 (was stale 16f49a0)
johnnybabs Jun 9, 2026
c113869
fix: allow Prometheus to scrape consumers (:9000) and rabbitmq (:1569…
johnnybabs Jun 9, 2026
6eb217c
feat(frontend): accept VITE_GRAFANA_URL as a build arg
johnnybabs Jun 9, 2026
6a1061b
chore(frontend): deploy 6eb217c (VITE_GRAFANA_URL baked to node Grafa…
johnnybabs Jun 9, 2026
2004111
fix(netpol): allow kyverno egress to IMDS :80 for private-ECR image v…
johnnybabs Jun 9, 2026
be28ee6
docs: PROJECT_GUIDE.md — comprehensive project walkthrough
johnnybabs Jun 10, 2026
d6787fa
docs: DEPLOYMENT_GUIDE.md — newcomer deployment guide
johnnybabs Jun 10, 2026
16f469d
feat: deploy.sh + customise.sh; keep DB secrets out of tracked files
johnnybabs Jun 10, 2026
ed6a6ce
chore: scrub personal identifiers from tracked docs
johnnybabs Jun 10, 2026
bac559d
fix(postgres): enforce passwords with scram-sha-256 (close H-2)
johnnybabs Jun 10, 2026
641c8c1
feat(durability): EBS CSI addon, Postgres PVC, S3 backup CronJobs, DR…
johnnybabs Jun 10, 2026
def116a
Merge pull request #5 from johnnybabs/feature/improvement-sprint-1-du…
johnnybabs Jun 10, 2026
dc22c28
fix(backup): NetworkPolicy egress + MongoDB credential correction
johnnybabs Jun 10, 2026
f3b235a
feat(ingress): ALB Ingress + TLS, NodePort→ClusterIP perimeter hardening
johnnybabs Jun 10, 2026
7d86cf2
Merge pull request #6 from johnnybabs/feature/phase-up-sprint-1-4
johnnybabs Jun 10, 2026
3397772
feat(observability): structured JSON logging, correlation IDs, downlo…
johnnybabs Jun 11, 2026
977312a
fix(observability): complete Sprint 3 — util.py correlation_id + emai…
johnnybabs Jun 11, 2026
859b83b
feat(ux): display name, improved email, status tracking, downloads ca…
johnnybabs Jun 11, 2026
28ff498
Merge pull request #10 from johnnybabs/feature/improvement-sprint-4-u…
johnnybabs Jun 11, 2026
7bb4868
feat(batch): multi-file upload, batch status tracking, summary email,…
johnnybabs Jun 11, 2026
8417c83
Merge pull request #11 from johnnybabs/feature/improvement-sprint-5-b…
johnnybabs Jun 11, 2026
14a4592
Merge pull request #12 from johnnybabs/feature/improvement-sprint-4-u…
johnnybabs Jun 11, 2026
af48e27
Merge pull request #13 from johnnybabs/feature/improvement-sprint-2-i…
johnnybabs Jun 11, 2026
41c97d5
Merge pull request #14 from johnnybabs/feature/improvement-sprint-3-o…
johnnybabs Jun 11, 2026
5c07a16
chore: trim AI-styled comments to read as human-written engineering
johnnybabs Jun 11, 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, outbox-relay]

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 }}
75 changes: 75 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# 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_GUIDE.md is now a tracked runbook + newcomer guide (no secrets;
# secrets live in DEPLOYMENT_CONFIG.md / Parameter Store).
DEPLOYMENT_REPORT.md
SESSION_SUMMARY.md
DEPLOYMENT_PROBLEMS.md
deployment-ids.txt
# customise.sh is now tracked: it auto-detects identity and reads new values from
# env vars, so it contains no secrets or personal data (it just repoints the repo
# to your Docker Hub / AWS / GitHub for a fork).

# Local session artifacts / working notes (may contain account IDs, IPs, secrets).
# Keep on disk, never commit.
[0-9][0-9]_[0-9][0-9]_[0-9][0-9]_*.md
FRONTEND_IMPROVEMENTS.md
VIDCAST_PLAIN_ENGLISH_GUIDE.md
CLAUDE.md
PR_DESCRIPTION.md

# 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