Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 4 additions & 4 deletions .github/workflows/cicd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ jobs:
customHeaders: '{"Accept": "application/json", "Authorization": "Bearer ${{ secrets.RENDER_API_KEY }}"}'

- name: Sentry Release (Staging)
uses: getsentry/action-release@v1
uses: getsentry/action-release@v2
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
Expand All @@ -132,7 +132,7 @@ jobs:
environment: staging
version: ${{ github.sha }}
set_commits: auto
extra_args: --ignore-missing
ignore_missing: true


deploy-prod:
Expand All @@ -153,7 +153,7 @@ jobs:
customHeaders: '{"Accept": "application/json", "Authorization": "Bearer ${{ secrets.RENDER_API_KEY }}"}'

- name: Sentry Release (Production)
uses: getsentry/action-release@v1
uses: getsentry/action-release@v2
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
Expand All @@ -162,7 +162,7 @@ jobs:
environment: production
version: ${{ github.sha }}
set_commits: auto
extra_args: --ignore-missing
ignore_missing: true #set to true


notify:
Expand Down
46 changes: 3 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
# 🚀 FullStack DevSecOps Demo

A production-grade fullstack pipeline showcasing modern DevSecOps practices — from secure CI/CD to observability and Infrastructure-as-Code (IaC).
This project demonstrates how to take a simple Node.js/Express app and wrap it with a battle-tested DevSecOps workflow used in real companies.

---

## 🌟 Highlights

- **CI/CD Pipeline**: GitHub Actions with linting, testing, dependency audits, Docker builds, Trivy scans, Gitleaks, CodeQL, Checkov & Terrascan
- **Secure Containerization**: Hardened Dockerfiles with non-root users and HEALTHCHECK instructions
- **Runtime Security**: Gitleaks (secret scanning), CodeQL (static analysis), npm audit (dependency vulnerabilities)
Expand All @@ -20,7 +13,6 @@ This project demonstrates how to take a simple Node.js/Express app and wrap it w
- Production: auto-deploy on `main`
- **IaC Versioning**: Full `render.yaml` and Helm manifests for portability to Kubernetes (k3s, GKE, EKS)

---

## 🏗️ Architecture

Expand Down Expand Up @@ -66,24 +58,11 @@ Slack messages for staging/prod deployments with build status:

---

# 📊 Observability

## Prometheus
- Scrapes app `/metrics` endpoint (via `prom-client`)
- Collects:
- Default Node.js process metrics
- `http_requests_total` counter
- Latency histogram

🔗 **See live link here**: [Your Prometheus URL Here]

## Grafana Dashboards
Includes panels for:
- CPU %
- Memory usage
- HTTP requests/sec
- 5xx error rate
- 95th percentile latency


🔗 **See live link here**: [Your Grafana URL Here]

Expand All @@ -99,7 +78,6 @@ Includes panels for:
- Tied to GitHub Actions release versions
- Shows "Deployed to Staging/Prod" in release timeline

---


## 📸 Project in Action
Expand All @@ -118,19 +96,13 @@ Includes panels for:
### 🔔 Slack Notifications
![Slack Notifications](docs/images/SLACK-NOTIFY.png)

### 📊 Observability with Prometheus & Grafana
![Prometheus Dashboard](docs/images/Prometheus-dashh.png)



# 🐳 Docker Hardening

All service images include:
- `HEALTHCHECK` instructions
- Non-root user execution
- Minimal base images (`node:18-alpine`, `alpine:3.20`, etc.)

---

# ☸️ Kubernetes (Future-Ready)

Expand Down Expand Up @@ -176,29 +148,17 @@ Secrets managed via K8s Secret resources (Slack webhook, Grafana admin password)
├── .github/workflows/ # CI/CD pipelines
├── render.yaml # Render IaC config
└── Dockerfile # App Dockerfile
```

🎯 Why This Matters

| Feature | Benefit |
| ----------------------- | --------------------------------------------------------- |
| Full DevSecOps pipeline | Integrated security, monitoring, and alerting |
| Cloud-native ready | Helm charts → easy migration to Kubernetes |
| Production realism | Error tracking, observability, secrets mgmt, IaC scanning |
| Team collaboration | Slack notifications + Sentry releases → transparency |
| Hands-on expertise | End-to-end modern DevSecOps toolchain experience |



📬 Contact

Interested in how I can bring end-to-end DevSecOps expertise to your team? Let’s connect!

<div align="center">

**Built with ❤️ to demonstrate modern DevSecOps practices**

[![GitHub stars](https://img.shields.io/github/stars/wizzfi1/fullstack-devsecops-demo?style=social)](https://github.com/wizzfi1/fullstack-devsecops-demo)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)


</div>

Binary file added docs/images/Grafana-dashh.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/Lint test.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/Prod-url.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/Prometheus-dashh.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/Render-staging.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading