Skip to content

Use service containers #47

Use service containers

Use service containers #47

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
static-code-analysis:
name: Static Code Analysis
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.pnpm
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-
- name: Install pnpm
run: npm install -g pnpm
- name: Install dependencies
run: pnpm install
- name: Run ESLint
run: pnpm run lint
test-automation:
name: Test Automation
runs-on: ubuntu-latest
needs: static-code-analysis
services:
app:
image: node:16
ports:
- 3000:3000
options: >-
--health-cmd "curl --fail http://localhost:3000 || exit 1"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.pnpm
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-
- name: Install pnpm
run: npm install -g pnpm
- name: Install dependencies
run: pnpm install
- name: Build application
run: pnpm run build
- name: Start server
run: pnpm run start
- name: Wait for server to start
run: npx wait-on http://app:3000
- name: Run Cypress tests
run: npx cypress run --e2e
performance-testing:
name: Performance Testing
runs-on: ubuntu-latest
needs: test-automation
services:
app:
image: node:16
ports:
- 3000:3000
options: >-
--health-cmd "curl --fail http://localhost:3000 || exit 1"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.pnpm
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-
- name: Install pnpm
run: npm install -g pnpm
- name: Install dependencies
run: pnpm install
- name: Build application
run: pnpm run build
- name: Start server
run: pnpm run start
- name: Wait for server to start
run: npx wait-on http://app:3000
- name: Run k6 local test
uses: grafana/k6-action@v0.3.1
with:
filename: __tests__/performance/test.js
flags: --vus 50 --duration 10s
security-testing:
name: Security Testing
runs-on: ubuntu-latest
needs: performance-testing
services:
app:
image: node:16
ports:
- 3000:3000
options: >-
--health-cmd "curl --fail http://localhost:3000 || exit 1"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.pnpm
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '16'
- name: ZAP Full Scan
uses: zaproxy/action-full-scan@v0.10.0
with:
target: 'http://app:3000'
reporting:
name: Reporting
runs-on: ubuntu-latest
needs: [test-automation, performance-testing, security-testing]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.pnpm
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-
- name: Generate Cypress testing report
run: npx mochawesome-merge "cypress/reports/*.json" > report.json && npx marge report.json --reportFilename "testing_report" --reportTitle "Cypress Report" --reportPageTitle "Cypress Report"
- name: Upload Cypress test reports
uses: actions/upload-artifact@v3
with:
name: cypress-reports
path: mochawesome-report
- name: Upload k6 performance reports
uses: actions/upload-artifact@v3
with:
name: k6-reports
path: path/to/k6-reports
- name: Generate consolidated report
run: |
# Assuming you have a script or tool to merge different test reports
pnpm run generate-consolidated-report
- name: Upload consolidated report
uses: actions/upload-artifact@v3
with:
name: consolidated-report
path: path/to/consolidated-report
test-management:
name: Test Management
runs-on: ubuntu-latest
needs: reporting
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.pnpm
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-
- name: Upload test results to Test Management Tool
run: |
# Replace with actual commands to upload to your test management tool
curl -X POST -H "Content-Type: application/json" -d @path/to/consolidated-report.json http://test-management-tool/api/upload
deployment:
name: Deployment
runs-on: ubuntu-latest
needs: test-management
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.pnpm
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-
- name: Deploy to production
run: pnpm run deploy