-
Notifications
You must be signed in to change notification settings - Fork 19
294 lines (259 loc) · 11.7 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
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
on:
push:
branches:
- 'master'
pull_request:
schedule:
- cron: '0 22 * * *' # run at 10 PM UTC
name: CI
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
unittest-linting:
name: unit tests and linting
strategy:
matrix:
nextcloudVersion: [ stable25, stable26, stable27, stable28 ]
phpVersion: [ 7.4, 8.0, 8.1 ]
exclude:
- nextcloudVersion: stable26
phpVersion: 7.4
- nextcloudVersion: stable27
phpVersion: 7.4
- nextcloudVersion: stable28
phpVersion: 7.4
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup PHP ${{ matrix.phpVersion }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.phpVersion }}
tools: composer, phpunit
coverage: xdebug
extensions: gd, sqlite3
- name: Get composer cache directory
id: composer-cache
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- name: Cache PHP dependencies
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: Read package.json node and npm engines version
uses: skjnldsv/read-package-engines-version-actions@v2
id: versions
with:
fallbackNode: '^14'
fallbackNpm: '^7'
- name: Setup NodeJS ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@v3
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
cache: 'npm'
- name: Setup NPM ${{ steps.versions.outputs.npmVersion }}
run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
- name: Install PHP Dependencies
run: |
composer install --no-progress --prefer-dist --optimize-autoloader
git clone --depth 1 https://github.com/nextcloud/server.git -b ${{ matrix.nextcloudVersion }}
cd server && git submodule update --init
./occ maintenance:install --admin-pass=admin
- name: PHP code analysis
run: |
if [[ ${{ matrix.nextcloudVersion }} != "stable28" ]]
then
make phpstan
fi
- name: PHP code style
run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 )
- name: Install NPM Dependencies
run: npm install
- name: JS Lint
run: npm run lint
- name: Style Lint
run: npm run stylelint
- name: PHP & Vue Unit Tests
run: |
git clone --depth 1 https://github.com/nextcloud/groupfolders.git -b ${{ matrix.nextcloudVersion }} server/apps/groupfolders
mkdir -p server/apps/integration_openproject
cp -r `ls -A | grep -v 'server'` server/apps/integration_openproject/
cd server
./occ a:e groupfolders
./occ a:e integration_openproject
cd apps/integration_openproject
make phpunit
make jsunit
- name: JS Code Coverage Summary Report
if: ${{ github.event_name == 'pull_request' && matrix.nextcloudVersion == 'stable28' && matrix.phpVersion == '8.1' }}
uses: romeovs/[email protected]
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
lcov-file: ./server/apps/integration_openproject/coverage/jest/lcov.info
delete-old-comments: true
title: "JS Code Coverage"
- name: Setup .NET Core # this is required to execute Convert PHP cobertura coverage to lcov step
if: ${{ github.event_name == 'pull_request' && matrix.nextcloudVersion == 'stable28' && matrix.phpVersion == '8.1' }}
uses: actions/setup-dotnet@v3
with:
dotnet-version: 6.0.101
dotnet-quality: 'ga'
- name: Convert PHP cobertura coverage to lcov
if: ${{ github.event_name == 'pull_request' && matrix.nextcloudVersion == 'stable28' && matrix.phpVersion == '8.1' }}
uses: danielpalme/[email protected]
with:
reports: './server/apps/integration_openproject/coverage/php/cobertura.xml' # REQUIRED # The coverage reports that should be parsed (separated by semicolon). Globbing is supported.
targetdir: './server/apps/integration_openproject/coverage/php' # REQUIRED # The directory where the generated report should be saved.
reporttypes: 'lcov' # The output formats and scope (separated by semicolon) Values: Badges, Clover, Cobertura, CsvSummary, Html, HtmlChart, HtmlInline, HtmlInline_AzurePipelines, HtmlInline_AzurePipelines_Dark, HtmlSummary, JsonSummary, Latex, LatexSummary, lcov, MarkdownSummary, MHtml, PngChart, SonarQube, TeamCitySummary, TextSummary, Xml, XmlSummary
sourcedirs: '' # Optional directories which contain the corresponding source code (separated by semicolon). The source directories are used if coverage report contains classes without path information.
historydir: '' # Optional directory for storing persistent coverage information. Can be used in future reports to show coverage evolution.
plugins: '' # Optional plugin files for custom reports or custom history storage (separated by semicolon).
assemblyfilters: '+*' # Optional list of assemblies that should be included or excluded in the report. Exclusion filters take precedence over inclusion filters. Wildcards are allowed.
classfilters: '+*' # Optional list of classes that should be included or excluded in the report. Exclusion filters take precedence over inclusion filters. Wildcards are allowed.
filefilters: '+*' # Optional list of files that should be included or excluded in the report. Exclusion filters take precedence over inclusion filters. Wildcards are allowed.
verbosity: 'Verbose' # The verbosity level of the log messages. Values: Verbose, Info, Warning, Error, Off
title: '' # Optional title.
tag: '${{ github.run_number }}_${{ github.run_id }}' # Optional tag or build version.
customSettings: '' # Optional custom settings (separated by semicolon). See: https://github.com/danielpalme/ReportGenerator/wiki/Settings.
toolpath: 'reportgeneratortool' # Default directory for installing the dotnet tool.
- name: PHP Code Coverage Summary Report
if: ${{ github.event_name == 'pull_request' && matrix.nextcloudVersion == 'stable28' && matrix.phpVersion == '8.1' }}
uses: romeovs/[email protected]
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
lcov-file: ./server/apps/integration_openproject/coverage/php/lcov.info
delete-old-comments: true
title: "PHP Code Coverage"
- name: JS coverage check
if: ${{ github.event_name == 'pull_request' && matrix.nextcloudVersion == 'stable28' && matrix.phpVersion == '8.1' }}
uses: VeryGoodOpenSource/very_good_coverage@v2
with:
min_coverage: '59'
path: './server/apps/integration_openproject/coverage/jest/lcov.info'
- name: PHP coverage check
if: ${{ github.event_name == 'pull_request' && matrix.nextcloudVersion == 'stable28' && matrix.phpVersion == '8.1' }}
uses: VeryGoodOpenSource/very_good_coverage@v2
with:
min_coverage: '56'
path: './server/apps/integration_openproject/coverage/php/lcov.info'
api-tests:
name: API tests
strategy:
matrix:
nextcloudVersion: [ stable25, stable26, stable27, stable28 ]
phpVersionMajor: [ 7, 8 ]
phpVersionMinor: [ 4, 1 ]
database: [pgsql, mysql]
exclude:
- nextcloudVersion: stable26
phpVersionMajor: 7
- phpVersionMajor: 7
phpVersionMinor: 0
- phpVersionMajor: 7
phpVersionMinor: 1
- phpVersionMajor: 8
phpVersionMinor: 4
- nextcloudVersion: stable27
phpVersionMajor: 7
- phpVersionMajor: 7
phpVersionMinor: 0
- phpVersionMajor: 7
phpVersionMinor: 1
- phpVersionMajor: 8
phpVersionMinor: 4
- nextcloudVersion: stable28
phpVersionMajor: 7
- phpVersionMajor: 7
phpVersionMinor: 0
- phpVersionMajor: 7
phpVersionMinor: 1
- phpVersionMajor: 8
phpVersionMinor: 4
runs-on: ubuntu-20.04
container:
image: ubuntu:latest
credentials:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
defaults:
run:
working-directory: integration_openproject
services:
nextcloud:
image: ghcr.io/juliushaertl/nextcloud-dev-php${{ format('{0}{1}', matrix.phpVersionMajor,matrix.phpVersionMinor) }}:20231202-1
env:
SQL: ${{ matrix.database }}
SERVER_BRANCH: ${{ matrix.nextcloudVersion }}
NEXTCLOUD_AUTOINSTALL: "YES"
NEXTCLOUD_AUTOINSTALL_APPS: "viewer activity groupfolders integration_openproject"
NEXTCLOUD_TRUSTED_DOMAINS: nextcloud
VIRTUAL_HOST: "nextcloud"
WITH_REDIS: "YES"
NEXTCLOUD_AUTOINSTALL_APPS_WAIT_TIME: 120
volumes:
- /home/runner/work/integration_openproject/integration_openproject:/var/www/html/apps-shared
database-postgres:
image: postgres:14
env:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: nextcloud
credentials:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
database-mysql:
image: mariadb:10.5
env:
MYSQL_ROOT_PASSWORD: 'nextcloud'
MYSQL_PASSWORD: 'nextcloud'
MYSQL_USER: 'nextcloud'
MYSQL_DATABASE: 'nextcloud'
credentials:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
redis:
image: redis:7
credentials:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
path: integration_openproject
- name: Checkout activity app
uses: actions/checkout@v3
with:
repository: nextcloud/activity
path: activity
ref: ${{ matrix.nextcloudVersion }}
- name: Checkout groupfolders app
uses: actions/checkout@v3
with:
repository: nextcloud/groupfolders
path: groupfolders
ref: ${{ matrix.nextcloudVersion }}
- name: Setup PHP ${{ format('{0}.{1}', matrix.phpVersionMajor,matrix.phpVersionMinor) }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ format('{0}.{1}', matrix.phpVersionMajor,matrix.phpVersionMinor) }}
tools: composer
extensions: intl
- name: Get composer cache directory
id: composer-cache
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
- name: Cache PHP dependencies
uses: actions/cache@v3
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/integration_openproject/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: API Tests
env:
NEXTCLOUD_BASE_URL: http://nextcloud
run: |
composer install --no-progress --prefer-dist --optimize-autoloader
until curl -s -f http://nextcloud/status.php | grep '"installed":true'; do echo .; sleep 10; done
make api-test