1
1
<?php
2
2
3
- const BRANCHES = ['master ' , 'PHP-8.3 ' , 'PHP-8.2 ' , 'PHP-8.1 ' , 'PHP-8.0 ' ];
3
+ const BRANCHES = [
4
+ ['name ' => 'master ' , 'ref ' => 'master ' , 'version ' => ['major ' => 8 , 'minor ' => 5 ]],
5
+ ['name ' => 'PHP-8.4 ' , 'ref ' => 'PHP-8.4 ' , 'version ' => ['major ' => 8 , 'minor ' => 4 ]],
6
+ ['name ' => 'PHP-8.3 ' , 'ref ' => 'PHP-8.3 ' , 'version ' => ['major ' => 8 , 'minor ' => 3 ]],
7
+ ['name ' => 'PHP-8.2 ' , 'ref ' => 'PHP-8.2 ' , 'version ' => ['major ' => 8 , 'minor ' => 2 ]],
8
+ ['name ' => 'PHP-8.1 ' , 'ref ' => 'PHP-8.1 ' , 'version ' => ['major ' => 8 , 'minor ' => 1 ]],
9
+ ];
4
10
5
11
function get_branch_commit_cache_file_path (): string {
6
12
return dirname (__DIR__ ) . '/branch-commit-cache.json ' ;
7
13
}
8
14
9
- function get_branch_matrix (array $ branches ) {
10
- $ result = array_map (function ($ branch ) {
11
- $ branch_key = strtoupper (str_replace ('. ' , '' , $ branch ));
12
- return [
13
- 'name ' => $ branch_key ,
14
- 'ref ' => $ branch ,
15
- ];
16
- }, $ branches );
17
-
18
- return $ result ;
19
- }
20
-
21
15
function get_branches () {
22
16
$ branch_commit_cache_file = get_branch_commit_cache_file_path ();
23
17
$ branch_commit_map = [];
@@ -27,19 +21,19 @@ function get_branches() {
27
21
28
22
$ changed_branches = [];
29
23
foreach (BRANCHES as $ branch ) {
30
- $ previous_commit_hash = $ branch_commit_map [$ branch ] ?? null ;
31
- $ current_commit_hash = trim (shell_exec ('git rev-parse origin/ ' . $ branch ));
24
+ $ previous_commit_hash = $ branch_commit_map [$ branch[ ' ref ' ] ] ?? null ;
25
+ $ current_commit_hash = trim (shell_exec ('git rev-parse origin/ ' . $ branch[ ' ref ' ] ));
32
26
33
27
if ($ previous_commit_hash !== $ current_commit_hash ) {
34
28
$ changed_branches [] = $ branch ;
35
29
}
36
30
37
- $ branch_commit_map [$ branch ] = $ current_commit_hash ;
31
+ $ branch_commit_map [$ branch[ ' ref ' ] ] = $ current_commit_hash ;
38
32
}
39
33
40
34
file_put_contents ($ branch_commit_cache_file , json_encode ($ branch_commit_map ));
41
35
42
- return get_branch_matrix ( $ changed_branches) ;
36
+ return $ changed_branches ;
43
37
}
44
38
45
39
function get_matrix_include (array $ branches ) {
@@ -55,29 +49,27 @@ function get_matrix_include(array $branches) {
55
49
'test_function_jit ' => false ,
56
50
'asan ' => true ,
57
51
];
58
- if ($ branch ['ref ' ] !== 'PHP-8.0 ' ) {
59
- $ jobs [] = [
60
- 'name ' => '_REPEAT ' ,
61
- 'branch ' => $ branch ,
62
- 'debug ' => true ,
63
- 'zts ' => false ,
64
- 'run_tests_parameters ' => '--repeat 2 ' ,
65
- 'timeout_minutes ' => 360 ,
66
- 'test_function_jit ' => true ,
67
- 'asan ' => false ,
68
- ];
69
- $ jobs [] = [
70
- 'name ' => '_VARIATION ' ,
71
- 'branch ' => $ branch ,
72
- 'debug ' => true ,
73
- 'zts ' => true ,
74
- 'configuration_parameters ' => "CFLAGS='-DZEND_RC_DEBUG=1 -DPROFITABILITY_CHECKS=0 -DZEND_VERIFY_FUNC_INFO=1' " ,
52
+ $ jobs [] = [
53
+ 'name ' => '_REPEAT ' ,
54
+ 'branch ' => $ branch ,
55
+ 'debug ' => true ,
56
+ 'zts ' => false ,
57
+ 'run_tests_parameters ' => '--repeat 2 ' ,
58
+ 'timeout_minutes ' => 360 ,
59
+ 'test_function_jit ' => true ,
60
+ 'asan ' => false ,
61
+ ];
62
+ $ jobs [] = [
63
+ 'name ' => '_VARIATION ' ,
64
+ 'branch ' => $ branch ,
65
+ 'debug ' => true ,
66
+ 'zts ' => true ,
67
+ 'configuration_parameters ' => "CFLAGS='-DZEND_RC_DEBUG=1 -DPROFITABILITY_CHECKS=0 -DZEND_VERIFY_FUNC_INFO=1 -DZEND_VERIFY_TYPE_INFERENCE' " ,
75
68
'run_tests_parameters ' => '-d zend_test.observer.enabled=1 -d zend_test.observer.show_output=0 ' ,
76
- 'timeout_minutes ' => 360 ,
77
- 'test_function_jit ' => true ,
78
- 'asan ' => false ,
79
- ];
80
- }
69
+ 'timeout_minutes ' => 360 ,
70
+ 'test_function_jit ' => true ,
71
+ 'asan ' => false ,
72
+ ];
81
73
}
82
74
return $ jobs ;
83
75
}
@@ -101,19 +93,88 @@ function get_windows_matrix_include(array $branches) {
101
93
return $ jobs ;
102
94
}
103
95
96
+ function get_macos_matrix_include (array $ branches ) {
97
+ $ jobs = [];
98
+ foreach ($ branches as $ branch ) {
99
+ foreach ([true , false ] as $ debug ) {
100
+ foreach ([true , false ] as $ zts ) {
101
+ $ jobs [] = [
102
+ 'branch ' => $ branch ,
103
+ 'debug ' => $ debug ,
104
+ 'zts ' => $ zts ,
105
+ 'os ' => '13 ' ,
106
+ 'arch ' => 'X64 ' ,
107
+ 'test_jit ' => true ,
108
+ ];
109
+ if ($ branch ['version ' ]['minor ' ] >= 4 || $ branch ['version ' ]['major ' ] >= 9 ) {
110
+ $ jobs [] = [
111
+ 'branch ' => $ branch ,
112
+ 'debug ' => $ debug ,
113
+ 'zts ' => $ zts ,
114
+ 'os ' => '14 ' ,
115
+ 'arch ' => 'ARM64 ' ,
116
+ 'test_jit ' => !$ zts ,
117
+ ];
118
+ }
119
+ }
120
+ }
121
+ }
122
+ return $ jobs ;
123
+ }
124
+
125
+ function get_alpine_matrix_include (array $ branches ) {
126
+ $ jobs = [];
127
+ foreach ($ branches as $ branch ) {
128
+ if ([$ branch ['version ' ]['major ' ], $ branch ['version ' ]['minor ' ]] < [8 , 4 ]) {
129
+ continue ;
130
+ }
131
+ $ jobs [] = [
132
+ 'name ' => '_ASAN_UBSAN ' ,
133
+ 'branch ' => $ branch ,
134
+ 'debug ' => true ,
135
+ 'zts ' => true ,
136
+ 'asan ' => true ,
137
+ 'test_jit ' => true ,
138
+ 'configuration_parameters ' => "CFLAGS='-fsanitize=undefined,address -fno-sanitize=function -DZEND_TRACK_ARENA_ALLOC' LDFLAGS='-fsanitize=undefined,address -fno-sanitize=function' CC=clang-17 CXX=clang++-17 " ,
139
+ 'run_tests_parameters ' => '--asan -x ' ,
140
+ ];
141
+ }
142
+ return $ jobs ;
143
+ }
144
+
145
+ function get_current_version (): array {
146
+ $ file = dirname (__DIR__ ) . '/main/php_version.h ' ;
147
+ $ content = file_get_contents ($ file );
148
+ preg_match ('(^#define PHP_MAJOR_VERSION (?<num>\d+)$)m ' , $ content , $ matches );
149
+ $ major = $ matches ['num ' ];
150
+ preg_match ('(^#define PHP_MINOR_VERSION (?<num>\d+)$)m ' , $ content , $ matches );
151
+ $ minor = $ matches ['num ' ];
152
+ return ['major ' => $ major , 'minor ' => $ minor ];
153
+ }
154
+
104
155
$ trigger = $ argv [1 ] ?? 'schedule ' ;
105
156
$ attempt = (int ) ($ argv [2 ] ?? 1 );
106
- $ discard_cache = ($ trigger === 'schedule ' && $ attempt !== 1 ) || $ trigger === 'workflow_dispatch ' ;
157
+ $ monday = date ('w ' , time ()) === '1 ' ;
158
+ $ discard_cache = $ monday
159
+ || ($ trigger === 'schedule ' && $ attempt !== 1 )
160
+ || $ trigger === 'workflow_dispatch ' ;
107
161
if ($ discard_cache ) {
108
162
@unlink (get_branch_commit_cache_file_path ());
109
163
}
164
+ $ branch = $ argv [3 ] ?? 'master ' ;
110
165
111
- $ branches = get_branches ();
166
+ $ branches = $ branch === 'master '
167
+ ? get_branches ()
168
+ : [['name ' => strtoupper ($ branch ), 'ref ' => $ branch , 'version ' => get_current_version ()]];
112
169
$ matrix_include = get_matrix_include ($ branches );
113
170
$ windows_matrix_include = get_windows_matrix_include ($ branches );
171
+ $ macos_matrix_include = get_macos_matrix_include ($ branches );
172
+ $ alpine_matrix_include = get_alpine_matrix_include ($ branches );
114
173
115
174
$ f = fopen (getenv ('GITHUB_OUTPUT ' ), 'a ' );
116
175
fwrite ($ f , 'branches= ' . json_encode ($ branches , JSON_UNESCAPED_SLASHES ) . "\n" );
117
176
fwrite ($ f , 'matrix-include= ' . json_encode ($ matrix_include , JSON_UNESCAPED_SLASHES ) . "\n" );
118
177
fwrite ($ f , 'windows-matrix-include= ' . json_encode ($ windows_matrix_include , JSON_UNESCAPED_SLASHES ) . "\n" );
178
+ fwrite ($ f , 'macos-matrix-include= ' . json_encode ($ macos_matrix_include , JSON_UNESCAPED_SLASHES ) . "\n" );
179
+ fwrite ($ f , 'alpine-matrix-include= ' . json_encode ($ alpine_matrix_include , JSON_UNESCAPED_SLASHES ) . "\n" );
119
180
fclose ($ f );
0 commit comments