forked from OpenClassrooms-Student-Center/Gerez-un-projet-collaboratif-en-int-grant-une-demarche-CI-CD
-
Notifications
You must be signed in to change notification settings - Fork 0
160 lines (150 loc) · 6.09 KB
/
test-frontend-backend.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
name: Test Both Frontend and Backend
on: [push]
jobs:
test-frontend:
runs-on: ubuntu-latest
defaults:
run:
working-directory: front
strategy:
matrix:
node-version: [16.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: "npm"
cache-dependency-path: front/package-lock.json
- run: npm ci
- run: npm run test -- --no-watch --no-progress --browsers=ChromeHeadless --code-coverage
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./front/coverage/bobapp/report-lcovonly.txt
analyze-frontend:
needs: test-frontend
runs-on: ubuntu-latest
defaults:
run:
working-directory: front
steps:
- uses: actions/checkout@v3
- name: Setup Node.js with caching
uses: actions/setup-node@v3
with:
node-version: 16.x
cache: "npm"
cache-dependency-path: front/package-lock.json
- run: npm ci
- name: Ensure coverage directory exists
run: mkdir -p coverage/bobapp
- name: Run tests and generate coverage report
run: npm run test -- --no-watch --no-progress --browsers=ChromeHeadless --code-coverage
- name: List coverage directory
run: ls -la coverage/bobapp
- name: Check if coverage report exists
env:
COVERAGE_REPORT_PATH: ./front/coverage/bobapp/report-lcovonly.txt
run: |
if [ ! -f "$COVERAGE_REPORT_PATH" ]; then
echo "⚠️ Warning: Coverage report not found at $COVERAGE_REPORT_PATH!"
else
echo "Coverage report found at $COVERAGE_REPORT_PATH."
fi
- name: Run Sonar analysis
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
run: npm run sonar
test-backend:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
distribution: "adopt"
java-version: 11
- name: Cache Maven packages
uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven and Run Tests
run: |
cd back
mvn clean install
- name: Test Report
uses: phoenix-actions/test-reporting@v8
if: success() || failure()
with:
name: Maven Tests
path: back/target/surefire-reports/TEST-*.xml
reporter: java-junit
analysis-backend:
needs: test-backend
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
distribution: "adopt"
java-version: 11
- name: Cache SonarQube packages
uses: actions/cache@v3
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Cache Maven packages
uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build and analyze
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
run: |
cd back
mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
build-and-push-docker-images:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
# Cette étape permet de se connecter à Docker Hub.
- name: Login to Docker Hub
if: success() # Cette condition s'assure que cette étape est exécutée uniquement si les étapes précédentes ont réussi.
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }} # Utilise le nom d'utilisateur Docker Hub stocké en tant que secret dans GitHub.
password: ${{ secrets.DOCKERHUB_TOKEN }} # Utilise le mot de passe Docker Hub stocké en tant que secret dans GitHub.
# pour débugger, on affiche le contenu du répertoire courant
- name: List directory contents
run: ls -la
# Cette étape construit l'image Docker pour le frontend et la pousse sur Docker Hub.
- name: Build and push frontend Docker image
if: success() # Cette condition s'assure que cette étape est exécutée uniquement si les étapes précédentes ont réussi.
run: |
cd front # Change le répertoire courant pour accéder au dossier 'front'.
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/bobapp_frontend:latest -f Dockerfile . # Construit l'image Docker en utilisant le Dockerfile dans le dossier 'front'.
docker push ${{ secrets.DOCKERHUB_TOKEN }}/nom_du_depot_frontend:latest # Pousse l'image construite sur Docker Hub.
# Cette étape construit l'image Docker pour le backend et la pousse sur Docker Hub.
- name: Build and push backend Docker image
if: success() # Cette condition s'assure que cette étape est exécutée uniquement si les étapes précédentes ont réussi.
run: |
cd back # Change le répertoire courant pour accéder au dossier 'back'.
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/bobapp_backend:latest -f Dockerfile . # Construit l'image Docker en utilisant le Dockerfile dans le dossier 'back'.
docker push ${{ secrets.DOCKERHUB_TOKEN }}/nom_du_depot_backend:latest # Pousse l'image construite sur Docker Hub.