name: PHP Tests on: push: branches: - master - release/* pull_request: branches: - master jobs: lint: name: Static analysis for php ${{ matrix.php }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2'] os: ['ubuntu-latest'] steps: - name: Checkout code base uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} tools: phpcs - name: Setup dependencies run: | composer require -n --no-progress overtrue/phplint phpunit/phpunit ipl/stdlib:@dev ipl/html:@dev git clone --depth 1 https://github.com/Icinga/icingaweb2.git vendor/icingaweb2 git clone --depth 1 -b snapshot/nightly https://github.com/Icinga/icinga-php-thirdparty.git vendor/icinga-php-thirdparty git clone --depth 1 https://github.com/Icinga/icingaweb2-module-cube.git vendor/cube - name: Setup Incubator run: | git clone --depth 1 https://github.com/Icinga/icingaweb2-module-incubator vendor/incubator cd vendor/incubator composer require --no-update \ "gipfl/calendar": "dev-master as 99.x-dev" \ "gipfl/cli": "dev-master as 99.x-dev" \ "gipfl/curl": "dev-master as 99.x-dev" \ "gipfl/data-type": "dev-master as 99.x-dev" \ "gipfl/db-migration": "dev-master as 99.x-dev" \ "gipfl/diff": "dev-master as 99.x-dev" \ "gipfl/format": "dev-master as 99.x-dev" \ "gipfl/icinga-bundles": "dev-master as 99.x-dev" \ "gipfl/icinga-cli-daemon": "dev-master as 99.x-dev" \ "gipfl/icingaweb2": "dev-master as 99.x-dev" \ "gipfl/influxdb": "dev-master as 99.x-dev" \ "gipfl/json": "dev-master as 99.x-dev" \ "gipfl/linux-health": "dev-master as 99.x-dev" \ "gipfl/log": "dev-master as 99.x-dev" \ "gipfl/process": "dev-master as 99.x-dev" \ "gipfl/protocol-jsonrpc": "dev-master as 99.x-dev" \ "gipfl/protocol-netstring": "dev-master as 99.x-dev" \ "gipfl/react-utils": "dev-master as 99.x-dev" \ "gipfl/simple-daemon": "dev-master as 99.x-dev" \ "gipfl/socket": "dev-master as 99.x-dev" \ "gipfl/stream": "dev-master as 99.x-dev" \ "gipfl/systemd": "dev-master as 99.x-dev" \ "gipfl/translation": "dev-master as 99.x-dev" \ "gipfl/web": "dev-master as 99.x-dev" \ "gipfl/zfdb": "dev-master as 99.x-dev" \ "gipfl/zfdbstore": "dev-master as 99.x-dev" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git config user.name "github-actions[bot]" bin/make-release.sh snapshot - name: PHP Lint if: ${{ ! cancelled() }} run: ./vendor/bin/phplint -n --exclude={^vendor/.*} -- . - name: PHP CodeSniffer if: ${{ ! cancelled() }} run: phpcs - name: PHPStan if: ${{ ! cancelled() }} uses: php-actions/phpstan@v3 test: name: Unit tests with php ${{ matrix.php }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} env: phpunit-version: 9.5 strategy: fail-fast: false matrix: php: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2'] os: ['ubuntu-latest'] include: - php: '7.2' phpunit-version: 8.5 services: mysql: image: mariadb env: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: director_test MYSQL_USER: director_test MYSQL_PASSWORD: director_test options: >- --health-cmd "mariadb -s -uroot -proot -e'SHOW DATABASES;' 2> /dev/null | grep director_test > test" --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 3306/tcp pgsql: image: postgres env: POSTGRES_USER: director_test POSTGRES_PASSWORD: director_test POSTGRES_DB: director_test options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432/tcp steps: - name: Checkout code base uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} tools: phpunit:${{ matrix.phpunit-version || env.phpunit-version }} extensions: mysql, pgsql - name: Setup Icinga Web run: | git clone --depth 1 https://github.com/Icinga/icingaweb2.git _icingaweb2 ln -s `pwd` _icingaweb2/modules/director - name: Setup Libraries run: | mkdir _libraries git clone --depth 1 -b snapshot/nightly https://github.com/Icinga/icinga-php-library.git _libraries/ipl git clone --depth 1 -b snapshot/nightly https://github.com/Icinga/icinga-php-thirdparty.git _libraries/vendor - name: Setup Incubator run: | git clone --depth 1 https://github.com/Icinga/icingaweb2-module-incubator _icingaweb2/modules/incubator mkdir -p test/config/enabledModules cd _icingaweb2/modules/incubator ln -s `pwd` ../../../test/config/enabledModules/incubator composer require --no-update \ "gipfl/calendar": "dev-master as 99.x-dev" \ "gipfl/cli": "dev-master as 99.x-dev" \ "gipfl/curl": "dev-master as 99.x-dev" \ "gipfl/data-type": "dev-master as 99.x-dev" \ "gipfl/db-migration": "dev-master as 99.x-dev" \ "gipfl/diff": "dev-master as 99.x-dev" \ "gipfl/format": "dev-master as 99.x-dev" \ "gipfl/icinga-bundles": "dev-master as 99.x-dev" \ "gipfl/icinga-cli-daemon": "dev-master as 99.x-dev" \ "gipfl/icingaweb2": "dev-master as 99.x-dev" \ "gipfl/influxdb": "dev-master as 99.x-dev" \ "gipfl/json": "dev-master as 99.x-dev" \ "gipfl/linux-health": "dev-master as 99.x-dev" \ "gipfl/log": "dev-master as 99.x-dev" \ "gipfl/process": "dev-master as 99.x-dev" \ "gipfl/protocol-jsonrpc": "dev-master as 99.x-dev" \ "gipfl/protocol-netstring": "dev-master as 99.x-dev" \ "gipfl/react-utils": "dev-master as 99.x-dev" \ "gipfl/simple-daemon": "dev-master as 99.x-dev" \ "gipfl/socket": "dev-master as 99.x-dev" \ "gipfl/stream": "dev-master as 99.x-dev" \ "gipfl/systemd": "dev-master as 99.x-dev" \ "gipfl/translation": "dev-master as 99.x-dev" \ "gipfl/web": "dev-master as 99.x-dev" \ "gipfl/zfdb": "dev-master as 99.x-dev" \ "gipfl/zfdbstore": "dev-master as 99.x-dev" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git config user.name "github-actions[bot]" bin/make-release.sh snapshot - name: PHPUnit with MySQL if: ${{ ! cancelled() }} env: ICINGAWEB_LIBDIR: _libraries ICINGAWEB_CONFIGDIR: test/config DIRECTOR_TESTDB_RES: Director MySQL TestDB DIRECTOR_TESTDB: director_test DIRECTOR_TESTDB_HOST: 127.0.0.1 DIRECTOR_TESTDB_PORT: ${{ job.services.mysql.ports['3306'] }} DIRECTOR_TESTDB_USER: director_test DIRECTOR_TESTDB_PASSWORD: director_test run: phpunit --verbose --bootstrap _icingaweb2/test/php/bootstrap.php - name: PHPUnit with PostgreSQL if: ${{ ! cancelled() }} env: ICINGAWEB_LIBDIR: _libraries ICINGAWEB_CONFIGDIR: test/config DIRECTOR_TESTDB_RES: Director PostgreSQL TestDB DIRECTOR_TESTDB: director_test DIRECTOR_TESTDB_HOST: 127.0.0.1 DIRECTOR_TESTDB_PORT: ${{ job.services.pgsql.ports['5432'] }} DIRECTOR_TESTDB_USER: director_test DIRECTOR_TESTDB_PASSWORD: director_test run: phpunit --verbose --bootstrap _icingaweb2/test/php/bootstrap.php