-
Notifications
You must be signed in to change notification settings - Fork 1
131 lines (106 loc) · 3.28 KB
/
Copy pathci.yml
File metadata and controls
131 lines (106 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: CI/CD Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
test-server:
name: Test Server
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
cache-dependency-path: server/package-lock.json
- name: Install dependencies
working-directory: ./server
run: npm ci
- name: Run linter
working-directory: ./server
run: npm run lint --if-present
- name: Run tests
working-directory: ./server
run: npm test --if-present
- name: Build
working-directory: ./server
run: npm run build
test-client:
name: Test Client
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
cache-dependency-path: client/package-lock.json
- name: Install dependencies
working-directory: ./client
run: npm ci
- name: Run linter
working-directory: ./client
run: npm run lint --if-present
- name: Run tests
working-directory: ./client
run: npm test --if-present
- name: Build
working-directory: ./client
run: npm run build
build-and-push:
name: Build and Push Docker Images
needs: [test-server, test-client]
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Build and push server image
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile.server
push: true
tags: |
${{ secrets.DOCKER_HUB_USERNAME }}/gdsc-meet-server:latest
${{ secrets.DOCKER_HUB_USERNAME }}/gdsc-meet-server:${{ github.sha }}
cache-from: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/gdsc-meet-server:latest
cache-to: type=inline
- name: Build and push client image
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile.client
push: true
tags: |
${{ secrets.DOCKER_HUB_USERNAME }}/gdsc-meet-client:latest
${{ secrets.DOCKER_HUB_USERNAME }}/gdsc-meet-client:${{ github.sha }}
cache-from: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/gdsc-meet-client:latest
cache-to: type=inline
deploy:
name: Deploy to Kubernetes
needs: [build-and-push]
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3
- name: Configure kubectl
uses: azure/k8s-set-context@v3
with:
method: kubeconfig
kubeconfig: ${{ secrets.KUBE_CONFIG }}
- name: Deploy to Kubernetes
run: |
kubectl apply -f k8s/
kubectl rollout status deployment/gdsc-meet-server
kubectl rollout status deployment/gdsc-meet-client