Skip to content

Commit 5a8e917

Browse files
committed
[WIP] Azure: Publish code coverage results
* Add an Azure Publish Code Coverage Results task * Add `make gcovr-html` to generate a gcovr test coverage report in HTML * Add `make gcovr-xml` to generate a gcovr test coverage report in XML * Remove `test` target dependency from `make lcov-html`; Run the two targets together instead: `make test lcov-html`. Re: #4739 (comment) See: https://externals.io/message/107113, https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/test/publish-code-coverage-results?view=azure-devops, and #4759.
1 parent f2e8851 commit 5a8e917

File tree

5 files changed

+173
-82
lines changed

5 files changed

+173
-82
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@ tmp-php.ini
249249
# ------------------------------------------------------------------------------
250250
*.gcda
251251
*.gcno
252+
/gcovr.xml
253+
/gcovr_html/
252254
/lcov_html/
253255
/php_lcov.info
254256

azure-pipelines.yml

Lines changed: 68 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -16,69 +16,73 @@ jobs:
1616
parameters:
1717
configurationName: DEBUG_NTS
1818
configurationParameters: '--enable-debug --disable-maintainer-zts'
19-
- template: azure/job.yml
20-
parameters:
21-
configurationName: RELEASE_ZTS
22-
configurationParameters: '--disable-debug --enable-maintainer-zts'
23-
- template: azure/i386/job.yml
24-
parameters:
25-
configurationName: I386_DEBUG_ZTS
26-
configurationParameters: '--enable-debug --enable-maintainer-zts'
27-
- template: azure/macos/job.yml
19+
# - template: azure/job.yml
20+
# parameters:
21+
# configurationName: RELEASE_ZTS
22+
# configurationParameters: '--disable-debug --enable-maintainer-zts'
23+
- template: azure/coverage_job.yml
2824
parameters:
29-
configurationName: MACOS_DEBUG_NTS
25+
configurationName: COVERAGE
3026
configurationParameters: '--enable-debug --disable-maintainer-zts'
31-
- ${{ if eq(variables['Build.Reason'], 'Schedule') }}:
32-
- template: azure/job.yml
33-
parameters:
34-
configurationName: DEBUG_ZTS
35-
configurationParameters: '--enable-debug --enable-maintainer-zts'
36-
- template: azure/job.yml
37-
parameters:
38-
configurationName: RELEASE_NTS
39-
configurationParameters: '--disable-debug --disable-maintainer-zts'
40-
- template: azure/i386/job.yml
41-
parameters:
42-
configurationName: I386_DEBUG_NTS
43-
configurationParameters: '--enable-debug --disable-maintainer-zts'
44-
- template: azure/i386/job.yml
45-
parameters:
46-
configurationName: I386_RELEASE_NTS
47-
configurationParameters: '--disable-debug --disable-maintainer-zts'
48-
- template: azure/i386/job.yml
49-
parameters:
50-
configurationName: I386_RELEASE_ZTS
51-
configurationParameters: '--disable-debug --enable-maintainer-zts'
52-
- template: azure/macos/job.yml
53-
parameters:
54-
configurationName: MACOS_DEBUG_ZTS
55-
configurationParameters: '--enable-debug --enable-maintainer-zts'
56-
- template: azure/macos/job.yml
57-
parameters:
58-
configurationName: MACOS_RELEASE_NTS
59-
configurationParameters: '--disable-debug --disable-maintainer-zts'
60-
- template: azure/macos/job.yml
61-
parameters:
62-
configurationName: MACOS_RELEASE_ZTS
63-
configurationParameters: '--disable-debug --enable-maintainer-zts'
64-
- template: azure/job.yml
65-
parameters:
66-
configurationName: DEBUG_ZTS_ASAN_UBSAN
67-
configurationParameters: >-
68-
--enable-debug --enable-maintainer-zts
69-
CFLAGS='-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC'
70-
LDFLAGS='-fsanitize=undefined,address'
71-
runTestsParameters: --asan
72-
timeoutInMinutes: 120
73-
- template: azure/msan_job.yml
74-
parameters:
75-
configurationName: DEBUG_ZTS_MSAN
76-
configurationParameters: '--enable-debug --enable-maintainer-zts'
77-
runTestsParameters: --asan
78-
- template: azure/community_job.yml
79-
parameters:
80-
configurationName: COMMUNITY
81-
configurationParameters: >-
82-
--enable-debug --enable-maintainer-zts
83-
CFLAGS='-fsanitize=undefined,address -fno-sanitize-recover -DZEND_TRACK_ARENA_ALLOC'
84-
LDFLAGS='-fsanitize=undefined,address'
27+
# - template: azure/i386/job.yml
28+
# parameters:
29+
# configurationName: I386_DEBUG_ZTS
30+
# configurationParameters: '--enable-debug --enable-maintainer-zts'
31+
# - template: azure/macos/job.yml
32+
# parameters:
33+
# configurationName: MACOS_DEBUG_NTS
34+
# configurationParameters: '--enable-debug --disable-maintainer-zts'
35+
# - ${{ if eq(variables['Build.Reason'], 'Schedule') }}:
36+
# - template: azure/job.yml
37+
# parameters:
38+
# configurationName: DEBUG_ZTS
39+
# configurationParameters: '--enable-debug --enable-maintainer-zts'
40+
# - template: azure/job.yml
41+
# parameters:
42+
# configurationName: RELEASE_NTS
43+
# configurationParameters: '--disable-debug --disable-maintainer-zts'
44+
# - template: azure/i386/job.yml
45+
# parameters:
46+
# configurationName: I386_DEBUG_NTS
47+
# configurationParameters: '--enable-debug --disable-maintainer-zts'
48+
# - template: azure/i386/job.yml
49+
# parameters:
50+
# configurationName: I386_RELEASE_NTS
51+
# configurationParameters: '--disable-debug --disable-maintainer-zts'
52+
# - template: azure/i386/job.yml
53+
# parameters:
54+
# configurationName: I386_RELEASE_ZTS
55+
# configurationParameters: '--disable-debug --enable-maintainer-zts'
56+
# - template: azure/macos/job.yml
57+
# parameters:
58+
# configurationName: MACOS_DEBUG_ZTS
59+
# configurationParameters: '--enable-debug --enable-maintainer-zts'
60+
# - template: azure/macos/job.yml
61+
# parameters:
62+
# configurationName: MACOS_RELEASE_NTS
63+
# configurationParameters: '--disable-debug --disable-maintainer-zts'
64+
# - template: azure/macos/job.yml
65+
# parameters:
66+
# configurationName: MACOS_RELEASE_ZTS
67+
# configurationParameters: '--disable-debug --enable-maintainer-zts'
68+
# - template: azure/job.yml
69+
# parameters:
70+
# configurationName: DEBUG_ZTS_ASAN_UBSAN
71+
# configurationParameters: >-
72+
# --enable-debug --enable-maintainer-zts
73+
# CFLAGS='-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC'
74+
# LDFLAGS='-fsanitize=undefined,address'
75+
# runTestsParameters: --asan
76+
# timeoutInMinutes: 120
77+
# - template: azure/msan_job.yml
78+
# parameters:
79+
# configurationName: DEBUG_ZTS_MSAN
80+
# configurationParameters: '--enable-debug --enable-maintainer-zts'
81+
# runTestsParameters: --asan
82+
# - template: azure/community_job.yml
83+
# parameters:
84+
# configurationName: COMMUNITY
85+
# configurationParameters: >-
86+
# --enable-debug --enable-maintainer-zts
87+
# CFLAGS='-fsanitize=undefined,address -fno-sanitize-recover -DZEND_TRACK_ARENA_ALLOC'
88+
# LDFLAGS='-fsanitize=undefined,address'

azure/apt.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,6 @@ steps:
3434
postgresql \
3535
postgresql-contrib \
3636
llvm \
37+
lcov \
3738
${{ parameters.packages }}
3839
displayName: 'APT'

azure/coverage_job.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
parameters:
2+
configurationName: ''
3+
configurationParameters: ''
4+
runTestsParameters: ''
5+
timeoutInMinutes: 60
6+
7+
jobs:
8+
- job: ${{ parameters.configurationName }}
9+
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
10+
pool:
11+
vmImage: 'ubuntu-latest'
12+
steps:
13+
- template: apt.yml
14+
- script: |
15+
sudo -H pip install gcovr
16+
displayName: 'Install gcovr'
17+
- template: configure.yml
18+
parameters:
19+
configurationParameters: --enable-gcov ${{ parameters.configurationParameters }}
20+
- script: make -j$(/usr/bin/nproc) >/dev/null
21+
displayName: 'Make Build'
22+
- script: |
23+
sudo make install
24+
sudo mkdir /etc/php.d
25+
sudo chmod 777 /etc/php.d
26+
echo mysqli.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/mysqli.ini
27+
echo pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/pdo_mysql.ini
28+
echo opcache.enable_cli=1 >> /etc/php.d/opcache.ini
29+
echo opcache.protect_memory=1 >> /etc/php.d/opcache.ini
30+
displayName: 'Install Build'
31+
- script: |
32+
mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS test"
33+
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
34+
sudo -u postgres psql -c "CREATE DATABASE test;"
35+
displayName: 'Setup'
36+
- template: test.yml
37+
parameters:
38+
configurationName: ${{ parameters.configurationName }}
39+
runTestsParameters: ${{ parameters.runTestsParameters }}
40+
- script: |
41+
rm -f coverage.xml | true
42+
gcovr -sr . -o coverage.xml --xml \
43+
--exclude-directories 'ext/date/lib$$' \
44+
-e 'ext/bcmath/libbcmath/.*' \
45+
-e 'ext/date/lib/.*' \
46+
-e 'ext/fileinfo/libmagic/.*' \
47+
-e 'ext/gd/libgd/.*' \
48+
-e 'ext/hash/sha3/.*' \
49+
-e 'ext/mbstring/libmbfl/.*' \
50+
-e 'ext/opcache/jit/libudis86/.*' \
51+
-e 'ext/pcre/pcre2lib/.*' \
52+
-e 'ext/xmlrpc/libxmlrpc/.*'
53+
displayName: 'Generate {{ parameters.configurationName }} ${{ parameters.runTestsName }} Test Coverage'
54+
condition: or(succeeded(), failed())
55+
- task: PublishCodeCoverageResults@1
56+
inputs:
57+
codeCoverageTool: 'Cobertura'
58+
summaryFileLocation: coverage.xml
59+
displayName: 'Publish ${{ parameters.configurationName }} ${{ parameters.runTestsName }} Test Coverage'
60+
condition: or(succeeded(), failed())

build/Makefile.gcov

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,59 @@
11
#
2-
# LCOV
2+
# GCOV
33
#
44

5-
lcov: lcov-html
5+
LCOV_EXCLUDES = \
6+
'$(top_srcdir)/ext/bcmath/libbcmath/*' \
7+
'$(top_srcdir)/ext/date/lib/*' \
8+
'$(top_srcdir)/ext/fileinfo/libmagic/*' \
9+
'$(top_srcdir)/ext/gd/libgd/*' \
10+
'$(top_srcdir)/ext/hash/sha3/*' \
11+
'$(top_srcdir)/ext/mbstring/libmbfl/*' \
12+
'$(top_srcdir)/ext/opcache/jit/libudis86/*' \
13+
'$(top_srcdir)/ext/pcre/pcre2lib/*' \
14+
'$(top_srcdir)/ext/xmlrpc/libxmlrpc/*'
615

7-
lcov-test: lcov-clean-data test
16+
GCOVR_EXCLUDES = \
17+
'ext/bcmath/libbcmath/.*' \
18+
'ext/date/lib/.*' \
19+
'ext/fileinfo/libmagic/.*' \
20+
'ext/gd/libgd/.*' \
21+
'ext/hash/sha3/.*' \
22+
'ext/mbstring/libmbfl/.*' \
23+
'ext/opcache/jit/libudis86/.*' \
24+
'ext/pcre/pcre2lib/.*' \
25+
'ext/xmlrpc/libxmlrpc/.*'
826

9-
php_lcov.info: lcov-test
27+
php_lcov.info:
1028
@echo "Generating lcov data for $@"
11-
@$(LTP) --capture --no-external --directory . --output-file $@
29+
$(LTP) --capture --no-external --directory . --output-file $@
1230
@echo "Stripping bundled libraries from $@"
13-
@$(LTP) --remove $@ \
14-
'*/<stdout>' \
15-
'$(top_srcdir)/ext/bcmath/libbcmath/*' \
16-
'$(top_srcdir)/ext/date/lib/*' \
17-
'$(top_srcdir)/ext/fileinfo/libmagic/*' \
18-
'$(top_srcdir)/ext/gd/libgd/*' \
19-
'$(top_srcdir)/ext/hash/sha3/*' \
20-
'$(top_srcdir)/ext/mbstring/libmbfl/*' \
21-
'$(top_srcdir)/ext/opcache/jit/libudis86/*' \
22-
'$(top_srcdir)/ext/pcre/pcre2lib/*' \
23-
'$(top_srcdir)/ext/xmlrpc/libxmlrpc/*' \
24-
--output-file $@
31+
$(LTP) --output-file $@ --remove $@ '*/<stdout>' $(LCOV_EXCLUDES)
2532

2633
lcov-html: php_lcov.info
2734
@echo "Generating lcov HTML"
28-
@$(LTP_GENHTML) --legend --output-directory lcov_html/ --title "PHP Code Coverage" php_lcov.info
35+
$(LTP_GENHTML) --legend --output-directory lcov_html/ --title "PHP Code Coverage" php_lcov.info
2936

3037
lcov-clean:
3138
rm -f php_lcov.info
3239
rm -rf lcov_html/
3340

3441
lcov-clean-data:
3542
@find . -name \*.gcda -o -name \*.da -o -name \*.bbg? | xargs rm -f
43+
44+
gcovr-html:
45+
@echo "Generating gcovr HTML"
46+
@rm -rf gcovr_html/
47+
@mkdir gcovr_html
48+
gcovr -sr . -o gcovr_html/index.html --html --html-details \
49+
--exclude-directories 'ext/date/lib$$' \
50+
$(foreach lib, $(GCOVR_EXCLUDES), -e $(lib))
51+
52+
gcovr-xml:
53+
@echo "Generating gcovr XML"
54+
@rm -f gcovr.xml
55+
gcovr -sr . -o gcovr.xml --xml \
56+
--exclude-directories 'ext/date/lib$$' \
57+
$(foreach lib, $(GCOVR_EXCLUDES), -e $(lib))
58+
59+
.PHONY: gcovr-html lcov-html php_lcov.info

0 commit comments

Comments
 (0)