Skip to content

Commit

Permalink
Merge pull request prasadhonrao#41 from prasadhonrao/development
Browse files Browse the repository at this point in the history
Separate CI / CD Workflows and Send Email notification in CD
  • Loading branch information
prasadhonrao authored Sep 16, 2024
2 parents 9629ff5 + 50f79ea commit 43faeb9
Show file tree
Hide file tree
Showing 7 changed files with 174 additions and 342 deletions.
41 changes: 0 additions & 41 deletions .github/workflows/api-build.yml

This file was deleted.

73 changes: 63 additions & 10 deletions .github/workflows/api-cd.yml
Original file line number Diff line number Diff line change
@@ -1,31 +1,84 @@
name: API - Continuous Deployment

on:
workflow_run:
workflows: ['API - Continuous Integration']
types:
- completed
push:
branches:
- main
paths:
- 'api/**'
workflow_dispatch:

env:
DOCKER_IMAGE: prasadhonrao/devcamper-api

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

- name: Log in to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build and push Docker image
run: |
docker build -t ${{ env.DOCKER_IMAGE }}:${{ github.sha }} -f api/Dockerfile api
docker tag ${{ env.DOCKER_IMAGE }}:${{ github.sha }} ${{ env.DOCKER_IMAGE }}:latest
docker push ${{ env.DOCKER_IMAGE }}:${{ github.sha }}
docker push ${{ env.DOCKER_IMAGE }}:latest
deploy:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
needs: build

steps:
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v2
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install dependencies
run: |
cd api
npm install
run: npm install --prefix api

- name: Deploy
run: |
# Add your deployment steps here
echo "Deploying the application..."
notify:
runs-on: ubuntu-latest
needs: deploy
if: always()

steps:
- name: Send email notification
uses: dawidd6/action-send-mail@v3
with:
server_address: smtp.gmail.com
server_port: 587
username: ${{ secrets.GMAIL_USERNAME }}
password: ${{ secrets.GMAIL_PASSWORD }}
subject: ${{ job.status }}: Deployment Notification
body: |
The deployment has ${{ job.status }}!
Repository: ${{ github.repository }}
Branch: ${{ github.ref }}
Commit: ${{ github.sha }}
Author: ${{ github.actor }}
Workflow: ${{ github.workflow }}
Job: ${{ github.job }}
Run ID: ${{ github.run_id }}
Run Number: ${{ github.run_number }}
Logs: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
to: ${{ secrets.NOTIFY_EMAIL }}
from: ${{ secrets.GMAIL_USERNAME }}
123 changes: 111 additions & 12 deletions .github/workflows/api-ci.yml
Original file line number Diff line number Diff line change
@@ -1,30 +1,129 @@
name: API - Continuous Integration

on:
workflow_run:
workflows: ['API - Security Checks']
types:
- completed
push:
branches:
- development
paths:
- 'api/**'
pull_request:
branches:
- development
paths:
- 'api/**'
workflow_dispatch:

jobs:
build-and-test:
lint:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v2
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install dependencies
run: npm install --prefix api

- name: Run linter
run: |
cd api
npm install
export PATH=$(pwd)/api/node_modules/.bin:$PATH
npm run lint --prefix api
dependency-check:
runs-on: ubuntu-latest
needs: lint

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install dependencies
run: npm install --prefix api

- name: Run dependency check
run: npm audit --audit-level=high --prefix api

security:
runs-on: ubuntu-latest
needs: dependency-check
permissions:
actions: read
contents: read
security-events: write

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install dependencies
run: npm install --prefix api

- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: javascript

- name: Autobuild
uses: github/codeql-action/autobuild@v2

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2

test:
runs-on: ubuntu-latest
needs: security

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install dependencies
run: npm install --prefix api

- name: Run tests
run: |
cd api
npm test
run: npm test --prefix api

code-coverage:
runs-on: ubuntu-latest
needs: test

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install dependencies
run: npm install --prefix api

- name: Run tests with coverage
run: npm run test --prefix api -- --coverage

- name: Upload coverage report
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: api/coverage
35 changes: 0 additions & 35 deletions .github/workflows/api-deploy.yml

This file was deleted.

37 changes: 0 additions & 37 deletions .github/workflows/api-lint.yml

This file was deleted.

30 changes: 0 additions & 30 deletions .github/workflows/api-security.yml

This file was deleted.

Loading

0 comments on commit 43faeb9

Please sign in to comment.