guibranco/Pancake

View on GitHub
.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
name: CI

on:
    push:
        branches: [main]
    workflow_dispatch:

concurrency:
    group: ${{ github.workflow }}-${{ github.ref }}
    cancel-in-progress: true

jobs:
    build-tests:
        name: Build and Test
        runs-on: ubuntu-latest
        outputs:
            semVer: ${{ steps.gitversion.outputs.semVer }}

        steps:
            - uses: actions/checkout@v4
              with:
                  fetch-depth: 0

            - name: Install GitVersion
              uses: gittools/actions/gitversion/setup@v2
              with:
                  versionSpec: '5.x'

            - name: Determine Version
              id: gitversion
              uses: gittools/actions/gitversion/execute@v2
              with:
                  useConfigFile: true

            - name: Cache Composer dependencies
              uses: actions/cache@v4
              with:
                  path: /tmp/composer-cache
                  key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}

            - name: Install dependencies
              uses: php-actions/composer@v6

            - name: PHPUnit Tests
              uses: php-actions/phpunit@v3
              with:
                  version: 11
                  php_version: 8.3
                  php_extensions: xdebug shmop
                  coverage_cobertura: coverage.xml
                  bootstrap: vendor/autoload.php
                  configuration: tests/phpunit.xml
                  test_suffix: Test.php
                  args: --coverage-filter src tests
              env:
                  XDEBUG_MODE: coverage

    create_release:
        name: Create release
        needs: [build-tests]
        env:
            SEMVER: ${{ needs.build-tests.outputs.semVer }}
        runs-on: ubuntu-latest

        steps:
            - name: Create Release
              uses: ncipollo/release-action@v1.14.0
              with:
                  skipIfReleaseExists: true
                  allowUpdates: false
                  draft: false
                  makeLatest: true
                  tag: v${{ env.SEMVER }}
                  name: Release v${{ env.SEMVER }}
                  generateReleaseNotes: true
                  body: Release ${{ env.SEMVER }} of ${{ github.repository }}