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 3197d614..4a07dd7e 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -8,9 +8,12 @@ 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 [`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 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..455760a4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,26 @@ +# https://help.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates#target-branch + +version: 2 + +updates: + - commit-message: + include: "scope" + prefix: "Build" + directory: "/" + labels: + - "dependency" + open-pull-requests-limit: 10 + package-ecosystem: "composer" + schedule: + interval: "daily" + + - commit-message: + include: "scope" + prefix: "Build" + directory: "/" + labels: + - "dependency" + open-pull-requests-limit: 10 + package-ecosystem: "github-actions" + schedule: + interval: "daily" diff --git a/.github/settings.yml b/.github/settings.yml index e9abbbbd..e3094d06 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 f6a47baa..50a33d3e 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 d8fe33cd..fdc1c32d 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 80f1be44..369b248e 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,8 @@ code-coverage: vendor ## Collects coverage from running unit tests with phpunit/ vendor/bin/phpunit --configuration=test/Unit/phpunit.xml --coverage-text --prepend=.build/phpunit/xdebug-filter.php .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 @@ -54,4 +55,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 90145827..1d441414 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Provides an abstraction of an open-source license. Run -``` +```shell $ composer require --dev ergebnis/license ``` @@ -161,3 +161,7 @@ Please have a look at [`CODE_OF_CONDUCT.md`](https://github.com/ergebnis/.github This package is licensed using the MIT License. Please have a look at [`LICENSE.md`](LICENSE.md). + +## 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 }