-
Notifications
You must be signed in to change notification settings - Fork 94
198 lines (183 loc) · 10.1 KB
/
ci.yaml
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
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ${{ matrix.operating-system }}
env:
HTTPSERVER: localhost
HTTPURI: /tests/index.php?demo=server/server.php
HTTPSSERVER: localhost
HTTPSURI: /tests/index.php?demo=server/server.php
PROXYSERVER: localhost:8080
# @todo check: is this necessary as well on GHA runners?
# was: "Travis currently compiles PHP with an oldish cURL/GnuTLS combination;
# to make the tests pass when Apache has a bogus SSL cert whe need the full set of options below."
HTTPSVERIFYHOST: 0
HTTPSIGNOREPEER: 1
SSLVERSION: 0
DEBUG: 0
strategy:
fail-fast: false
matrix:
include:
# @see https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners
# @todo run some tests on 'windows-latest' (needs test env setup scripts for windows to be developed)
- php: '8.4'
operating-system: ubuntu-24.04
- php: '8.3'
operating-system: ubuntu-22.04
- php: '8.2'
operating-system: ubuntu-22.04
- php: '8.1'
operating-system: ubuntu-22.04
- php: '8.0'
operating-system: ubuntu-22.04
- php: '7.4'
operating-system: ubuntu-22.04
# nb: the version of phpunit we use does not support code coverage generation on php 8
code-coverage: true
- php: '7.3'
operating-system: ubuntu-22.04
- php: '7.2'
operating-system: ubuntu-20.04
- php: '7.1'
operating-system: ubuntu-20.04
- php: '7.0'
operating-system: ubuntu-20.04
- php: '5.6'
operating-system: ubuntu-20.04
- php: '5.5'
operating-system: ubuntu-22.04
- php: '5.4'
operating-system: ubuntu-20.04
steps:
- name: checkout code
uses: actions/checkout@v3
# Although this action is quite nice, we prefer to use the same script to set up php that we use for the
# docker image used for local testing. This allows us to make sure that script is always in good shape
#- name: set up php
# uses: shivammathur/setup-php@v2
# with:
# php-version: ${{ matrix.php }}
# extensions: curl, dom, mbstring, xsl
# ini-values: 'cgi.fix_pathinfo=1, always_populate_raw_post_data=-1'
# #tools: ${{ matrix.phpunit-version }}
# coverage: ${{ matrix.code-coverage}}
- name: set up env
# @todo add env setup scripts for windows
run: |
chmod 755 ./tests/ci/setup/*.sh
sudo --preserve-env=GITHUB_ACTIONS ./tests/ci/setup/install_packages.sh
sudo --preserve-env=GITHUB_ACTIONS ./tests/ci/setup/setup_perl.sh
sudo --preserve-env=GITHUB_ACTIONS ./tests/ci/setup/setup_apache.sh
sudo --preserve-env=GITHUB_ACTIONS ./tests/ci/setup/setup_privoxy.sh
sudo --preserve-env=GITHUB_ACTIONS ./tests/ci/setup/setup_php.sh ${{ matrix.php }}
sudo --preserve-env=GITHUB_ACTIONS ./tests/ci/setup/setup_composer.sh
# fix fs perms for recent Apache versions configuration (ie. starting from Jammy)
f="$(pwd)"; while [[ $f != / ]]; do sudo chmod +rx "$f"; f=$(dirname "$f"); done;
find . -type d -exec chmod +rx {} \;
find . -type f -exec chmod +r {} \;
# Avoid downloading composer deps on every workflow run. Is this useful for us? Caching the installation of
# php/apache/privoxy/perl would be more useful...
#-
# uses: actions/cache@v2
# with:
# path: /tmp/composer-cache
# key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}
- name: install dependencies
run: 'composer install --no-progress'
- name: run tests and upload coverage info if needed
run: |
if [ -z "${{ matrix.code-coverage }}" ]; then
./vendor/bin/phpunit -v tests
else
./tests/ci/setup/setup_code_coverage.sh enable
./vendor/bin/phpunit -v --coverage-clover=coverage.clover tests
if [ -f coverage.clover ]; then
wget https://uploader.codecov.io/latest/linux/codecov && \
chmod +x codecov && \
./codecov -f coverage.clover
else
echo "WARNING: code coverage not generated. Is xdebug disabled?"
fi
fi
# @todo would it be useful to run a 2nd test with composer --prefer-lowest? After all the only dependencies we have are testing tools
- name: test python demo files
run: 'python3 demo/client/python/test.py'
- name: test perl demo files
run: 'perl demo/client/perl/test.pl'
# disabled for the moment (2023/02), as we get only noise from the scans...
#- name: Qodana scan
# uses: JetBrains/qodana-action@main
# env:
# QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
- name: failure troubleshooting
if: ${{ failure() }}
run: |
#env
#php -i
#ps auxwww
#dpkg --list | grep php
#ps auxwww | grep fpm
#pwd
#sudo env
#systemctl list-units --all --type=service --no-pager | grep running
#systemctl status apache2.service
#ls -la /etc/apache2/mods-enabled
#ls -la /etc/apache2/conf-enabled
#ls -la /etc/apache2/mods-available
#ls -la /etc/apache2/conf-available
#ls -la /etc/apache2/sites-available/
#sudo cat /etc/apache2/envvars
#sudo cat /etc/apache2/sites-available/000-default.conf
#ls -ltr /var/log
#ls -ltr /var/log/apache2
if [ -d /var/log/privoxy ]; then sudo cat /var/log/privoxy/*; fi
if [ -d /var/log/apache2 ]; then sudo cat /var/log/apache2/error.log; fi
if [ -d /var/log/apache2 ]; then sudo cat /var/log/apache2/other_vhosts_access.log; fi
sudo cat /var/log/php*.log
# Whenever a change is pushed to this library, we run as well the tests of all known packages depending on it,
# so that we can catch any (involuntary) breakage.
# NB: if any are detected, do not forget to mark the current versions of dependents as incompatible in composer.json
test-dependencies:
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
include:
- dependency: phpxmlrpc/extras
#- dependency: phpxmlrpc/jsonrpc
- dependency: phpxmlrpc/polyfill-xmlrpc
steps:
# NB: unusually, but intentionally, we do _not_ download the code of this very own repo into the workspace!
- name: download dependency, build its test vm and run its tests against the current commit
run: |
# We test against the latest available release of dependents.
# Arguably, we could (also?) test against their master branch, in case some fixes were pushed there
# and not released yet, which make them work ok with us, but those tend to be tested when pushing
# to them (and we do not push to dependents changes which make them use an unreleased version
# of us anyway)
composer create-project --prefer-source --no-install --remove-vcs --stability=alpha "${{ matrix.dependency }}" .
# avoid rewriting 'source' line - we should figure out how to use negative lookahed...
sed -i -E -e 's|"phpxmlrpc/phpxmlrpc" *: *"source"|"phpxmlrpc/phpxmlrpc_": "source"|g' composer.json
sed -i -E -e 's|"phpxmlrpc/phpxmlrpc" *: *".+|"phpxmlrpc/phpxmlrpc": "dev-master#${{ github.ref_name }} as 4.999"|g' composer.json
sed -i -E -e 's|"phpxmlrpc/phpxmlrpc_" *: *"source"|"phpxmlrpc/phpxmlrpc": "source"|g' composer.json
# @todo either set COMPOSER_ROOT_VERSION env var, or inject `version` into composer.json, to allow
# composer to know that the top-level project is on `dev-master`
chmod 755 ./tests/ci/vm.sh
./tests/ci/vm.sh build
./tests/ci/vm.sh start
# this should not be necessary any more, as `start` waits for the app to be set up
#sleep 30
./tests/ci/vm.sh runtests
# NB: we do not stop the container, nor clean up the current folder, as we rely on each matrix case
# being executed in its own runner instance
- name: failure troubleshooting
if: ${{ failure() }}
run: |
docker --version
docker ps
docker ps -a
./tests/ci/vm.sh top
#./tests/ci/vm.sh exec env
./tests/ci/vm.sh logs