wip github actions CI
[plcapi.git] / .github / workflows / ci.yml
index 13cf9cc..18f6bf2 100644 (file)
@@ -4,7 +4,7 @@ on: [push]
 
 jobs:
     test:
-        runs-on: ubuntu-latest
+        runs-on: ${{ matrix.operating-system }}
         env:
             HTTPSERVER: localhost
             URI: /demo/server/server.php
@@ -12,7 +12,8 @@ jobs:
             HTTPSURI: /demo/server/server.php
             PROXYSERVER: localhost:8080
             # 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
+            # to make the tests pass when Apache has a bogus SSL cert whe need the full set of options below.
+            # @todo check: is this necessary as well on GHA runners?
             HTTPSVERIFYHOST: 0
             HTTPSIGNOREPEER: 1
             SSLVERSION: 0
@@ -20,40 +21,78 @@ jobs:
         strategy:
             fail-fast: false
             matrix:
-                php: ['8.1', '8.0', '7.4', '7.3', '7.2', '7.1', '7.0', '5.6', '5.5', '5.4', '5.3']
+                # @see https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners
+                # @todo fix: atm our tests fail when using ubuntu 20 (focal) and php 5.6 - 7.1, when using
+                #       an ssl stream context for connecting to localhost via https
+                operating-system: ['ubuntu-18.04'] # @todo add 'windows-latest'
+                # @todo use an older version of phpunit to enable testing on php 5.3 - 5.5 . Also: we will most likely
+                #       have to resort to using shivammathur/setup-php@v2 instead of sury's ppa to get php installed
+                php: ['8.1', '8.0', '7.4', '7.3', '7.2', '7.1', '7.0', '5.6']
         steps:
-            -
-                uses: shivammathur/setup-php@v2
-                with:
-                    php-version: ${{ matrix.php }}
-                    extensions: curl
-                    #tools: phpunit
-            #-
-            #    run: 'php -v && env'
             -
                 uses: actions/checkout@v2
+            # Although this action is useful, 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
+            #-
+            #    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: phpunit/phpunit:a_version_compatible_with_php_5.3-5.5
+            #        # NB: this disables xdebug completely
+            #        coverage: none
             -
-                run: 'chmod 755 ./tests/ci/setup/*.sh && sudo ./tests/ci/setup/setup_perl.sh && sudo ./tests/ci/setup/setup_apache.sh && sudo ./tests/ci/setup/setup_privoxy.sh'
-            # Avoid downloading composer deps on every workflow. Is this useful for us?
+                # @todo add env setup scripts for windows
+                run: |
+                    chmod 755 ./tests/ci/setup/*.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
+            # Avoid downloading composer deps on every workflow. Is this useful/working for us?
             #-
             #    uses: actions/cache@v2
             #    with:
             #        path: /tmp/composer-cache
             #        key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}
             -
-                uses: php-actions/composer@v6
-                # simpler alternative ?
-                #run: 'composer install'
+                run: 'composer install'
             -
                 if: ${{ matrix.php == '7.4' }}
-                run: './tests/ci/setup/setup_code_coverage.sh enable'
+                run: |
+                    ./tests/ci/setup/setup_code_coverage.sh enable
+                    ./vendor/bin/phpunit -v --coverage-clover=coverage.clover tests
+                    wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover coverage.clover
             -
-                # @todo bring back $PHPUNIT_OPTS
+                if: ${{ matrix.php != '7.4' }}
                 run: './vendor/bin/phpunit -v tests'
             -
                 run: 'python3 demo/client/python/test.py'
             -
                 run: 'perl demo/client/perl/test.pl'
             -
-              if: ${{ failure() }}
-              run: 'systemctl status apache2.service; env; php -i; sudo cat /var/log/privoxy/*; sudo cat /var/log/apache2/error.log; sudo cat /var/log/apache2/other_vhosts_access.log; sudo cat /var/log/php*.log'
+                if: ${{ failure() }}
+                run: |
+                    #env
+                    #php -i
+                    #ps auxwww
+                    #dpkg --list | grep php
+                    #ps auxwww | grep fpm
+                    #pwd
+                    #sudo env
+                    #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
+                    sudo cat /var/log/privoxy/*
+                    sudo cat /var/log/apache2/error.log
+                    sudo cat /var/log/apache2/other_vhosts_access.log
+                    sudo cat /var/log/php*.log