-
-
Notifications
You must be signed in to change notification settings - Fork 1
131 lines (109 loc) · 3.38 KB
/
php.yml
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
122
123
124
125
126
127
128
129
130
131
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow
name: Tests
on:
push:
pull_request:
jobs:
byte_level:
name: 0️⃣ Byte-level
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Check file permissions
run: |
test $(find . -type f -not -path './.git/*' -executable) ==
- name: Find non-printable ASCII characters
run: |
! LC_ALL=C.UTF-8 find ./src -type f -name *.php -print0 | xargs -0 -- grep -PHn [^ -~]
syntax_errors:
name: 1️⃣ Syntax errors
runs-on: ubuntu-latest
steps:
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: latest
tools: parallel-lint
- name: Checkout code
uses: actions/checkout@v4
- name: Validate Composer configuration
run: composer validate --strict
- name: Check source code for syntax errors
run: composer exec -- parallel-lint src/
unit_tests:
name: 2️⃣ Unit and Feature tests
needs:
- byte_level
- syntax_errors
runs-on: ubuntu-latest
strategy:
matrix:
php-version:
- 8.1
- 8.2
- 8.3
laravel-constraint:
- 10.*
- 11.*
dependencies:
- lowest
- highest
exclude:
- php-version: 8.1
laravel-constraint: 11.*
steps:
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
extensions: mbstring, intl
coverage: xdebug
- name: Checkout code
uses: actions/checkout@v4
- name: Install dependencies
uses: ramsey/composer-install@v3
with:
dependency-versions: ${{ matrix.dependencies }}
composer-options: --with=illuminate/database:${{ matrix.laravel-constraint }}
- name: Execute unit tests
run: composer run-script test
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
static_analysis:
name: 3️⃣ Static Analysis
needs:
- byte_level
- syntax_errors
runs-on: ubuntu-latest
steps:
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
tools: phpstan
php-version: latest
coverage: none
- name: Checkout code
uses: actions/checkout@v4
- name: Validate Composer configuration
run: composer validate --strict
- name: Install dependencies
uses: ramsey/composer-install@v3
- name: Execute static analysis
run: composer exec -- phpstan analyze -l 5 src/
exported_files:
name: 4️⃣ Exported files
needs:
- byte_level
- syntax_errors
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Check exported files
run: |
EXPECTED=LICENSE.md,README.md,composer.json
CURRENT=$(git archive HEAD | tar --list --exclude=src --exclude=src/* --exclude=.stubs --exclude=.stubs/* --exclude=lang --exclude=lang/* --exclude=config --exclude=config/* --exclude=database --exclude=database/* --exclude=resources --exclude=resources/* | paste -s -d ,)
echo CURRENT =${CURRENT}
echo EXPECTED=${EXPECTED}
test ${CURRENT} == ${EXPECTED}