-
Notifications
You must be signed in to change notification settings - Fork 1
/
.gitlab-ci.yml
141 lines (126 loc) · 4.49 KB
/
.gitlab-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
image: node:latest
stages: # Les étapes associées au projet.
- lint # Pour la vérification statique du code
- test # Test de l'application
- deploy # Deploiement
# Pas de stage "build", il est réalisé directement sur scalingo
variables:
npm_config_cache: '$CI_PROJECT_DIR/.npm'
CYPRESS_RECORD_KEY: $CYPRESS_RECORD_KEY
CYPRESS_CACHE_FOLDER: '$CI_PROJECT_DIR/cache/Cypress'
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- cache/Cypress/
- node_modules/ # Cache des dépendances
- apps/api/node_modules/
- apps/wolfo/node_modules/
- apps/database/node_modules/
- .pnpm-store/ # Moves pnpm cache inside project per GitLab restrictions
policy: pull
before_script:
- npm i -g pnpm
- pnpm config set store-dir .pnpm-store
install:
stage: .pre
cache:
- key: ${CI_COMMIT_REF_SLUG}
paths:
- cache/Cypress/
- node_modules/
- apps/api/node_modules/
- apps/wolfo/node_modules/
- apps/database/node_modules/
- .pnpm-store/
when: on_success
policy: pull-push
script:
- pnpm install --frozen-lockfile
artifacts:
paths:
lint: # Vérification de la qualité du code javascript
stage: lint # Pas de lint css et html parce que c'est le code donné par le prof et j'ai pas à corriger son code
script:
- pnpm lint # vérifie la qualité du code javascript (js/*.js) et typescript (src/*.ts) + écrit le rapport dans lintes_report.txt
# turborepo va se charger de faire le lint dans les api/, wolfo/ et database/
test-backend:
services:
- postgres:12
variables:
npm_config_cache: '$CI_PROJECT_DIR/.npm'
POSTGRES_USER: $POSTGRES_USER
POSTGRES_PASSWORD: $POSTGRES_PASSWORD
POSTGRES_DB: $POSTGRES_DB
POSTGRES_HOST_AUTH_METHOD: trust
stage: test
script:
- pnpm db:push # push les migrations dans la base de données
- pnpm db:generate
- cd apps/api
- pnpm test:backend # lance le test jest
artifacts:
paths:
- apps/api/coverage/
#test-frontend:
# #image: cypress/base:16.18.1
# services:
# - postgres:12
# variables:
# npm_config_cache: '$CI_PROJECT_DIR/.npm'
# POSTGRES_USER: $POSTGRES_USER
# POSTGRES_PASSWORD: $POSTGRES_PASSWORD
# POSTGRES_DB: $POSTGRES_DB
# POSTGRES_HOST_AUTH_METHOD: trust
# stage: test
# parallel: 2 # Uses 2 parallel instances
# script:
# - pnpm db:push
# - pnpm dev > /dev/null 2>&1 & # lance l'api en mode dev
# - cd apps/wolfo
# - pnpm web &
## - npx wait-on 'http-get://localhost:19000'
# - curl -s http://localhost:19000
# - npx wait-on 'http-get://localhost:19000'
# - npx cypress run --record --parallel # lance l'app en mode dev
badges:
stage: deploy
needs: [test-backend] # Les badges dépendent de la vérification de la qualité du code
script:
- scripts/badges.sh # Génère les badges de qualité de code
- cd apps/api/
- pnpm exec jest-coverage-badges # Génère les badges de couverture de code
when: always # On veut toujours générer les badges
artifacts:
paths:
- apps/api/coverage/
pages:
stage: deploy
variables:
GIT_DEPTH: 0
needs: [badges]
script:
- mkdir public/
- mv apps/api/coverage/* public/ # Copie les badges et le report dans public
- mv docs/diagrams public/
- ls -l public/
artifacts:
paths:
- public
scalingo:
stage: deploy
variables:
# SCALINGO_API_TOKEN # variable à ne pas définir en clair ici (cf instructions à la fin du .gitlab-ci.yml ci-dessous)
SCALINGO_APP_NAME: wolfo-backend # le nom de votre appli chez scalingo
SCALINGO_REGION: osc-fr1 # l'instance de scalingo sur laquelle votre appli est déployée
PROJECT_DIR: apps/api
GIT_DEPTH: 0
image: ruby:3.1.3 # car dpl est codé en Ruby
before_script: []
script:
- gem install dpl --pre # gem est le gestionnaire de paquets pour Ruby
- curl -O https://cli-dl.scalingo.com/install && bash install # scalingo CLI est installé
- scalingo --app=$SCALINGO_APP_NAME env-set PROJECT_DIR=$PROJECT_DIR # Pour indiquer sur le dépôt distant où est le backend (s'il est à la racine du projet ceci est facultatif, et il est possible de le faire une fois pour toute directement dans l'interface web de scalingo)
- dpl --provider=scalingo --app=$SCALINGO_APP_NAME --api-token=$SCALINGO_API_TOKEN --region=$SCALINGO_REGION --branch=refs/heads/main
when: always
rules:
- if: $CI_COMMIT_BRANCH == "scalingo"