Skip to content

Merge pull request #17 from prasadhonrao/feature/api-ci-cd-workflow #1

Merge pull request #17 from prasadhonrao/feature/api-ci-cd-workflow

Merge pull request #17 from prasadhonrao/feature/api-ci-cd-workflow #1

Workflow file for this run

name: API - End-to-End Workflow
on:
push:
branches:
- main
paths:
- 'api/**'
pull_request:
branches:
- main
paths:
- 'api/**'
workflow_dispatch:
env:
DOCKER_IMAGE: prasadhonrao/devcamper-api
jobs:
lint:
runs-on: ubuntu-latest
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 linter
run: |
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: 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
build:
runs-on: ubuntu-latest
needs: code-coverage
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:
runs-on: ubuntu-latest
needs: build
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: Deploy
run: |
# Add your deployment steps here
echo "Deploying the application..."