Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build: reuse workflows #1017

Merged
merged 10 commits into from
Dec 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 13 additions & 155 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,168 +8,26 @@ on:
release:
types: [created]

env:
default-php-version: '8.1'
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
vite: false

strategy:
fail-fast: false
matrix:
php-version: ['8.1']
php-version: [8.1, 8.2]
connection: [sqlite, mysql]
coverage: [true]

steps:
- name: Checkout sources
uses: actions/checkout@v3

- name: Setup PHP ${{ matrix.php-version }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
extensions: mbstring, dom, fileinfo, ${{ matrix.connection }}
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 "::set-output name=dir::$(composer config cache-files-dir)"
- 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/js public/css
{\
echo "{"; \
for f in app.js app.css app2.js app2.css; do \
[[ $first == 1 ]] && echo -n "," || first=1; \
k=${f##*.}/$f; \
echo "\"/$k\": \"/$k\""; \
echo '' > public/$k; \
done; \
echo "}"; \
} | tee public/mix-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: Run tests suite with coverage
if: matrix.connection == env.coverage-with && matrix.php-version == env.default-php-version && matrix.coverage
run: phpdbg -dmemory_limit=4G -qrr 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 }}

- name: Store results
if: matrix.php-version == env.default-php-version
uses: actions/upload-artifact@v3
with:
name: results
path: results


###########################
# Reporting to sonarcloud
###########################
reporting:
uses: monicahq/workflows/.github/workflows/reporting.yml@main
with:
project: monicahq_marketing_site
secrets:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
needs: tests
runs-on: ubuntu-latest
name: Sonarcloud
if: ${{ ! startsWith(github.ref, 'dependabot/') }}

steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis

- name: Download results
uses: actions/download-artifact@v3
with:
name: results
path: results

- name: Merge junit files
run: |
yarn global add junit-merge
$(yarn global bin)/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 "::set-output name=value::$version"
- 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 "::set-output name=list::$SONAR_COVERAGE"
- name: SonarCloud Scan
if: env.SONAR_TOKEN != ''
uses: SonarSource/sonarcloud-github-action@v1.6
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 }}
3 changes: 2 additions & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,8 @@ jobs:
- name: Deploy
run: |
git remote add deploy $REPO_URL
git push deploy main:master --force
branch=$(git rev-parse --abbrev-ref HEAD)
git push deploy $branch:master --force
env:
# This avoids a failure when the client does not know the SSH Host already
GIT_SSH_COMMAND: "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
Expand Down
72 changes: 4 additions & 68 deletions .github/workflows/static.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,72 +4,8 @@ on:
pull_request:
types: [opened, synchronize, reopened]

env:
php-version: '8.1'


jobs:
psalm:
runs-on: ubuntu-latest

steps:
- name: Checkout sources
uses: actions/checkout@v3

- 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 "::set-output name=dir::$(composer config cache-files-dir)"
- 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@v3

- 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 "::set-output name=dir::$(composer config cache-files-dir)"
- 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
File renamed without changes.
File renamed without changes.
Loading