From cc4a7d37463aa03f38e81f92c6251cc65ed73d4f Mon Sep 17 00:00:00 2001 From: "Michael A. Smith" Date: Tue, 12 May 2026 11:08:30 -0400 Subject: [PATCH] ci: migrate to reusable PHP CI workflows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace inlined workflows with thin callers of openCoreEMR/github-workflows-public@0.0.4, matching the pattern established by openCoreEMR/oce-module-perspectives-scribe#8. Migrated: actionlint, composer-normalize, composer-validate, conventional-pr-title, dclint, php-syntax-check, phpcs, phpstan, phpunit, rector. Each caller pins the reusable to @0.0.4 and adds the path filters recommended by the github-workflows-public README. Skipped (CLI-specific or already migrated): build-phar.yml, build-phar-on-release.yml, release-please.yml. NOTE — phpunit matrix narrowed: previously this workflow ran on PHP 8.2/8.3/8.4. The new caller uses php-versions ["8.2"] only, matching the directive in the migration plan. If we want to keep the wider matrix, change php-versions to ["8.2","8.3","8.4"] before merge. composer phpstan still bootstraps tools/openemr/vendor itself, so the reusable does not need a second install step. --- .github/workflows/actionlint.yml | 12 ++--- .github/workflows/composer-normalize.yml | 36 ++++----------- .github/workflows/composer-validate.yml | 26 +++++------ .github/workflows/conventional-pr-title.yml | 26 +---------- .github/workflows/dclint.yml | 37 +++------------ .github/workflows/php-syntax-check.yml | 31 ++++++------- .github/workflows/phpcs.yml | 44 ++++++++---------- .github/workflows/phpstan.yml | 51 ++++++++------------- .github/workflows/phpunit.yml | 39 ++-------------- .github/workflows/rector.yml | 42 +++++++---------- 10 files changed, 104 insertions(+), 240 deletions(-) diff --git a/.github/workflows/actionlint.yml b/.github/workflows/actionlint.yml index 460db89..9873fbe 100644 --- a/.github/workflows/actionlint.yml +++ b/.github/workflows/actionlint.yml @@ -6,20 +6,14 @@ on: - main paths: - .github/workflows/** + - .github/actions/** pull_request: branches: - main paths: - .github/workflows/** + - .github/actions/** jobs: actionlint: - name: Lint GitHub Actions workflows - runs-on: ubuntu-24.04 - - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Run actionlint - uses: rhysd/actionlint@v1.7.12 + uses: openCoreEMR/github-workflows-public/.github/workflows/actionlint.yml@0.0.4 diff --git a/.github/workflows/composer-normalize.yml b/.github/workflows/composer-normalize.yml index d37d40f..865ade7 100644 --- a/.github/workflows/composer-normalize.yml +++ b/.github/workflows/composer-normalize.yml @@ -4,36 +4,20 @@ on: push: branches: - main + paths: + - composer.json + - .github/workflows/composer-normalize.yml pull_request: branches: - main + paths: + - composer.json + - .github/workflows/composer-normalize.yml jobs: composer-normalize: - name: Normalize composer.json (check) - runs-on: ubuntu-24.04 - - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - coverage: none - tools: composer:v2 - - - name: Cache Composer dependencies - uses: actions/cache@v5 - with: - path: vendor - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} - restore-keys: | - ${{ runner.os }}-composer- - - - name: Install dependencies - run: composer install --prefer-dist --no-progress --no-interaction - - - name: Normalize composer.json (check) + uses: openCoreEMR/github-workflows-public/.github/workflows/php-composer-script.yml@0.0.4 + with: + name: Normalize composer.json (check) run: composer normalize --dry-run + php-version: '8.2' diff --git a/.github/workflows/composer-validate.yml b/.github/workflows/composer-validate.yml index 5d8a1ca..1fed59a 100644 --- a/.github/workflows/composer-validate.yml +++ b/.github/workflows/composer-validate.yml @@ -4,25 +4,21 @@ on: push: branches: - main + paths: + - composer.json + - .github/workflows/composer-validate.yml pull_request: branches: - main + paths: + - composer.json + - .github/workflows/composer-validate.yml jobs: composer-validate: - name: Validate composer.json - runs-on: ubuntu-24.04 - - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - coverage: none - tools: composer:v2 - - - name: Validate composer.json + uses: openCoreEMR/github-workflows-public/.github/workflows/php-composer-script.yml@0.0.4 + with: + name: Validate composer.json run: composer validate --strict + install-deps: false + php-version: '8.2' diff --git a/.github/workflows/conventional-pr-title.yml b/.github/workflows/conventional-pr-title.yml index 461bfd5..c1cf897 100644 --- a/.github/workflows/conventional-pr-title.yml +++ b/.github/workflows/conventional-pr-title.yml @@ -6,28 +6,4 @@ on: jobs: conventional-pr-title: - runs-on: ubuntu-24.04 - steps: - - uses: amannn/action-semantic-pull-request@v6 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - types: | - feat - fix - docs - style - refactor - perf - test - build - ci - chore - revert - deps - requireScope: false - subjectPattern: ^(?![A-Z]).+$ - subjectPatternError: | - The subject "{subject}" found in the pull request title "{title}" - didn't match the configured pattern. Please ensure that the subject - doesn't start with an uppercase character. + uses: openCoreEMR/github-workflows-public/.github/workflows/conventional-pr-title.yml@0.0.4 diff --git a/.github/workflows/dclint.yml b/.github/workflows/dclint.yml index 8f057d9..422dbec 100644 --- a/.github/workflows/dclint.yml +++ b/.github/workflows/dclint.yml @@ -5,44 +5,21 @@ on: branches: - main paths: + - '**/compose.yml' + - '**/compose.yaml' - '**/docker-compose*.yml' - '**/docker-compose*.yaml' - - compose.yml - - compose.yaml + - .github/workflows/dclint.yml pull_request: branches: - main paths: + - '**/compose.yml' + - '**/compose.yaml' - '**/docker-compose*.yml' - '**/docker-compose*.yaml' - - compose.yml - - compose.yaml + - .github/workflows/dclint.yml jobs: dclint: - name: Lint Docker Compose files - runs-on: ubuntu-24.04 - - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: '20' - - - name: Install dclint - run: npm install -g dclint - - - name: Run dclint - run: | - git ls-files -z 'compose.yml' \ - 'compose.yaml' \ - 'docker-compose*.yml' \ - 'docker-compose*.yaml' \ - '**/compose.yml' \ - '**/compose.yaml' \ - '**/docker-compose*.yml' \ - '**/docker-compose*.yaml' | - xargs --null --no-run-if-empty dclint + uses: openCoreEMR/github-workflows-public/.github/workflows/dclint.yml@0.0.4 diff --git a/.github/workflows/php-syntax-check.yml b/.github/workflows/php-syntax-check.yml index 45f556b..ddf86bb 100644 --- a/.github/workflows/php-syntax-check.yml +++ b/.github/workflows/php-syntax-check.yml @@ -4,24 +4,23 @@ on: push: branches: - main + paths: + - '**.php' + - composer.json + - .github/workflows/php-syntax-check.yml pull_request: branches: - main + paths: + - '**.php' + - composer.json + - .github/workflows/php-syntax-check.yml jobs: - syntax: - name: Check PHP Syntax - runs-on: ubuntu-24.04 - - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - coverage: none - - - name: Check PHP syntax - run: find src bin -name "*.php" -exec php -l {} \; + php-syntax-check: + uses: openCoreEMR/github-workflows-public/.github/workflows/php-composer-script.yml@0.0.4 + with: + name: PHP Syntax Check + run: composer php-lint + install-deps: false + php-version: '8.2' diff --git a/.github/workflows/phpcs.yml b/.github/workflows/phpcs.yml index a91e43a..51f5711 100644 --- a/.github/workflows/phpcs.yml +++ b/.github/workflows/phpcs.yml @@ -4,36 +4,28 @@ on: push: branches: - main + paths: + - '**.php' + - '.phpcs.xml*' + - 'phpcs.xml*' + - composer.json + - composer.lock + - .github/workflows/phpcs.yml pull_request: branches: - main + paths: + - '**.php' + - '.phpcs.xml*' + - 'phpcs.xml*' + - composer.json + - composer.lock + - .github/workflows/phpcs.yml jobs: phpcs: - name: Run PHP CodeSniffer - runs-on: ubuntu-24.04 - - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - coverage: none - tools: composer:v2 - - - name: Cache Composer dependencies - uses: actions/cache@v5 - with: - path: vendor - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} - restore-keys: | - ${{ runner.os }}-composer- - - - name: Install dependencies - run: composer install --prefer-dist --no-progress --no-interaction - - - name: Run PHP CodeSniffer + uses: openCoreEMR/github-workflows-public/.github/workflows/php-composer-script.yml@0.0.4 + with: + name: Run PHP CodeSniffer run: composer phpcs + php-version: '8.2' diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml index 223a4c7..a39e077 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/phpstan.yml @@ -4,41 +4,30 @@ on: push: branches: - main + paths: + - '**.php' + - phpstan.neon + - phpstan.neon.dist + - phpstan-baseline.neon + - composer.json + - composer.lock + - .github/workflows/phpstan.yml pull_request: branches: - main + paths: + - '**.php' + - phpstan.neon + - phpstan.neon.dist + - phpstan-baseline.neon + - composer.json + - composer.lock + - .github/workflows/phpstan.yml jobs: phpstan: - name: Run PHPStan - runs-on: ubuntu-24.04 - - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - coverage: none - tools: composer:v2 - - - name: Cache Composer dependencies - uses: actions/cache@v5 - with: - path: | - vendor - tools/openemr/vendor - key: ${{ runner.os }}-composer-phpstan-${{ hashFiles('**/composer.json') }} - restore-keys: | - ${{ runner.os }}-composer-phpstan- - - - name: Install dependencies (root) - run: composer install --prefer-dist --no-progress --no-interaction - - - name: Install dependencies (tools/openemr sub-vendor) - run: composer install --working-dir=tools/openemr --prefer-dist --no-progress --no-interaction - - - name: Run PHPStan + uses: openCoreEMR/github-workflows-public/.github/workflows/php-composer-script.yml@0.0.4 + with: + name: Run PHPStan run: composer phpstan + php-version: '8.2' diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index 454dc78..de909e6 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -10,39 +10,6 @@ on: jobs: phpunit: - name: PHP ${{ matrix.php-version }} Tests - runs-on: ubuntu-24.04 - - strategy: - fail-fast: false - matrix: - php-version: - - '8.2' - - '8.3' - - '8.4' - - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-version }} - extensions: json, mbstring - coverage: none - tools: composer:v2 - - - name: Cache Composer dependencies - uses: actions/cache@v5 - with: - path: vendor - key: ${{ runner.os }}-composer-${{ matrix.php-version }}-${{ hashFiles('**/composer.json') }} - restore-keys: | - ${{ runner.os }}-composer-${{ matrix.php-version }}- - - - name: Install dependencies - run: composer install --prefer-dist --no-progress --no-interaction - - - name: Run PHPUnit - run: composer phpunit + uses: openCoreEMR/github-workflows-public/.github/workflows/php-tests.yml@0.0.4 + with: + php-versions: '["8.2"]' diff --git a/.github/workflows/rector.yml b/.github/workflows/rector.yml index c2d96c5..e92222c 100644 --- a/.github/workflows/rector.yml +++ b/.github/workflows/rector.yml @@ -4,36 +4,26 @@ on: push: branches: - main + paths: + - '**.php' + - rector.php + - composer.json + - composer.lock + - .github/workflows/rector.yml pull_request: branches: - main + paths: + - '**.php' + - rector.php + - composer.json + - composer.lock + - .github/workflows/rector.yml jobs: rector: - name: Run Rector (dry-run) - runs-on: ubuntu-24.04 - - steps: - - name: Checkout code - uses: actions/checkout@v6 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.2' - coverage: none - tools: composer:v2 - - - name: Cache Composer dependencies - uses: actions/cache@v5 - with: - path: vendor - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} - restore-keys: | - ${{ runner.os }}-composer- - - - name: Install dependencies - run: composer install --prefer-dist --no-progress --no-interaction - - - name: Run Rector (dry-run) + uses: openCoreEMR/github-workflows-public/.github/workflows/php-composer-script.yml@0.0.4 + with: + name: Run Rector (dry-run) run: composer rector + php-version: '8.2'