diff --git a/.dependabot/config.yaml b/.dependabot/config.yaml deleted file mode 100644 index 7a12de73..00000000 --- a/.dependabot/config.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# https://dependabot.com/docs/config-file/ - -version: 1 - -update_configs: - - commit_message: - include_scope: true - prefix: "Build" - default_labels: - - "dependency" - directory: "/" - package_manager: "php:composer" - update_schedule: "live" - version_requirement_updates: "increase_versions" diff --git a/.gitattributes b/.gitattributes index 36d16720..d9c29c46 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,3 @@ -/.dependabot/ export-ignore /.github/ export-ignore /test/ export-ignore /.editorconfig export-ignore diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index faab1b33..4a07dd7e 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -8,10 +8,23 @@ For details, take a look at the following workflow configuration files: - [`workflows/prune.yaml`](workflows/prune.yaml) - [`workflows/release.yaml`](workflows/release.yaml) - [`workflows/renew.yaml`](workflows/renew.yaml) +- [`workflows/triage.yaml`](workflows/triage.yaml) ## Coding Standards -We are using [`friendsofphp/php-cs-fixer`](https://github.com/FriendsOfPHP/PHP-CS-Fixer) to enforce coding standards. +We are using [`ergebnis/composer-normalize`](https://github.com/ergebnis/composer-normalize) to normalize `composer.json`. + +We are using [`yamllint`](https://github.com/adrienverge/yamllint) to enforce coding standards in YAML files. + +If you do not have `yamllint` installed yet, run + +``` +$ brew install yamllint +``` + +to install `yamllint`. + +We are using [`friendsofphp/php-cs-fixer`](https://github.com/FriendsOfPHP/PHP-CS-Fixer) to enforce coding standards in PHP files. Run diff --git a/.github/settings.yml b/.github/settings.yml index 96d1fefa..19f9ad12 100644 --- a/.github/settings.yml +++ b/.github/settings.yml @@ -14,23 +14,23 @@ branches: required_approving_review_count: 1 required_status_checks: contexts: + - "Code Coverage (7.4, locked)" - "Coding Standards (7.1, locked)" - "Dependency Analysis (7.4, locked)" + - "Mutation Tests (7.4, locked)" - "Static Code Analysis (7.4, locked)" - - "Tests (7.1, lowest)" - - "Tests (7.1, locked)" - "Tests (7.1, highest)" - - "Tests (7.2, lowest)" - - "Tests (7.2, locked)" + - "Tests (7.1, locked)" + - "Tests (7.1, lowest)" - "Tests (7.2, highest)" - - "Tests (7.3, lowest)" - - "Tests (7.3, locked)" + - "Tests (7.2, locked)" + - "Tests (7.2, lowest)" - "Tests (7.3, highest)" - - "Tests (7.4, lowest)" - - "Tests (7.4, locked)" + - "Tests (7.3, locked)" + - "Tests (7.3, lowest)" - "Tests (7.4, highest)" - - "Code Coverage (7.4, locked)" - - "Mutation Tests (7.4, locked)" + - "Tests (7.4, locked)" + - "Tests (7.4, lowest)" strict: false restrictions: diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 05eb2267..a6184b2b 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -53,7 +53,7 @@ jobs: run: "echo \"::set-output name=directory::$(composer config cache-dir)\"" - name: "Cache dependencies installed with composer" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: "${{ steps.determine-composer-cache-directory.outputs.directory }}" key: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('composer.lock') }}" @@ -78,7 +78,7 @@ jobs: run: "mkdir -p .build/php-cs-fixer" - name: "Cache cache directory for friendsofphp/php-cs-fixer" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: ".build/php-cs-fixer" key: "php-${{ matrix.php-version }}-php-cs-fixer-${{ hashFiles('composer.lock') }}" @@ -116,7 +116,7 @@ jobs: run: "echo \"::set-output name=directory::$(composer config cache-dir)\"" - name: "Cache dependencies installed with composer" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: "${{ steps.determine-composer-cache-directory.outputs.directory }}" key: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('composer.lock') }}" @@ -166,11 +166,11 @@ jobs: run: "echo \"::set-output name=directory::$(composer config cache-dir)\"" - name: "Cache dependencies installed with composer" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: "${{ steps.determine-composer-cache-directory.outputs.directory }}" - key: "${{ matrix.php-version }}-composer-locked-${{ hashFiles('composer.lock') }}" - restore-keys: "${{ matrix.php-version }}-composer-locked-" + key: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('composer.lock') }}" + restore-keys: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-" - name: "Install lowest dependencies from composer.json" if: "matrix.dependencies == 'lowest'" @@ -188,7 +188,7 @@ jobs: run: "mkdir -p .build/phpstan" - name: "Cache cache directory for phpstan/phpstan" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: ".build/phpstan" key: "php-${{ matrix.php-version }}-phpstan-${{ github.sha }}" @@ -201,7 +201,7 @@ jobs: run: "mkdir -p .build/psalm" - name: "Cache cache directory for vimeo/psalm" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: ".build/psalm" key: "php-${{ matrix.php-version }}-psalm-${{ github.sha }}" @@ -244,7 +244,7 @@ jobs: run: "echo \"::set-output name=directory::$(composer config cache-dir)\"" - name: "Cache dependencies installed with composer" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: "${{ steps.determine-composer-cache-directory.outputs.directory }}" key: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('composer.lock') }}" @@ -300,7 +300,7 @@ jobs: run: "echo \"::set-output name=directory::$(composer config cache-dir)\"" - name: "Cache dependencies installed with composer" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: "${{ steps.determine-composer-cache-directory.outputs.directory }}" key: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('composer.lock') }}" @@ -358,7 +358,7 @@ jobs: run: "echo \"::set-output name=directory::$(composer config cache-dir)\"" - name: "Cache dependencies installed with composer" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: "${{ steps.determine-composer-cache-directory.outputs.directory }}" key: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('composer.lock') }}" @@ -399,14 +399,14 @@ jobs: github.event.action == 'reopened' || github.event.action == 'synchronize' ) && ( - (github.actor == 'dependabot-preview[bot]' && startsWith(github.event.pull_request.title, 'Build(deps-dev)')) || + (github.actor == 'dependabot[bot]' && startsWith(github.event.pull_request.title, 'Build(deps-dev)')) || (github.actor == 'ergebnis-bot' && github.event.pull_request.title == 'Enhancement: Update license year') || (github.actor == 'localheinz' && contains(github.event.pull_request.labels.*.name, 'merge')) ) steps: - name: "Request review from @ergebnis-bot" - uses: "actions/github-script@0.8.0" + uses: "actions/github-script@v2" with: github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" script: | @@ -424,11 +424,8 @@ jobs: reviewers: reviewers, }) - - name: "Wait" - run: "sleep 3" - - name: "Assign @ergebnis-bot" - uses: "actions/github-script@0.8.0" + uses: "actions/github-script@v2" with: github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" script: | @@ -446,11 +443,8 @@ jobs: repo: repository.repo, }) - - name: "Wait" - run: "sleep 3" - - name: "Approve pull request" - uses: "actions/github-script@0.8.0" + uses: "actions/github-script@v2" if: "github.actor != 'ergebnis-bot'" with: github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" @@ -465,11 +459,8 @@ jobs: repo: repository.repo, }) - - name: "Wait" - run: "sleep 3" - - name: "Merge pull request" - uses: "actions/github-script@0.8.0" + uses: "actions/github-script@v2" with: github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" script: | diff --git a/.github/workflows/prune.yaml b/.github/workflows/prune.yaml index 449e4652..99a34217 100644 --- a/.github/workflows/prune.yaml +++ b/.github/workflows/prune.yaml @@ -14,7 +14,7 @@ jobs: steps: - name: "Prune issues and pull requests" - uses: "actions/stale@v1" + uses: "actions/stale@v3" with: days-before-close: 5 days-before-stale: 60 diff --git a/.github/workflows/renew.yaml b/.github/workflows/renew.yaml index f82995d6..e2da07be 100644 --- a/.github/workflows/renew.yaml +++ b/.github/workflows/renew.yaml @@ -42,7 +42,7 @@ jobs: run: "echo \"::set-output name=directory::$(composer config cache-dir)\"" - name: "Cache dependencies installed with composer" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: "${{ steps.determine-composer-cache-directory.outputs.directory }}" key: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('**/composer.lock') }}" @@ -64,7 +64,7 @@ jobs: run: "mkdir -p .build/php-cs-fixer" - name: "Cache cache directory for friendsofphp/php-cs-fixer" - uses: "actions/cache@v1" + uses: "actions/cache@v2" with: path: ".build/php-cs-fixer" key: "php-${{ matrix.php-version }}-php-cs-fixer-${{ hashFiles('**/composer.lock') }}" diff --git a/.github/workflows/triage.yaml b/.github/workflows/triage.yaml new file mode 100644 index 00000000..10688d0a --- /dev/null +++ b/.github/workflows/triage.yaml @@ -0,0 +1,43 @@ +name: "Triage" + +on: # yamllint disable-line rule:truthy + pull_request: + types: + - "opened" + +jobs: + label: + name: "Label" + + runs-on: "ubuntu-latest" + + steps: + - name: "Add labels based on branch name" + uses: "actions/github-script@v2" + with: + github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" + script: | + const branchPrefixLabels = { + feature: "enhancement", + fix: "bug", + } + + const pullRequest = context.payload.pull_request + const repository = context.repo + + const branchName = pullRequest.head.ref + + const matches = branchName.match(new RegExp('^([^/]+)\/')); + + if (matches instanceof Array && branchPrefixLabels.hasOwnProperty(matches[1])) { + const label = branchPrefixLabels[matches[1]] + + github.issues.addLabels({ + issue_number: pullRequest.number, + labels: [ + label + ], + owner: repository.owner, + repo: repository.repo, + }); + } diff --git a/.php_cs b/.php_cs index ba7167b2..14a633e1 100644 --- a/.php_cs +++ b/.php_cs @@ -12,7 +12,7 @@ declare(strict_types=1); */ use Ergebnis\License; -use Ergebnis\PhpCsFixer\Config; +use Ergebnis\PhpCsFixer; $license = License\Type\MIT::markdown( __DIR__ . '/LICENSE.md', @@ -26,14 +26,13 @@ $license = License\Type\MIT::markdown( $license->save(); -$config = Config\Factory::fromRuleSet(new Config\RuleSet\Php71($license->header())); +$config = PhpCsFixer\Config\Factory::fromRuleSet(new PhpCsFixer\Config\RuleSet\Php71($license->header())); $config->getFinder() ->ignoreDotFiles(false) ->in(__DIR__) ->exclude([ '.build/', - '.dependabot/', '.github/', '.notes/', ]) diff --git a/Makefile b/Makefile index 37195136..88f8a9b2 100644 --- a/Makefile +++ b/Makefile @@ -10,14 +10,15 @@ code-coverage: vendor ## Collects coverage from running unit tests with phpunit/ vendor/bin/phpunit --configuration=test/Unit/phpunit.xml --coverage-text .PHONY: coding-standards -coding-standards: vendor ## Fixes code style issues with friendsofphp/php-cs-fixer +coding-standards: vendor ## Normalizes composer.json with ergebnis/composer-normalize, lints YAML files with yamllint and fixes code style issues with friendsofphp/php-cs-fixer + composer normalize yamllint -c .yamllint.yaml --strict . mkdir -p .build/php-cs-fixer vendor/bin/php-cs-fixer fix --config=.php_cs --diff --diff-format=udiff --verbose .PHONY: dependency-analysis dependency-analysis: vendor ## Runs a dependency analysis with maglnet/composer-require-checker - docker run --interactive --rm --tty --volume ${PWD}:/app webfactory/composer-require-checker:2.1.0 + tools/composer-require-checker check .PHONY: help help: ## Displays this list of targets with descriptions @@ -52,4 +53,3 @@ tests: vendor ## Runs auto-review, unit, and integration tests with phpunit/phpu vendor: composer.json composer.lock composer validate --strict composer install --no-interaction --no-progress --no-suggest - composer normalize diff --git a/README.md b/README.md index 1b10faf0..16be3c11 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Provides a configuration factory and multiple rule sets for [`friendsofphp/php-c Run -```sh +```shell $ composer require --dev ergebnis/php-cs-fixer-config ``` @@ -281,3 +281,7 @@ Please have a look at [`LICENSE.md`](LICENSE.md). This project is inspired by and also replaces [`localheinz/php-cs-fixer-config`](https://github.com/localheinz/php-cs-fixer-config). The rule set [`Ergebnis\PhpCsFixer\RuleSet\Laravel6`](src/RuleSet/Laravel6.php) is based on [`laravel-shift/.php_cs.laravel.php`](https://gist.github.com/laravel-shift/cab527923ed2a109dda047b97d53c200). + +## Curious what I am building? + +:mailbox_with_mail: [Subscribe to my list](https://localheinz.com/projects/), and I will occasionally send you an email to let you know what I am working on. diff --git a/infection.json b/infection.json index c7774fc5..09dc2fcd 100644 --- a/infection.json +++ b/infection.json @@ -1,14 +1,14 @@ { - "timeout": 10, + "logs": { + "text": ".build/infection/infection-log.txt" + }, + "phpUnit": { + "configDir": "test\/Unit" + }, "source": { "directories": [ "src" ] }, - "phpUnit": { - "configDir": "test\/Unit" - }, - "logs": { - "text": ".build/infection/infection-log.txt" - } + "timeout": 10 }