|
13 | 13 | - main |
14 | 14 | workflow_dispatch: |
15 | 15 |
|
16 | | -jobs: |
| 16 | +permissions: |
| 17 | + contents: read |
17 | 18 |
|
18 | | - codecoverage: |
| 19 | +jobs: |
| 20 | + get-repo-name: |
19 | 21 | runs-on: ubuntu-latest |
20 | | - |
21 | | - services: |
22 | | - mysql: |
23 | | - image: mysql:5.7 # Password auth did not work on 8.0 on PHP 7.3, it did seem to work for PHP 7.4+ |
24 | | - env: # These are the same username and password as the wp-env container defaults |
25 | | - MYSQL_ROOT_PASSWORD: password |
26 | | - MYSQL_DATABASE: tests-wordpress |
27 | | - ports: # This mapping matches the .wp-env.json configuration |
28 | | - - 33306:3306 |
29 | | - options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 |
30 | | - |
31 | | - strategy: |
32 | | - matrix: # Supported PHP versions |
33 | | - php: [ '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ] |
34 | | - |
| 22 | + outputs: |
| 23 | + repository-name: ${{ steps.repo-name.outputs.name }} |
35 | 24 | steps: |
36 | | - - name: Checkout |
37 | | - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 |
38 | | - with: |
39 | | - fetch-depth: 0 # attempting to get all branch names. |
40 | | - |
41 | | - # TODO: a DEPLOY_KEY is needed to enable gh-pages for the first time (the branch can be created and pushed but |
42 | | - # it will not be reachable as a website). |
43 | | - # Consider @see https://github.com/peaceiris/actions-gh-pages |
44 | | - # - name: Check does gh-pages branch need to be created |
45 | | - # run: | |
46 | | - # git branch -l; |
47 | | - # if [[ $(git branch -l gh-pages) == "" ]]; then |
48 | | - # gh_pages_branch_needed=true; |
49 | | - # echo "gh-pages branch is needed"; |
50 | | - # else |
51 | | - # gh_pages_branch_needed=false |
52 | | - # echo "gh-pages branch already exists"; |
53 | | - # fi |
54 | | - # echo "GH_PAGES_BRANCH_NEEDED=$gh_pages_branch_needed" >> $GITHUB_ENV; |
55 | | - # mkdir gh-pages |
56 | | - # |
57 | | - # - name: Maybe create gh-pages branch |
58 | | - # if: ${{ env.GH_PAGES_BRANCH_NEEDED }} |
59 | | - # uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4.0.0 |
60 | | - # with: |
61 | | - # github_token: ${{ secrets.GITHUB_TOKEN }} |
62 | | - # publish_dir: ./gh-pages |
63 | | - # force_orphan: true |
64 | | - # allow_empty_commit: true |
65 | | - # commit_message: "🤖 Creating gh-pages branch" |
66 | | - |
67 | | - - name: Checkout GitHub Pages branch for code coverage report |
68 | | - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 |
69 | | - with: |
70 | | - ref: gh-pages |
71 | | - path: gh-pages |
72 | | - |
73 | | - - name: Install PHP |
74 | | - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.36.0 |
75 | | - with: |
76 | | - php-version: ${{ matrix.php }} |
77 | | - coverage: xdebug |
78 | | - tools: composer, jaschilz/php-coverage-badger |
79 | | - extensions: zip |
80 | | - |
81 | | - - name: Read .env.testing |
82 | | - uses: c-py/action-dotenv-to-setenv@925b5d99a3f1e4bd7b4e9928be4e2491e29891d9 # v5 |
83 | | - with: |
84 | | - env-file: .env.testing |
85 | | - |
86 | | - - name: Run composer install |
87 | | - continue-on-error: true |
88 | | - run: composer install -v |
89 | | - |
90 | | - - name: Allow writing to wp-content |
91 | | - if: ${{ hashFiles('wp-content') != '' }} # TODO: This may be incorrect since it's a directory. |
92 | | - run: sudo chmod -R a+w wp-content |
93 | | - |
94 | | - # On main, there will be a previous coverage report. On PRs we create a new directory using the commit SHA. |
95 | | - - name: Clear previous code coverage |
96 | | - if: ${{ (matrix.php == '7.3') && (github.ref == 'refs/heads/main') }} |
97 | | - run: | |
98 | | - rm -rf gh-pages/phpunit || true; |
99 | | - mkdir gh-pages/phpunit || true; |
| 25 | + - name: Extract repository name |
| 26 | + id: repo-name |
| 27 | + run: echo "name=$(echo ${{ github.repository }} | cut -d'/' -f2)" >> $GITHUB_OUTPUT |
100 | 28 |
|
101 | | - - name: Run unit tests |
102 | | - if: ${{ hashFiles('tests/phpunit/bootstrap.php') != '' }} # Only run unit tests if they are present. |
103 | | - run: XDEBUG_MODE=coverage vendor/bin/phpunit --bootstrap tests/phpunit/bootstrap.php --coverage-php tests/_output/unit.cov --debug |
104 | | - |
105 | | - - name: Run wpunit tests |
106 | | - run: XDEBUG_MODE=coverage vendor/bin/codecept run wpunit --coverage tests/_output/wpunit.cov --debug |
107 | | - |
108 | | - # For PRs, we'll generate the coverage report on each pushed commit |
109 | | - - name: Merge code coverage for PR |
110 | | - if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }} |
111 | | - run: | |
112 | | - vendor/bin/phpcov merge --clover clover.xml tests/_output/; |
113 | | - vendor/bin/phpcov merge --clover gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/clover.xml --php gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/phpunit.cov --html gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/html/ tests/_output/; |
114 | | -
|
115 | | - # On main, we want it output to a different path |
116 | | - - name: Merge code coverage for main |
117 | | - if: ${{ (matrix.php == '7.3') && (github.ref == 'refs/heads/main') }} |
118 | | - run: | |
119 | | - vendor/bin/phpcov merge --clover clover.xml tests/_output/; |
120 | | - vendor/bin/phpcov merge --clover gh-pages/phpunit/clover.xml --php gh-pages/phpunit/phpunit.cov --html gh-pages/phpunit/html/ tests/_output/; |
121 | | -
|
122 | | - # This makes the coverage percentage available in `{{ steps.coverage-percentage.outputs.coverage-rounded }}`. |
123 | | - - name: Check test coverage |
124 | | - if: ${{ matrix.php == '7.3' }} |
125 | | - uses: johanvanhelden/gha-clover-test-coverage-check@2543c79a701f179bd63aa14c16c6938c509b2cec # v1 |
126 | | - id: coverage-percentage |
127 | | - with: |
128 | | - percentage: 25 |
129 | | - exit: false |
130 | | - filename: clover.xml |
131 | | - rounded-precision: "0" |
132 | | - |
133 | | - # See: https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/ |
134 | | - - name: Add `.nojekyll` file so code coverage report successfully deploys to gh-pages |
135 | | - if: ${{ (matrix.php == '7.3') }} |
136 | | - working-directory: gh-pages |
137 | | - run: | |
138 | | - touch .nojekyll |
139 | | - git add -- .nojekyll * |
140 | | -
|
141 | | - - name: Update README coverage badge |
142 | | - if: ${{ (matrix.php == '7.3') && (github.ref == 'refs/heads/main') }} # only commit on main, on the PHP version we're using in production. |
143 | | - run: php-coverage-badger clover.xml gh-pages/phpunit/coverage.svg |
144 | | - |
145 | | - - name: Generate PR coverage badge |
146 | | - if: ${{ (matrix.php == '7.3') && github.event_name == 'pull_request' }} |
147 | | - run: php-coverage-badger clover.xml gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/coverage.svg |
148 | | - |
149 | | - - name: Commit code coverage to gh-pages |
150 | | - if: ${{ matrix.php == '7.3' }} |
151 | | - uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v7.1.0 |
152 | | - with: |
153 | | - repository: gh-pages |
154 | | - branch: gh-pages |
155 | | - commit_message: ${{ format('🤖 Save code coverage report to gh-pages {0}%', steps.coverage-percentage.outputs.coverage-rounded) }} |
156 | | - commit_options: "" |
157 | | - env: |
158 | | - GITHUB_TOKEN: "${{ github.token }}" |
159 | | - |
160 | | - - name: Add coverage badge to PR comment |
161 | | - if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }} |
162 | | - run: | |
163 | | - echo "[](https://newfold-labs.github.io/wp-module-performance/${{ github.event.pull_request.head.sha }}/phpunit/html/)" >> coverage-comment.md |
164 | | - echo "" >> coverage-comment.md |
165 | | - echo "" >> coverage-comment.md |
166 | | -
|
167 | | - - name: Add coverage report link to PR comment |
168 | | - if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }} |
169 | | - run: | |
170 | | - echo "${{ format('[project coverage report {0}%](https://newfold-labs.github.io/wp-module-performance/{1}/phpunit/html/) @ {2}', steps.coverage-percentage.outputs.coverage-rounded, github.event.pull_request.head.sha, github.event.pull_request.head.sha) }}" >> coverage-comment.md |
171 | | - echo "" >> coverage-comment.md |
172 | | - echo "" >> coverage-comment.md |
173 | | -
|
174 | | - - name: Add phpcov uncovered lines report to PR comment |
175 | | - if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }} |
176 | | - continue-on-error: true # phpcov can fail if there are no uncovered lines |
177 | | - run: | |
178 | | - BRANCHED_COMMIT=$(git rev-list origin..HEAD | tail -n 1); |
179 | | - echo "BRANCHED_COMMIT=$BRANCHED_COMMIT" |
180 | | - git diff $BRANCHED_COMMIT...${{ github.event.pull_request.head.sha }} > branch.diff; |
181 | | - cat branch.diff; |
182 | | - OUTPUT=${vendor/bin/phpcov patch-coverage --path-prefix $(pwd) ./gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/phpunit.cov branch.diff || true} |
183 | | - echo $OUTPUT; |
184 | | - echo "$OUTPUT" >> coverage-comment.md |
185 | | -
|
186 | | - - name: Add coverage PR comment |
187 | | - uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2 |
188 | | - if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }} |
189 | | - with: |
190 | | - message-id: coverage-report |
191 | | - message-path: coverage-comment.md |
| 29 | + codecoverage: |
| 30 | + needs: get-repo-name |
| 31 | + permissions: |
| 32 | + contents: write |
| 33 | + pull-requests: write |
| 34 | + uses: newfold-labs/workflows/.github/workflows/reusable-codecoverage.yml@main |
| 35 | + with: |
| 36 | + php-versions: '["7.4", "8.0", "8.1", "8.2", "8.3", "8.4"]' |
| 37 | + coverage-php-version: '7.4' |
| 38 | + repository-name: ${{ needs.get-repo-name.outputs.repository-name }} |
| 39 | + minimum-coverage: 25 |
| 40 | + secrets: |
| 41 | + repo_token: ${{ secrets.GITHUB_TOKEN }} |
0 commit comments