From 55caf246b1f5404c8e24026408d9883bc2568824 Mon Sep 17 00:00:00 2001 From: Alexis Saettler Date: Fri, 29 Dec 2023 19:14:35 +0100 Subject: [PATCH] build: reuse workflows (#666) --- .github/workflows/build.yml | 171 ++--------------------- .github/workflows/deploy.yml | 80 +---------- .github/workflows/static.yml | 72 +--------- tests/{.env.ci-mysql => .env.ci.mysql} | 0 tests/{.env.ci-sqlite => .env.ci.sqlite} | 0 5 files changed, 23 insertions(+), 300 deletions(-) rename tests/{.env.ci-mysql => .env.ci.mysql} (100%) rename tests/{.env.ci-sqlite => .env.ci.sqlite} (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 38f6d6b..0054b62 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,171 +8,30 @@ on: release: types: [created] -env: - default-php-version: '8.2' - coverage-with: 'sqlite' - - jobs: - ############# - # Run tests - ############# tests: - runs-on: ubuntu-latest - name: Tests with PHP ${{ matrix.php-version }} + ${{ matrix.connection }} + uses: monicahq/workflows/.github/workflows/laravel.yml@main + with: + php-version: ${{ matrix.php-version }} + connection: ${{ matrix.connection }} + coverage: ${{ matrix.connection == 'sqlite' && matrix.php-version == '8.2' }} + database_name: version strategy: fail-fast: false matrix: php-version: ['8.2'] connection: [sqlite, mysql] - coverage: [true] - - 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 - - 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 - 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 version CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" - - - 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 - - name: Cache route - run: php artisan route:cache - # Test - - name: Setup problem matchers for PHPUnit - run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" - - 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 --log-junit ./results/${{ matrix.connection }}/junit/results.xml --coverage-clover ./results/${{ matrix.connection }}/coverage/coverage.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 --log-junit ./results/${{ matrix.connection }}/junit/results.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 - uses: actions/upload-artifact@v4 - with: - name: results-${{ matrix.php-version }}-${{ matrix.connection }} - path: results - - - ########################### - # Reporting to sonarcloud - ########################### reporting: + uses: monicahq/workflows/.github/workflows/reporting.yml@main + with: + project: monicahq_version + secrets: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} needs: tests - runs-on: ubuntu-latest - name: Sonarcloud - if: 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 }} + assets: + uses: monicahq/workflows/.github/workflows/build_assets.yml@main + with: + node-version: 18 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 45d57c4..e20813b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,8 +3,6 @@ name: Deploy on: push: branches: [main] - pull_request: - types: [opened, synchronize, reopened] release: types: [created] @@ -12,86 +10,16 @@ on: env: php-version: '8.2' - node-version: 18 jobs: ############# # Build ############# build: - runs-on: ubuntu-latest - name: Build assets - - strategy: - fail-fast: false - - steps: - - name: Checkout sources - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup PHP ${{ env.php-version }} - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ env.php-version }} - extensions: mbstring, dom, fileinfo - coverage: none - - 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-${{ 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 composer dependencies - run: composer install --no-progress --no-interaction --prefer-dist --optimize-autoloader - - # Yarn - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: ${{ env.node-version }} - cache: yarn - - name: Install yarn dependencies - run: yarn install --immutable - - name: Lint files - run: yarn run lint - - - name: Prepare environment - run: | - { \ - echo "VITE_PROD_SOURCE_MAPS=true"; \ - } | tee .env - - - name: Build assets - run: yarn run build - - - name: Store assets - uses: actions/upload-artifact@v4 - with: - name: assets - path: | - public/build/**/* - !public/build/**/*.map - + uses: monicahq/workflows/.github/workflows/build_assets.yml@main + with: + node-version: 18 + store: true ###################### # Deploy on fortrabbit diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index 45e5ca5..dde3538 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -4,72 +4,8 @@ on: pull_request: types: [opened, synchronize, reopened] -env: - php-version: '8.2' - - 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 }} - 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 }} - 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@main + with: + php-version: 8.2 diff --git a/tests/.env.ci-mysql b/tests/.env.ci.mysql similarity index 100% rename from tests/.env.ci-mysql rename to tests/.env.ci.mysql diff --git a/tests/.env.ci-sqlite b/tests/.env.ci.sqlite similarity index 100% rename from tests/.env.ci-sqlite rename to tests/.env.ci.sqlite