PHPackages                             ghostwriter/compliance - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Testing &amp; Quality](/categories/testing)
4. /
5. ghostwriter/compliance

ActiveProject[Testing &amp; Quality](/categories/testing)

ghostwriter/compliance
======================

Compliance - CI/CD &amp; QA Test Automation for PHP via GitHub Actions.

v1.x-dev(3d ago)01.3k[5 issues](https://github.com/ghostwriter/compliance/issues)BSD-3-ClausePHPPHP ~8.4.0 || ~8.5.0 || ~8.6.0CI passing

Since Jun 29Pushed 1w ago1 watchersCompare

[ Source](https://github.com/ghostwriter/compliance)[ Packagist](https://packagist.org/packages/ghostwriter/compliance)[ Docs](https://github.com/ghostwriter/compliance)[ GitHub Sponsors](https://github.com/sponsors/ghostwriter)[ Fund](https://paypal.me/codepoet)[ RSS](/packages/ghostwriter-compliance/feed)WikiDiscussions v1 Synced today

READMEChangelogDependencies (21)Versions (85)Used By (0)

Compliance
==========

[](#compliance)

[![Automation](https://github.com/ghostwriter/compliance/actions/workflows/automation.yml/badge.svg)](https://github.com/ghostwriter/compliance/actions/workflows/automation.yml)[![PHP Version](https://camo.githubusercontent.com/0cb364b0394002851d89d4ad34c09ed16e453467c3fab8c0512b567cec5a3dec/68747470733a2f2f62616467656e2e6e65742f7061636b61676973742f7068702f67686f73747772697465722f636f6d706c69616e63653f636f6c6f723d373737424234)](https://www.php.net/supported-versions)[![Packagist Downloads](https://camo.githubusercontent.com/6b5e309279fdb145066abc7300622e85dc585b9cd41390963a53843270e2680d/68747470733a2f2f62616467656e2e6e65742f7061636b61676973742f64742f67686f73747772697465722f636f6d706c69616e63653f636f6c6f723d463238443141)](https://packagist.org/packages/ghostwriter/compliance)[![PayPal](https://camo.githubusercontent.com/1efa90a77ba349664622c6961afafb52d3aaa44e609dfe3f3e262c7634f29efd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f70617970616c2d40636f6465706f65742d3030373943313f6c6f676f3d64617461253341696d616765253246737667253242786d6c25334262617365363425324350484e325a79423261575633516d393450534977494441674d6a51674d6a5169494868746247357a50534a6f644852774f693876643364334c6e637a4c6d39795a7938794d4441774c334e325a794925324250484268644767675a443069545445354c6a63784e5341324c6a457a4d324d754d6a51354c5445754f445932494441744d7934784d5330754f546b354c5451754d6a5932517a45334c6a597a4e4334324d6a49674d5455754e7a4978494441674d544d754d7a4133494442494e6934794d7a566a4c5334304d5467674d4330754f5445324c6a51304e433078494334344f446c4d4d69347a4d6a4d674d6a41754e6a4979597a41674c6a4d314e6934794e5334344c6a59324e533434614451754d7a4934624330754d6a55674d5334354e545a6a4c5334774f4451754d7a55314c6a45324e6934324d6a49754e446b344c6a59794d6d677a4c6a59324d324d754e444533494441674c6a677a4d6930754d6a59334c6a6b784e5330754e7a4578646930754d6a5933624334334e446b744e4334324d6a4a324c5334784e7a686a4c6a41344d7930754e4451304c6a55744c6a67754f5445314c53343461433431597a4d754e546334494441674e69347a4d6a55744d5334314d5341334c6a45314e6930314c6a6b314e5334304d5467744d5334344e6a63754d6a55794c544d754d7a63344c5334334e4463744e4334304e4455744c6a49314c53347a4e5455744c6a59324e6930754e6a49794c5445744c6a67344f5349675a6d6c7362443069497a41774f574e6b5a534976506a78775958526f49475139496b30784f5334334d5455674e6934784d7a4e6a4c6a49304f5330784c6a67324e6941774c544d754d5445744c6a6b354f5330304c6a49324e6b4d784e7934324d7a51754e6a4979494445314c6a63794d5341774944457a4c6a4d774e794177534459754d6a4d31597930754e444534494441744c6a6b784e6934304e4451744d5341754f446735544449754d7a497a494449774c6a59794d6d4d774943347a4e5459754d6a55754f4334324e6a55754f4767304c6a4d794f4777784c6a45324e4330334c6a4d334f4330754d44677a4c6a49324e324d754d4467304c5334314d7a4d754e5330754f4467354c6a6b354f4330754f446735614449754d44686a4e4334774e7a6b674d4341334c6a49304d5330784c6a63334f4341344c6a49304c5459754e7a55314c5334774f444d744c6a49324e7941774c53347a4e5459674d4330754e544d304969426d615778735053496a4d4445794d54593549693825324250484268644767675a44306954546b754e54597a494459754d544d7a597934774f4449744c6a49324e6934794e5330754e544d7a4c6a51354f4330754e7a45754d545932494441674c6a49314c5334774f5334304d5459744c6a4135614455754e446b30597934324e6a59674d4341784c6a4d7a4c6a4135494445754f444d754d5463344c6a45324e6941774943347a4d7a4d674d4341754e446b344c6a41344f5334784e6a67754d4467354c6a4d7a4e4334774f446b754e4445344c6a45334f4767754d6a566a4c6a49304f4334774f446b754e446b334c6a49324e6934334e4467754d7a55314c6a49304f4330784c6a67324e6941774c544d754d5445744c6a6b354f5330304c6a4d314e554d784e7934334d5463754e544d7a494445314c6a67774e4341774944457a4c6a4d35494442494e6934794d7a566a4c5334304d5467674d4330754f5445324c6a4d314e693078494334344f446c4d4d69347a4d6a4d674d6a41754e6a4979597a41674c6a4d314e6934794e5334344c6a59324e533434614451754d7a4934624445754d5459304c5463754d7a6334494445754d4467304c5463754f5446364969426d615778735053496a4d44417a4d4467334969382532425043397a646d63253242)](https://paypal.me/codepoet)[![Sponsors via GitHub](https://camo.githubusercontent.com/6b10885a76288cdc49c235b423f2727038a760785a4ffc210f70c89762fc66cd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73706f6e736f72732f67686f73747772697465723f6c6162656c3d53706f6e736f722b4067686f73747772697465722f636f6d706c69616e6365266c6f676f3d4769744875622b53706f6e736f7273)](https://github.com/sponsors/ghostwriter)

`Automation` - `CI/CD` &amp; `QA Testing` Test Automation for `PHP` via `GitHub Actions`.

Caution

This project is not finished yet, work in progress.

Todo
----

[](#todo)

- check the composer scripts section to see if the commands exists,

    - and report error/warning if not
    - and skip the job if not
- all tools should have a matching composer script name, i have already hardcoded the composer script for now, but this should be configurable (kebab case)

    - the command will be `composer automation:composer-require-checker`
        - or `composer automation:phpunit`
            - I like the `automation:` prefix, that way if you have a `phpunit` script,
            - it will not cause a conflict with the `automation:phpunit` script
- I will import the release automation into this project
- we will import the `composer.json` and `composer.lock` validation into this project

    - we will use the extensions field from the `composer.json` file to determine which PHP extensions to install
    - pass the extensions list as an argument to the docker image/workflow via shivammathur/setup-php@v2 (looks like this part is already done, but we need to test it.)
    - i did most of this... but i need to test it.
    - we have everything we need to extract information from both composer files

> \[!INFO\]
>
> Woot woot!! we did it! we have a working prototype! 🎉

\-- we need to import gpg keys from GitHub secrets `GPG_KEY`,`GPG_FINGERPRINT`--- to tag the release with a gpg signature --- to sign binaries with a gpg signature --- to sign the git commit with a gpg signature (automated composer.json update, if all tests pass)

- we need to add a command to add these commannds to the users composer.json file, for each supported tools they have in their composer.json file \[`require` and `require-dev`\].
- if it does not exist, we will add it to the `scripts` section.
- if it exists, continue.

```
{
    "scripts": {
        "automation:composer-require-checker": [
            "composer-require-checker check --config-file=composer-require-checker.json"
        ],
        "automation:phpunit": [
              "@phpunit --configuration=phpunit.xml --coverage-clover=coverage.xml"
        ]
    }
}
```

Workflow
--------

[](#workflow)

```
# .github/workflows/automation.yml
name: Automation

on:
  pull_request:
  push:
    branches:
      - "main"
      - "[0-9]+.[0-9]+.x" # 1.2.x
      - "v[0-9]+" # v1
  schedule:
    - cron: "0 * * * *" # Runs hourly
  workflow_dispatch: # Manually Trigger workflow

jobs:
  automation:
    uses: ghostwriter/compliance/.github/workflows/automation.yml@v1
    secrets:
      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
      GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
      INFECTION_DASHBOARD_API_KEY: ${{ secrets.INFECTION_DASHBOARD_API_KEY }}
```

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require ghostwriter/compliance --dev
```

```
Automation - Automatically configure and execute multiple CI/CD & QA Tests via GitHub Actions. 1.x-dev

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display help for the given command. When no command is given display help for the list command
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi|--no-ansi  Force (or disable --no-ansi) ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  help        Display help for a command
  list        List commands
  matrix      Generates a job matrix for Github Actions.
  workflow    Creates a "automation.yml" workflow file.
```

Usage
-----

[](#usage)

Generates `automation.php` configuration file, if it does not exist, and determines the job matrix for GitHub Actions.

```
vendor/bin/automation matrix
```

Generate `.github/workflows/automation.yml` workflow file for your project.

```
vendor/bin/automation workflow
```

Docker
------

[](#docker)

```
# Install from the command line:

docker pull ghcr.io/ghostwriter/compliance:v1

# Usage from the command line:

docker run -v $(PWD):/app -w=/app ghcr.io/ghostwriter/compliance workflow
docker run -v $(PWD):/app -w=/app ghcr.io/ghostwriter/compliance matrix

# Use as base image in Dockerfile:

FROM ghcr.io/ghostwriter/compliance:v1
```

Supported Tools ?!
------------------

[](#supported-tools-)

```
