-
-
Notifications
You must be signed in to change notification settings - Fork 0
121 lines (106 loc) · 3.88 KB
/
Copy pathphp-tests.yml
File metadata and controls
121 lines (106 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
name: "Check PHP"
on:
workflow_call:
# see https://docs.github.com/en/actions/using-workflows/reusing-workflows#using-inputs-and-secrets-in-a-reusable-workflow
inputs:
gistID:
required: false
type: string
composerRequire:
required: false
type: string
composerRequireDev:
required: false
type: string
composerRemove:
required: false
type: string
dirsRemove:
required: false
type: string
gistOnPhpVersion:
required: false
type: string
default: "8.1"
badgeOnBranch:
required: false
type: string
default: "main"
badgeOnPullRequest:
required: false
type: boolean
default: false
phpVersion:
required: false
type: string
default: "8.1"
workingDirectory:
required: false
type: string
default: "."
secrets:
GIST_SECRET:
required: false
jobs:
tests:
name: "Tests ${{ inputs.phpVersion }} (${{ matrix.dependencies }})"
runs-on: "ubuntu-latest"
defaults:
run:
working-directory: "${{ inputs.workingDirectory }}"
strategy:
fail-fast: false
matrix:
dependencies:
- "lowest"
- "highest"
steps:
- name: "Checkout"
uses: actions/checkout@v7
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "xdebug"
php-version: "${{ inputs.phpVersion }}"
- name: "Update composer with correct php version"
run: "composer require php:'>=${{ inputs.phpVersion }}' --no-update"
- name: "Require dev before install"
if: ${{ inputs.composerRequireDev != '' }}
run: "composer require --dev ${{ inputs.composerRequireDev }} --no-update"
- name: "Require before install"
if: ${{ inputs.composerRequire != '' }}
run: "composer require ${{ inputs.composerRequire }} --no-update"
- name: "Install lowest dependencies"
if: ${{ matrix.dependencies == 'lowest' }}
run: "composer update --prefer-lowest --no-interaction --no-progress"
- name: "Install highest dependencies"
if: ${{ matrix.dependencies == 'highest' }}
run: "composer update --no-interaction --no-progress"
- name: "Remove composer packages"
if: ${{ inputs.composerRemove != '' }}
run: "composer remove ${{ inputs.composerRemove }}"
- name: "Remove folders"
if: ${{ inputs.dirsRemove != '' }}
run: "rm -rf ${{ inputs.dirsRemove }}"
- name: "Tests"
id: tests
continue-on-error: false
run: |
vendor/bin/phpunit --coverage-text=coverage.txt --colors=never
cat coverage.txt
# Using \K drops everything before the match, eliminating the need for a second grep
# -m 1 ensures we only grab the overall summary line coverage
echo "coverage=$(grep -m 1 -Po 'Lines:\s*\K[0-9.]+' coverage.txt)" >> $GITHUB_OUTPUT
# TODO on pull request add comment?
- name: "Create badge"
if: ${{ inputs.gistID != '' && inputs.gistOnPhpVersion == inputs.phpVersion && matrix.dependencies == 'highest' && steps.tests.outputs.coverage != '' && ((inputs.badgeOnBranch != '' && github.ref == format('refs/heads/{0}', inputs.badgeOnBranch)) || (inputs.badgeOnPullRequest && github.event_name == 'pull_request')) }}
uses: pionl/dynamic-badges-action@f2bde01f27576417b46298af6fb12801fcd97b1c
with:
auth: ${{ secrets.GIST_SECRET }}
gistID: ${{ inputs.gistID }}
filename: coverage.json
label: Coverage
# TODO colors?
message: ${{ steps.tests.outputs.coverage }}
color: success