From f3ec019fe35f28ebf2104d6766b5e67ed2bc87de Mon Sep 17 00:00:00 2001 From: Alexis Saettler Date: Thu, 28 Dec 2023 23:29:50 +0100 Subject: [PATCH] build: reuse workflows --- .github/workflows/build.yml | 193 +++-------------------------------- .github/workflows/static.yml | 72 +------------ 2 files changed, 17 insertions(+), 248 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4a503d5..4a0b9f5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,195 +16,28 @@ concurrency: group: Build ${{ github.ref }} cancel-in-progress: true - jobs: - ############# - # Run tests - ############# tests: - runs-on: ubuntu-latest - name: Testsuite ${{ matrix.testsuite }} with PHP ${{ matrix.php-version }} + ${{ matrix.connection }} + uses: monicahq/workflows/.github/workflows/laravel.yml@init + with: + php-version: ${{ matrix.php-version }} + connection: ${{ matrix.connection }} + coverage: ${{ matrix.connection == 'sqlite' && matrix.php-version == '8.2' }} strategy: fail-fast: false matrix: php-version: ['8.2'] connection: [sqlite, mysql, pgsql] - testsuite: [Unit] - coverage: [true] # run test with coverage, if 'coverage-with' match with the connection - - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - - name: Setup PHP ${{ matrix.php-version }} - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-version }} - extensions: mbstring, dom, fileinfo, ${{ matrix.connection }} - coverage: pcov - ini-values: pcov.directory=., pcov.exclude="~vendor~" - - name: Check PHP Version - run: php -v - - name: Check Composer Version - run: composer -V - - name: Check PHP Extensions - run: php -m - - # Composer - - name: Validate composer.json and composer.lock - run: composer validate - - - name: Get Composer Cache Directory - id: composer-cache - run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - - name: Cache composer files - uses: actions/cache@v3 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }} - restore-keys: | - ${{ runner.os }}-composer-${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }} - ${{ runner.os }}-composer-${{ matrix.php-version }} - ${{ runner.os }}-composer- - - - name: Install composer dependencies - run: composer install --no-progress --no-interaction --prefer-dist --optimize-autoloader - - # Prepare - - name: Prepare environment - run: | - cp tests/.env.ci-${{ matrix.connection }} .env - touch config/.version config/.release - mkdir -p public/build/assets - {\ - echo "{"; \ - for f in app.js app.css; do \ - [[ $first == 1 ]] && echo -n "," || first=1; \ - k=${f##*.}/$f; \ - echo "\"resources/$k\": {\"file\": \"assets/$f\", \"src\": \"resources/$k\"}"; \ - echo '' > public/build/assets/$f; \ - done; \ - echo "}"; \ - } | tee public/build/manifest.json - - name: Create sqlite database - if: matrix.connection == 'sqlite' - run: touch database/database.sqlite - - name: Create mysql database - if: matrix.connection == 'mysql' - run: | - sudo systemctl start mysql.service - mysql --protocol=tcp -u root -proot -e "CREATE DATABASE IF NOT EXISTS customers CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" - - name: Create pgsql database - if: matrix.connection == 'pgsql' - run: | - sudo systemctl start postgresql.service - sudo -u postgres psql --command="CREATE USER customers PASSWORD 'secret'" --command="\du" - sudo -u postgres createdb --owner=customers customers - PGPASSWORD=secret psql --username=customers --host=localhost --list customers - - - name: Generate key - run: php artisan key:generate - - - name: Run migrations - run: php artisan migrate --no-interaction -vvv - - name: Run seeds - run: php artisan db:seed --no-interaction -vvv - - # Test - - name: Run tests suite with coverage - if: matrix.connection == env.coverage-with && matrix.php-version == env.default-php-version && matrix.coverage - run: vendor/bin/phpunit -c phpunit.xml --testsuite ${{ matrix.testsuite }} --log-junit ./results/${{ matrix.connection }}/junit/results${{ matrix.testsuite }}.xml --coverage-clover ./results/${{ matrix.connection }}/coverage/coverage${{ matrix.testsuite }}.xml - env: - DB_CONNECTION: ${{ matrix.connection }} - - name: Run tests - if: matrix.connection != env.coverage-with || matrix.php-version != env.default-php-version || ! matrix.coverage - run: vendor/bin/phpunit -c phpunit.xml --testsuite ${{ matrix.testsuite }} --log-junit ./results/${{ matrix.connection }}/junit/results${{ matrix.testsuite }}.xml - env: - DB_CONNECTION: ${{ matrix.connection }} - - - name: Fix results files - run: sed -i -e "s%$GITHUB_WORKSPACE/%%g" **/*.xml - working-directory: results/${{ matrix.connection }} - if: success() || failure() - - - name: Store results - if: matrix.php-version == env.default-php-version && (success() || failure()) - uses: actions/upload-artifact@v4 - with: - name: results-${{ matrix.php-version }}-${{ matrix.connection }} - path: results - - ########################### - # Reporting to sonarcloud - ########################### - sonarcloud: - needs: tests - runs-on: ubuntu-latest - name: Sonarcloud - if: ${{ ! startsWith(github.ref, 'dependabot/') && (success() || failure()) }} - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - - name: Download results - uses: actions/download-artifact@v4 - with: - pattern: results-* - path: results - merge-multiple: true - - - name: Merge junit files - run: | - yarn dlx junit-merge --recursive --dir results/${{ env.coverage-with }}/junit --out results/results.xml - - - name: Set version parameter - id: version - run: | - version=$(git tag --points-at HEAD) - test -z "$version" && version="main" - echo "value=$version" >> $GITHUB_OUTPUT - - - name: Set coverage list - id: coverage - run: | - SONAR_COVERAGE=$(ls -m --format=comma results/${{ env.coverage-with }}/coverage/coverage*.xml | sed -e ':a;N;$!ba;s/\n//g; s/ //g;') - echo "list=$SONAR_COVERAGE" >> $GITHUB_OUTPUT - - - name: SonarCloud Scan - if: env.SONAR_TOKEN != '' - uses: SonarSource/sonarcloud-github-action@v2.1.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - with: - args: | - -Dsonar.projectVersion=${{ steps.version.outputs.value }} - -Dsonar.php.tests.reportPath=./results/results.xml - -Dsonar.php.coverage.reportPaths=${{ steps.coverage.outputs.list }} - - ########################### - # JUnit Test Report - ########################### reporting: + uses: monicahq/workflows/.github/workflows/reporting.yml@init + with: + project: monicahq_version + secrets: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} needs: tests - runs-on: ubuntu-latest - name: Reporting - if: success() || failure() - steps: - - name: Download results - uses: actions/download-artifact@v4 - with: - pattern: results-* - path: results - merge-multiple: true - - - name: Publish Test Report - uses: mikepenz/action-junit-report@v4 - with: - report_paths: results/${{ env.coverage-with }}/junit/*.xml + junit: + uses: monicahq/workflows/.github/workflows/junit.yml@init + needs: tests diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index d7477e1..94ff3aa 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -4,76 +4,12 @@ on: pull_request: types: [opened, synchronize, reopened] -env: - php-version: '8.2' - concurrency: group: Static ${{ github.ref }} cancel-in-progress: true - jobs: - psalm: - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - - name: Setup PHP ${{ env.php-version }} - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ env.php-version }} - extensions: redis - coverage: none - - - name: Get Composer Cache Directory - id: composer-cache - run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - - name: Cache composer files - uses: actions/cache@v3 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ env.php-version }}-${{ hashFiles('**/composer.lock') }} - restore-keys: | - ${{ runner.os }}-composer-${{ env.php-version }}-${{ hashFiles('**/composer.lock') }} - ${{ runner.os }}-composer-${{ env.php-version }} - ${{ runner.os }}-composer- - - - name: Install dependencies - run: composer install --no-progress --no-interaction --prefer-dist --optimize-autoloader - - - name: Run psalm - run: vendor/bin/psalm --output-format=github - - - phpstan: - runs-on: ubuntu-latest - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - - name: Setup PHP ${{ env.php-version }} - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ env.php-version }} - extensions: redis - coverage: none - - - name: Get Composer Cache Directory - id: composer-cache - run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - - name: Cache composer files - uses: actions/cache@v3 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ env.php-version }}-${{ hashFiles('**/composer.lock') }} - restore-keys: | - ${{ runner.os }}-composer-${{ env.php-version }}-${{ hashFiles('**/composer.lock') }} - ${{ runner.os }}-composer-${{ env.php-version }} - ${{ runner.os }}-composer- - - - name: Install dependencies - run: composer install --no-progress --no-interaction --prefer-dist --optimize-autoloader - - - name: Run phpstan - run: vendor/bin/phpstan analyse + statics: + uses: monicahq/workflows/.github/workflows/static.yml@init + with: + php-version: 8.2