-
Notifications
You must be signed in to change notification settings - Fork 0
197 lines (160 loc) · 6.13 KB
/
ci.yml
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
name: CI # Nom de l'action
on: # Déclencheur de l'action
push: # Déclencheur de l'action lors d'un push
branches: [test] # Déclencheur de l'action lors d'un push sur la branche test
env: # Variables d'environnement declarées dans la vm de l'action
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} # les secrets sont des variables d'environnement sous forme de secrets stockées dans le répertoire secrets du repo sur github
DOCKER_HUB_ACCESS_TOKEN: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
DB_USER_PASS: ${{ secrets.DB_USER_PASS }}
REACT_APP_URL_API: ${{ vars.REACT_APP_LOCAL_URL_API }} # les vars sont des variables d'environnement stockées dans le répertoire vars du repo sur github
jobs: # Jobs de l'action
Jest-tests: # Job de l'action pour les tests Jest
runs-on: ubuntu-latest # Système d'exploitation de la vm
steps: # Etapes du job
- name: Checkout code # Prendre le code du repot en contexte
uses: actions/checkout@v2 # use permet d'utiliser une action déjà existante (ici checkout@v2)
- name: Use Node.js # Installation de Node.js
uses: actions/setup-node@v2
with: # with permet de passer des paramètres à l'action
node-version: 20
- name: Install front dependencies # Installation des dépendances front
run: | # run permet d'exécuter des commandes dans la vm
cd client
npm ci
- name: Install back dependencies # Installation des dépendances back
run: |
cd server
npm ci
- name: Create rapports directory if not exists # Creation du dossier rapports pour les tests front s'il n'existe pas
run: mkdir -p rapports
working-directory: server # working-directory permet de changer le répertoire de travail
- name: Create rapports directory if not exists # Creation du dossier rapports pour les tests back s'il n'existe pas
run: mkdir -p rapports
working-directory: client
- name: Run back Jest tests # execution des tests Jest du backend
run: |
cd server
npm test
mv ./test-report.html ./back-jest-report.html
# - name: run back server # execution du serveur backend afin de pouvoir executer l'ensemble des tests du front
# run: |
# cd server
# npm run watch &
- name: Run front Jest tests # execution des tests Jest du frontend
run: |
cd client
npm test
mv ./test-report.html ./front-jest-report.html
- name: Upload reports # Upload des rapports de tests (les tests tournant sur une vm, les rapports sont uploadés pour consultation car ils ne sont pas accessibles directement sur la vm)
uses: actions/upload-artifact@v3
with:
name: jest reports
path: | # path permet de spécifier le chemin des fichiers à uploader
./client/front-jest-report.html
./server/back-jest-report.html
Eslint-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: 20
- name: Install front dependencies
run: |
npm ci
working-directory: client
- name: Install back dependencies
run: |
npm ci
working-directory: server
- name: Where am i
run: |
pwd
ls
- name: Where am i server
run: |
pwd
ls -la
working-directory: server
- name: Where am i client
run: |
pwd
ls -la
working-directory: client
- name: Create eslint directory if not exists
run: mkdir -p eslint
working-directory: server
- name: Create eslint directory if not exists
run: mkdir -p eslint
working-directory: client
- name: Run front Eslint test
run: |
npm run lint || true
working-directory: client
- name: Run back Eslint test
run: |
npm run lint || true
working-directory: server
- name: Eslint reports
uses: actions/upload-artifact@v3
with:
name: eslint reports
path: |
client/eslint-report.html
server/eslint-report.html
build-and-push:
needs: [Jest-tests, Eslint-test]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: 20
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
- name: Install front dependencies
run: |
cd client
npm install
- name: Create .env files
run: |
echo "DB_USER_PASS=${{ secrets.DB_USER_PASS }}" > ./server/config/.env
cat ./server/config/.env
echo "REACT_APP_URL_API=${{ secrets.REACT_APP_URL_API }}" > ./client/.env
cat ./client/.env
- name: Build front
if: ${{ success() }}
env:
REACT_APP_URL_API: ${{ secrets.REACT_APP_URL_API }}
run: |
cd client
npm run build
- name: Build and push front
uses: docker/build-push-action@v2
env:
REACT_APP_URL_API: ${{ secrets.REACT_APP_URL_API }}
with:
context: ./client/
file: ./client/Dockerfile
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ vars.DOCKER_FRONT }}:${{ vars.DOCKER_FRONT_VERSION }}
- name: Build and push back
uses: docker/build-push-action@v2
env:
DB_USER_PASS: ${{ secrets.DB_USER_PASS }}
with:
context: ./server/
file: ./server/Dockerfile
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/${{ vars.DOCKER_BACK }}:${{ vars.DOCKER_BACK_VERSION }}