name: Integration Tests on: pull_request env: POSTGRES_PASSWORD: nc_test_db MYSQL_USER: nc_test MYSQL_PASSWORD: nc_test_db MYSQL_DATABASE: nc_test MYSQL_PORT: 3800 jobs: integration: runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental }} name: "Integration: Nextcloud ${{ matrix.nextcloud }} - PHP ${{ matrix.php-versions }} - DB ${{ matrix.database }}" services: postgres: image: postgres:14 env: POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }} options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 # Maps tcp port 5432 on service container to the host strategy: matrix: php-versions: ['7.4', '8.0'] nextcloud: ['stable23', 'stable24', 'stable25'] database: ['sqlite', 'pgsql', 'mysql'] experimental: [false] include: - php-versions: '8.0' nextcloud: pre-release database: sqlite experimental: true - php-versions: '8.2' nextcloud: pre-release database: sqlite experimental: true - php-versions: 8.1 nextcloud: stable25 database: sqlite experimental: false steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} extensions: pdo_sqlite,pdo_mysql,pdo_pgsql,gd,zip coverage: none - name: Setup BATS & httpie run: sudo apt-get install -y bats httpie ### MySQL specific setup - name: Setup mysql if: matrix.database == 'mysql' uses: getong/mariadb-action@v1.1 with: mariadb version: '10.5' host port: ${{ env.MYSQL_PORT }} mysql database: ${{ env.MYSQL_DATABASE }} mysql root password: ${{ env.MYSQL_PASSWORD }} mysql user: ${{ env.MYSQL_USER }} mysql password: ${{ env.MYSQL_PASSWORD }} - name: Set up server MySQL if: matrix.database == 'mysql' uses: SMillerDev/nextcloud-actions/setup-nextcloud@main with: version: ${{ matrix.nextcloud }} cron: true database-type: ${{ matrix.database }} database-host: 127.0.0.1 database-port: ${{ env.MYSQL_PORT }} database-name: ${{ env.MYSQL_DATABASE }} database-user: root database-password: ${{ env.MYSQL_PASSWORD }} ### Back to normal setup - name: Set up server non MySQL if: matrix.database != 'mysql' uses: SMillerDev/nextcloud-actions/setup-nextcloud@main with: version: ${{ matrix.nextcloud }} cron: true database-type: ${{ matrix.database }} database-host: localhost database-port: 5432 database-name: postgres database-user: postgres database-password: ${{ env.POSTGRES_PASSWORD }} - name: Prime app build run: make - name: Configure server with app uses: SMillerDev/nextcloud-actions/setup-nextcloud-app@main with: app: 'news' check-code: false force: ${{ matrix.experimental }} - name: Run API tests working-directory: ../server run: | php -S localhost:8080 &> /tmp/webserver.log & cd apps/news/tests/test_helper/feeds && php -S localhost:8090 &> /tmp/feedserver.log & sleep 2 cd ${{ github.workspace }}/../server bats apps/news/tests/api # Kill php server kill %1 kill %2 - name: Setup problem matchers for PHP run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" - name: Functional tests maintenance working-directory: ../server run: | ./occ maintenance:repair - name: Functional tests working-directory: ../server run: | cd apps/news/tests/test_helper/feeds && php -S localhost:8090 &> /tmp/feedserver.log & sleep 2 cd ${{ github.workspace }}/../server bats apps/news/tests/command kill %1 - name: Prep PHP tests working-directory: ../server/apps/news run: make php-test-dependencies - name: Feed tests working-directory: ../server/apps/news run: make feed-test