diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index f96d0371..89773507 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -8,9 +8,6 @@ on: # yamllint disable-line rule:truthy branches: - "main" -env: - PHP_EXTENSIONS: "mbstring" - jobs: code-coverage: name: "Code Coverage" @@ -33,14 +30,17 @@ jobs: uses: "shivammathur/setup-php@2.16.0" with: coverage: "xdebug" - extensions: "${{ env.PHP_EXTENSIONS }}" + extensions: "none, ctype, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + - name: "Set up problem matchers for phpunit/phpunit" run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" - name: "Determine composer cache directory" - uses: "./.github/actions/composer/composer/determine-cache-directory" + uses: "ergebnis/.github/actions/composer/determine-cache-directory@1.2.1" - name: "Cache dependencies installed with composer" uses: "actions/cache@v2.1.7" @@ -50,11 +50,13 @@ jobs: restore-keys: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-" - name: "Install ${{ matrix.dependencies }} dependencies with composer" - uses: "./.github/actions/composer/composer/install" + uses: "ergebnis/.github/actions/composer/install@1.2.1" with: dependencies: "${{ matrix.dependencies }}" - name: "Collect code coverage with Xdebug and phpunit/phpunit" + env: + XDEBUG_MODE: "coverage" run: "vendor/bin/phpunit --configuration=test/Unit/phpunit.xml --coverage-clover=.build/phpunit/logs/clover.xml" - name: "Send code coverage report to Codecov.io" @@ -80,7 +82,7 @@ jobs: uses: "actions/checkout@v2.4.0" - name: "Lint YAML files" - uses: "ibiqlik/action-yamllint@v3" + uses: "ibiqlik/action-yamllint@v3.1" with: config_file: ".yamllint.yaml" file_or_dir: "." @@ -90,14 +92,17 @@ jobs: uses: "shivammathur/setup-php@2.16.0" with: coverage: "none" - extensions: "${{ env.PHP_EXTENSIONS }}" + extensions: "none, ctype, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + - name: "Validate composer.json and composer.lock" - run: "composer validate --strict" + run: "composer validate --ansi --strict" - name: "Determine composer cache directory" - uses: "./.github/actions/composer/composer/determine-cache-directory" + uses: "ergebnis/.github/actions/composer/determine-cache-directory@1.2.1" - name: "Cache dependencies installed with composer" uses: "actions/cache@v2.1.7" @@ -107,12 +112,12 @@ jobs: restore-keys: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-" - name: "Install ${{ matrix.dependencies }} dependencies with composer" - uses: "./.github/actions/composer/composer/install" + uses: "ergebnis/.github/actions/composer/install@1.2.1" with: dependencies: "${{ matrix.dependencies }}" - name: "Run ergebnis/composer-normalize" - run: ".phive/composer-normalize --dry-run" + run: "composer normalize --ansi --dry-run" - name: "Create cache directory for friendsofphp/php-cs-fixer" run: "mkdir -p .build/php-cs-fixer" @@ -148,11 +153,14 @@ jobs: uses: "shivammathur/setup-php@2.16.0" with: coverage: "none" - extensions: "${{ env.PHP_EXTENSIONS }}" + extensions: "none, ctype, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + - name: "Determine composer cache directory" - uses: "./.github/actions/composer/composer/determine-cache-directory" + uses: "ergebnis/.github/actions/composer/determine-cache-directory@1.2.1" - name: "Cache dependencies installed with composer" uses: "actions/cache@v2.1.7" @@ -162,7 +170,7 @@ jobs: restore-keys: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-" - name: "Install ${{ matrix.dependencies }} dependencies with composer" - uses: "./.github/actions/composer/composer/install" + uses: "ergebnis/.github/actions/composer/install@1.2.1" with: dependencies: "${{ matrix.dependencies }}" @@ -190,11 +198,14 @@ jobs: uses: "shivammathur/setup-php@2.16.0" with: coverage: "xdebug" - extensions: "${{ env.PHP_EXTENSIONS }}" + extensions: "none, ctype, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + - name: "Determine composer cache directory" - uses: "./.github/actions/composer/composer/determine-cache-directory" + uses: "ergebnis/.github/actions/composer/determine-cache-directory@1.2.1" - name: "Cache dependencies installed with composer" uses: "actions/cache@v2.1.7" @@ -204,12 +215,14 @@ jobs: restore-keys: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-" - name: "Install ${{ matrix.dependencies }} dependencies with composer" - uses: "./.github/actions/composer/composer/install" + uses: "ergebnis/.github/actions/composer/install@1.2.1" with: dependencies: "${{ matrix.dependencies }}" - name: "Run mutation tests with Xdebug and infection/infection" - run: "vendor/bin/infection --configuration=infection.json" + env: + XDEBUG_MODE: "coverage" + run: "vendor/bin/infection --configuration=infection.json --logger-github" static-code-analysis: name: "Static Code Analysis" @@ -232,11 +245,14 @@ jobs: uses: "shivammathur/setup-php@2.16.0" with: coverage: "none" - extensions: "${{ env.PHP_EXTENSIONS }}" + extensions: "none, ctype, curl, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + - name: "Determine composer cache directory" - uses: "./.github/actions/composer/composer/determine-cache-directory" + uses: "ergebnis/.github/actions/composer/determine-cache-directory@1.2.1" - name: "Cache dependencies installed with composer" uses: "actions/cache@v2.1.7" @@ -246,10 +262,16 @@ jobs: restore-keys: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-" - name: "Install ${{ matrix.dependencies }} dependencies with composer" - uses: "./.github/actions/composer/composer/install" + uses: "ergebnis/.github/actions/composer/install@1.2.1" with: dependencies: "${{ matrix.dependencies }}" + - name: "Create cache directory for phpstan/phpstan" + run: "mkdir -p .build/phpstan" + + - name: "Run phpstan/phpstan" + run: "vendor/bin/phpstan --configuration=phpstan.neon --memory-limit=-1" + - name: "Create cache directory for vimeo/psalm" run: "mkdir -p .build/psalm" @@ -281,14 +303,17 @@ jobs: uses: "shivammathur/setup-php@2.16.0" with: coverage: "none" - extensions: "${{ env.PHP_EXTENSIONS }}" + extensions: "none, ctype, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + - name: "Set up problem matchers for phpunit/phpunit" run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" - name: "Determine composer cache directory" - uses: "./.github/actions/composer/composer/determine-cache-directory" + uses: "ergebnis/.github/actions/composer/determine-cache-directory@1.2.1" - name: "Cache dependencies installed with composer" uses: "actions/cache@v2.1.7" @@ -298,9 +323,12 @@ jobs: restore-keys: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-" - name: "Install ${{ matrix.dependencies }} dependencies with composer" - uses: "./.github/actions/composer/composer/install" + uses: "ergebnis/.github/actions/composer/install@1.2.1" with: dependencies: "${{ matrix.dependencies }}" - name: "Run unit tests with phpunit/phpunit" run: "vendor/bin/phpunit --configuration=test/Unit/phpunit.xml" + + - name: "Run integration tests with phpunit/phpunit" + run: "vendor/bin/phpunit --configuration=test/Integration/phpunit.xml" diff --git a/.github/workflows/merge.yaml b/.github/workflows/merge.yaml index 6aa0781c..41cffc01 100644 --- a/.github/workflows/merge.yaml +++ b/.github/workflows/merge.yaml @@ -29,65 +29,77 @@ jobs: with: github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" script: | - const pullRequest = context.payload.workflow_run.pull_requests[0] - const repository = context.repo + const pullRequest = context.payload.workflow_run.pull_requests[0]; const reviewers = [ "ergebnis-bot", - ] + ]; - await github.rest.pulls.requestReviewers({ - owner: repository.owner, - repo: repository.repo, - pull_number: pullRequest.number, - reviewers: reviewers, - }) + try { + await github.rest.pulls.requestReviewers({ + owner: context.repo.owner, + pull_number: pullRequest.number, + repo: context.repo.repo, + reviewers: reviewers, + }); + } catch (error) { + core.setFailed(error.message); + } - name: "Assign @ergebnis-bot" uses: "actions/github-script@v5" with: github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" script: | - const pullRequest = context.payload.workflow_run.pull_requests[0] - const repository = context.repo + const pullRequest = context.payload.workflow_run.pull_requests[0]; const assignees = [ "ergebnis-bot", - ] + ]; - await github.rest.issues.addAssignees({ - owner: repository.owner, - repo: repository.repo, - assignees: assignees, - issue_number: pullRequest.number - }) + try { + await github.rest.issues.addAssignees({ + assignees: assignees, + issue_number: pullRequest.number + owner: context.repo.owner, + repo: context.repo.repo, + }); + } catch (error) { + core.setFailed(error.message); + } - name: "Approve pull request" uses: "actions/github-script@v5" with: github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" script: | - const pullRequest = context.payload.workflow_run.pull_requests[0] - const repository = context.repo + const pullRequest = context.payload.workflow_run.pull_requests[0]; - await github.rest.pulls.createReview({ - event: "APPROVE", - owner: repository.owner, - repo: repository.repo, - pull_number: pullRequest.number, - }) + try { + await github.rest.pulls.createReview({ + event: "APPROVE", + owner: context.repo.owner, + pull_number: pullRequest.number, + repo: context.repo.repo, + }); + } catch (error) { + core.setFailed(error.message); + } - name: "Merge pull request" uses: "actions/github-script@v5" with: github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" script: | - const pullRequest = context.payload.workflow_run.pull_requests[0] - const repository = context.repo + const pullRequest = context.payload.workflow_run.pull_requests[0]; - await github.rest.pulls.merge({ - merge_method: "merge", - owner: repository.owner, - pull_number: pullRequest.number, - repo: repository.repo, - }) + try { + await github.rest.pulls.merge({ + merge_method: "merge", + owner: context.repo.owner, + pull_number: pullRequest.number, + repo: context.repo.repo, + }); + } catch (error) { + core.setFailed(error.message); + } diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d911ac32..318dd2dd 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -14,37 +14,24 @@ jobs: runs-on: "ubuntu-latest" steps: - - name: "Determine release tag" + - name: "Determine tag" run: "echo \"RELEASE_TAG=${GITHUB_REF#refs/tags/}\" >> $GITHUB_ENV" - - name: "Determine release body" - uses: "actions/github-script@v5" - with: - github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" - script: | - const repository = context.repo; - - const response = await github.rest.repos.generateReleaseNotes({ - owner: repository.owner, - repo: repository.repo, - tag_name: "${{ env.RELEASE_TAG }}", - }) - - core.exportVariable("RELEASE_BODY", response.data.body) - - name: "Create release" uses: "actions/github-script@v5" with: github-token: "${{ secrets.ERGEBNIS_BOT_TOKEN }}" script: | - const repository = context.repo - - await github.rest.repos.createRelease({ - body: "${{ env.RELEASE_BODY }}", - draft: false, - name: "${{ env.RELEASE_TAG }}", - owner: repository.owner, - prerelease: false, - repo: repository.repo, - tag_name: "${{ env.RELEASE_TAG }}", - }) + try { + await github.rest.repos.createRelease({ + draft: false, + generate_release_notes: true, + name: process.env.RELEASE_TAG, + owner: context.repo.owner, + prerelease: false, + repo: context.repo.repo, + tag_name: process.env.RELEASE_TAG, + }); + } catch (error) { + core.setFailed(error.message); + } diff --git a/.github/workflows/renew.yaml b/.github/workflows/renew.yaml index 5c520164..ad9b7b46 100644 --- a/.github/workflows/renew.yaml +++ b/.github/workflows/renew.yaml @@ -6,9 +6,6 @@ on: # yamllint disable-line rule:truthy schedule: - cron: "0 0 1 1 *" -env: - PHP_EXTENSIONS: "mbstring" - jobs: license: name: "License" @@ -33,14 +30,17 @@ jobs: uses: "shivammathur/setup-php@2.16.0" with: coverage: "none" - extensions: "${{ env.PHP_EXTENSIONS }}" + extensions: "none, ctype, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" + - name: "Set up problem matchers for PHP" + run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" + - name: "Validate composer.json and composer.lock" - run: "composer validate --strict" + run: "composer validate --ansi --strict" - name: "Determine composer cache directory" - uses: "./.github/actions/composer/composer/determine-cache-directory" + uses: "ergebnis/.github/actions/composer/determine-cache-directory@1.2.1" - name: "Cache dependencies installed with composer" uses: "actions/cache@v2.1.7" @@ -50,7 +50,7 @@ jobs: restore-keys: "php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-" - name: "Install ${{ matrix.dependencies }} dependencies with composer" - uses: "./.github/actions/composer/composer/install" + uses: "ergebnis/.github/actions/composer/install@1.2.1" with: dependencies: "${{ matrix.dependencies }}" diff --git a/.github/workflows/triage.yaml b/.github/workflows/triage.yaml index d606e929..a1ba09b5 100644 --- a/.github/workflows/triage.yaml +++ b/.github/workflows/triage.yaml @@ -22,24 +22,33 @@ jobs: const branchPrefixLabels = { feature: "enhancement", fix: "bug", - } + }; - const pullRequest = context.payload.pull_request - const repository = context.repo + const pullRequest = context.payload.pull_request; - const branchName = pullRequest.head.ref + const branchName = pullRequest.head.ref; const matches = branchName.match(new RegExp('^([^/]+)\/')); - if (matches instanceof Array && branchPrefixLabels.hasOwnProperty(matches[1])) { - const label = branchPrefixLabels[matches[1]] + if (!matches instanceof Array) { + return; + } + + if (!branchPrefixLabels.hasOwnProperty(matches[1])) { + return; + } + + const label = branchPrefixLabels[matches[1]]; - github.rest.issues.addLabels({ + try { + await github.rest.issues.addLabels({ issue_number: pullRequest.number, labels: [ - label + label, ], - owner: repository.owner, - repo: repository.repo, + owner: context.repo.owner, + repo: context.repo.repo, }); + } catch (error) { + core.setFailed(error.message); }