name: Tests on: push: workflow_dispatch: jobs: Composer: runs-on: ubuntu-latest # https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs#handling-failures continue-on-error: ${{ matrix.experimental }} steps: - name: Checkout uses: actions/checkout@v4 - name: Validate composer.json and composer.lock run: composer validate - name: Install dependencies run: composer install --prefer-dist --no-dev PHPunit: runs-on: ubuntu-latest strategy: matrix: php-versions: ['7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4'] include: # 8.4 is experimental due to Guzzle causing failures https://github.com/PrivateBin/PrivateBin/issues/1301 - php-versions: '8.4' experimental: true name: PHP ${{ matrix.php-versions }} unit tests on ${{ matrix.operating-system }} env: extensions: gd, sqlite3 extensions-cache-key-name: phpextensions steps: # let's get started! - name: Checkout uses: actions/checkout@v4 # cache PHP extensions - name: Setup cache environment id: extcache uses: shivammathur/cache-extensions@v1 with: php-version: ${{ matrix.php-versions }} extensions: ${{ env.extensions }} key: ${{ runner.os }}-${{ env.extensions-cache-key }} - name: Cache extensions uses: actions/cache@v4 with: path: ${{ steps.extcache.outputs.dir }} key: ${{ steps.extcache.outputs.key }} restore-keys: ${{ runner.os }}-${{ env.extensions-cache-key }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} extensions: ${{ env.extensions }} # Setup GitHub CI PHP problem matchers # https://github.com/shivammathur/setup-php#problem-matchers - name: Setup problem matchers for PHP run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" - name: Setup problem matchers for PHPUnit run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" # composer cache - name: Remove composer lock run: rm composer.lock - name: Get composer cache directory id: composer-cache run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT # http://man7.org/linux/man-pages/man1/date.1.html # https://github.com/actions/cache#creating-a-cache-key - name: Get Date id: get-date run: echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT shell: bash - name: Cache dependencies uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/composer.json') }} restore-keys: ${{ runner.os }}-composer-${{ steps.get-date.outputs.date }}- # composer installation - name: Setup PHPunit run: composer install -n - name: Install Google Cloud Storage run: composer require google/cloud-storage # testing - name: Run unit tests run: ../vendor/bin/phpunit --no-coverage --log-junit results.xml working-directory: tst - name: Upload Test Results if: always() uses: actions/upload-artifact@v4 with: name: Test Results (PHP ${{ matrix.php-versions }}) path: tst/results.xml Mocha: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: 'js/package-lock.json' - name: Setup Mocha run: npm install -g mocha - name: Setup Node modules run: npm ci working-directory: js - name: Run unit tests run: npm run ci-test working-directory: js - name: Upload Test Results if: always() uses: actions/upload-artifact@v4 with: name: Test Results (Mocha) path: js/mocha-results.xml event_file: name: "Event File" runs-on: ubuntu-latest steps: - name: Upload uses: actions/upload-artifact@v4 with: name: Event File path: ${{ github.event_path }} publish-test-results: name: "Publish Tests Results" needs: ['PHPunit', 'Mocha'] runs-on: ubuntu-latest permissions: checks: write # only needed unless run with comment_mode: off pull-requests: write if: always() steps: - name: Download Artifacts uses: dawidd6/action-download-artifact@v3 with: run_id: ${{ github.event.workflow_run.id }} path: artifacts - name: Publish Test Results uses: EnricoMi/publish-unit-test-result-action@v2 with: check_name: "Test Results (${{ github.event.workflow_run.event || github.event_name }})" commit: ${{ github.event.workflow_run.head_sha }} event_file: artifacts/Event File/event.json event_name: ${{ github.event.workflow_run.event }} files: | artifacts/**/*.xml artifacts/**/*.trx artifacts/**/*.json