Compare commits
1354 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a33066c001 | ||
|
|
f1643fd598 | ||
|
|
e167f5c259 | ||
|
|
45158d762a | ||
|
|
8724c1dcc1 | ||
|
|
a1e0f566a8 | ||
|
|
650d05dc41 | ||
|
|
746e1a46d1 | ||
|
|
a8ca9e3783 | ||
|
|
769a4a81fd | ||
|
|
d042aafd13 | ||
|
|
f97ca00780 | ||
|
|
3aeeb03660 | ||
|
|
57e8183dae | ||
|
|
5e98c022f7 | ||
|
|
f0b3fd9afe | ||
|
|
1eee54fe48 | ||
|
|
341bc9e176 | ||
|
|
185f9de395 | ||
|
|
46cb5030ab | ||
|
|
6300a313a9 | ||
|
|
b7741bd785 | ||
|
|
109ae4d1c0 | ||
|
|
871ff01b2b | ||
|
|
f0e37f9e90 | ||
|
|
46ae35f333 | ||
|
|
f89a301251 | ||
|
|
5efa2a774e | ||
|
|
f72fc99524 | ||
|
|
c84edb415f | ||
|
|
4dda6da925 | ||
|
|
c14319add5 | ||
|
|
5ba12107fc | ||
|
|
8bd624e171 | ||
|
|
3dfaca4ee1 | ||
|
|
44454db4f0 | ||
|
|
9d7558f1af | ||
|
|
7bf05c6b70 | ||
|
|
5daa53ffa1 | ||
|
|
e8f032a051 | ||
|
|
f96e84adbb | ||
|
|
4abbbd6075 | ||
|
|
a19278e75f | ||
|
|
4364ed4a15 | ||
|
|
8dcd37f7d4 | ||
|
|
a909b43232 | ||
|
|
be556f8879 | ||
|
|
91d37511e3 | ||
|
|
3961404d06 | ||
|
|
43e4e008cc | ||
|
|
b010fa7c8f | ||
|
|
aaed46225e | ||
|
|
cc78f4c7f9 | ||
|
|
7662a9b5f4 | ||
|
|
865d4645a1 | ||
|
|
248e3ca37a | ||
|
|
2c40db3599 | ||
|
|
4eb1b49da1 | ||
|
|
5eda055652 | ||
|
|
04e773ea40 | ||
|
|
53bf167847 | ||
|
|
355aade280 | ||
|
|
74d4e20179 | ||
|
|
ae0a50642d | ||
|
|
5187d97121 | ||
|
|
eddb855af9 | ||
|
|
eec99716ef | ||
|
|
788275d42c | ||
|
|
be38e7a127 | ||
|
|
47ac2e221b | ||
|
|
36338985e2 | ||
|
|
185b391822 | ||
|
|
f210bb3904 | ||
|
|
6f153798c8 | ||
|
|
f7b7badb27 | ||
|
|
8473b2327f | ||
|
|
3efd894d72 | ||
|
|
1e8cc75dad | ||
|
|
2e18086d64 | ||
|
|
9cf252c302 | ||
|
|
aa0de4323f | ||
|
|
00242b5fc2 | ||
|
|
319ac00da8 | ||
|
|
38e8065d61 | ||
|
|
91a018aa46 | ||
|
|
bdaf698d5d | ||
|
|
ab68d9f583 | ||
|
|
d65cf8f3f2 | ||
|
|
6beaa7dc34 | ||
|
|
79ab6fe269 | ||
|
|
4cbbb6d82c | ||
|
|
4cba65b8c5 | ||
|
|
7fea117d1c | ||
|
|
bf6b4fbd49 | ||
|
|
8f8196743c | ||
|
|
06512d94ed | ||
|
|
1c302aed34 | ||
|
|
dcffe28928 | ||
|
|
6ffdb3d118 | ||
|
|
c97dacbacf | ||
|
|
34f574e7aa | ||
|
|
317a051dea | ||
|
|
dfcda83968 | ||
|
|
96d7cf331d | ||
|
|
baed2d33b8 | ||
|
|
1398cb4c9f | ||
|
|
462e7103e4 | ||
|
|
8582cb12d5 | ||
|
|
ec406be512 | ||
|
|
36a27b0262 | ||
|
|
ea2f858afe | ||
|
|
507ff06e8d | ||
|
|
629475b7b3 | ||
|
|
521f2e5b93 | ||
|
|
259d177178 | ||
|
|
20529878ed | ||
|
|
68634e7bca | ||
|
|
0ac4874a14 | ||
|
|
c9735bcc02 | ||
|
|
89b2566bb0 | ||
|
|
dcec1cf0b4 | ||
|
|
ccf2c627fe | ||
|
|
2a597f617d | ||
|
|
2282b6a082 | ||
|
|
11373c6dce | ||
|
|
50ad25710d | ||
|
|
c1c6c51867 | ||
|
|
34a5396826 | ||
|
|
a0d5abedf1 | ||
|
|
102ffdc294 | ||
|
|
97cf0581e3 | ||
|
|
bac87fed32 | ||
|
|
b9341130b4 | ||
|
|
e1dc734412 | ||
|
|
20169f80b7 | ||
|
|
ec1e2c6601 | ||
|
|
5581e61575 | ||
|
|
de4f59c442 | ||
|
|
26dc9b4fed | ||
|
|
8d11cf02d2 | ||
|
|
8aee7c58b7 | ||
|
|
725b40730f | ||
|
|
b8f4bf011c | ||
|
|
f9fbb516a6 | ||
|
|
987ba5bfe9 | ||
|
|
9dffd40113 | ||
|
|
2dfe351907 | ||
|
|
1897d72bb4 | ||
|
|
879090af77 | ||
|
|
a3845d84ae | ||
|
|
24d382d1f8 | ||
|
|
7a5da9d8dc | ||
|
|
011ab6e363 | ||
|
|
545bc26d45 | ||
|
|
55463ffe4f | ||
|
|
2a3befd7ab | ||
|
|
7cc4441283 | ||
|
|
4a4c5a48bb | ||
|
|
3514a658eb | ||
|
|
7aefaa0b54 | ||
|
|
048eb79ef3 | ||
|
|
29247235f0 | ||
|
|
e84efebd6e | ||
|
|
0f7f1d08e3 | ||
|
|
433bdeeaf0 | ||
|
|
1c5378302c | ||
|
|
c251c791ff | ||
|
|
36fada6981 | ||
|
|
27853eb8b4 | ||
|
|
18b776ee45 | ||
|
|
2ec652d38d | ||
|
|
8d8f975af3 | ||
|
|
12b910a04d | ||
|
|
962fc445e2 | ||
|
|
6ba658ae8d | ||
|
|
c954e9c756 | ||
|
|
b595b415e2 | ||
|
|
9c22be2b20 | ||
|
|
ac0e29410e | ||
|
|
2cae8ac286 | ||
|
|
df8d123345 | ||
|
|
d371420c90 | ||
|
|
287979ae16 | ||
|
|
dd942787eb | ||
|
|
d000f49d9a | ||
|
|
dc7e73e115 | ||
|
|
755f6046e1 | ||
|
|
ec0360b904 | ||
|
|
373563aabe | ||
|
|
cf4cade272 | ||
|
|
316da6edfb | ||
|
|
34061fa6b4 | ||
|
|
b7bd9e4655 | ||
|
|
78e1c95060 | ||
|
|
310e481b83 | ||
|
|
42a9487ddd | ||
|
|
f5d98d1683 | ||
|
|
1a94db50cb | ||
|
|
1489f576c9 | ||
|
|
f25b1cfdcc | ||
|
|
3209251719 | ||
|
|
8ad85316fe | ||
|
|
297b3cde3c | ||
|
|
4eb1919d22 | ||
|
|
d8af2f43ce | ||
|
|
d3fead0baf | ||
|
|
6cd838e903 | ||
|
|
3bfebc13bc | ||
|
|
89a5bffb0b | ||
|
|
260b35cca0 | ||
|
|
f902cc7bd9 | ||
|
|
ad03a92562 | ||
|
|
a99dd2408e | ||
|
|
a7d262f1d8 | ||
|
|
c1750d382b | ||
|
|
6516e9cb24 | ||
|
|
783c77d669 | ||
|
|
b0064cd05b | ||
|
|
fd913ba092 | ||
|
|
21e092a3e0 | ||
|
|
64652c947d | ||
|
|
9e72090525 | ||
|
|
34b79cab10 | ||
|
|
e5af5d68b4 | ||
|
|
ba21a89e0b | ||
|
|
12b88cf3e2 | ||
|
|
cffd8ca58a | ||
|
|
85ed51cf85 | ||
|
|
5bb2eed0aa | ||
|
|
96fb539134 | ||
|
|
775fa76ea4 | ||
|
|
da729085ef | ||
|
|
b6d8115f12 | ||
|
|
84f76b1fc9 | ||
|
|
cdfde5ebec | ||
|
|
7e98140142 | ||
|
|
85a8dfd0c7 | ||
|
|
7ee42db5db | ||
|
|
cdbb89961e | ||
|
|
19ba822314 | ||
|
|
fb9c2a9f77 | ||
|
|
e7453ef93f | ||
|
|
efd3a13445 | ||
|
|
981ce2a75a | ||
|
|
d97b3754a8 | ||
|
|
edf0223f7d | ||
|
|
516490f3d1 | ||
|
|
e77cdb393f | ||
|
|
944fb41c67 | ||
|
|
0830e5d434 | ||
|
|
ae95648cfc | ||
|
|
a75ffb672b | ||
|
|
80075aeba5 | ||
|
|
449afbcaec | ||
|
|
ce2f681d22 | ||
|
|
cb0fc744e6 | ||
|
|
58a6e6fb4b | ||
|
|
bf9d25532d | ||
|
|
4662a3d03c | ||
|
|
e4fb5432c7 | ||
|
|
7f1cfc01ec | ||
|
|
371ee9d086 | ||
|
|
51383ecefe | ||
|
|
cf36231a82 | ||
|
|
9f51892bda | ||
|
|
53f82379e8 | ||
|
|
24eff50574 | ||
|
|
15b611248c | ||
|
|
6e5c13cd3c | ||
|
|
e07eecf7a4 | ||
|
|
57a6e91640 | ||
|
|
c541c155ee | ||
|
|
afff805ea3 | ||
|
|
594bd591ec | ||
|
|
2e947f1f69 | ||
|
|
2a5212466c | ||
|
|
9c28f9ba58 | ||
|
|
b9f1db485f | ||
|
|
588b5da142 | ||
|
|
a0edbac27b | ||
|
|
606ac25b84 | ||
|
|
ea566b68c0 | ||
|
|
4f124b97f7 | ||
|
|
8fe6ba1e38 | ||
|
|
193510cd90 | ||
|
|
b5f04d97d9 | ||
|
|
4b56933e00 | ||
|
|
fc14643b0a | ||
|
|
fdb0d9d1a7 | ||
|
|
622cada40f | ||
|
|
2a620039e8 | ||
|
|
376a964e21 | ||
|
|
d6560b1fbb | ||
|
|
868f02c3ff | ||
|
|
18975ec414 | ||
|
|
c49792fb59 | ||
|
|
806c3cc058 | ||
|
|
c665c7a15b | ||
|
|
b30e4bc764 | ||
|
|
436881d084 | ||
|
|
14d9660823 | ||
|
|
efffd0e4f2 | ||
|
|
d802457674 | ||
|
|
8872c784b0 | ||
|
|
b203b24815 | ||
|
|
116fe4df69 | ||
|
|
73963f5001 | ||
|
|
f4fb0af4d5 | ||
|
|
eb73c01f76 | ||
|
|
3d8c10397e | ||
|
|
db8db3c7c7 | ||
|
|
31bfabaf56 | ||
|
|
21eeae309a | ||
|
|
48e0de2ea6 | ||
|
|
88841d1465 | ||
|
|
a4e22b60bb | ||
|
|
4f6ab99328 | ||
|
|
a870b0a9be | ||
|
|
67271131b1 | ||
|
|
a6ce3f5633 | ||
|
|
1a5ac4aa9a | ||
|
|
765279d5ef | ||
|
|
d71d15b3b3 | ||
|
|
ad24e86677 | ||
|
|
73dfd2f824 | ||
|
|
6d7209f44a | ||
|
|
2ee6851e7b | ||
|
|
353ba41d44 | ||
|
|
5c424d6c81 | ||
|
|
e927136b25 | ||
|
|
35557a3770 | ||
|
|
43e870b2d0 | ||
|
|
dc1a77b457 | ||
|
|
812360879e | ||
|
|
201dd6c1db | ||
|
|
97e0a9729a | ||
|
|
5a2bd88cb3 | ||
|
|
7ba520ae30 | ||
|
|
f47a6e7ca3 | ||
|
|
e1c6cff579 | ||
|
|
6e825ca69e | ||
|
|
7b1eaadfbb | ||
|
|
5b709ff10e | ||
|
|
ed98159fe9 | ||
|
|
58f08c5f7c | ||
|
|
9e24ffafe7 | ||
|
|
5eca5d1c47 | ||
|
|
c085ca391e | ||
|
|
93745da978 | ||
|
|
c088c0cfeb | ||
|
|
86b90110cb | ||
|
|
1a102bc9f2 | ||
|
|
131ba03b0d | ||
|
|
e8cd65f444 | ||
|
|
2810265746 | ||
|
|
dab726e922 | ||
|
|
e6f75134d3 | ||
|
|
1874353919 | ||
|
|
eea39ea741 | ||
|
|
bac56c8d91 | ||
|
|
124d256c78 | ||
|
|
eeddcfe955 | ||
|
|
de2903ad82 | ||
|
|
bbe1204148 | ||
|
|
99a92d54d5 | ||
|
|
7c6c249257 | ||
|
|
e6d44f159a | ||
|
|
dc513528da | ||
|
|
bfbd3882c0 | ||
|
|
3c525df325 | ||
|
|
a36e1e52ff | ||
|
|
04ff9b08a2 | ||
|
|
65fad67e88 | ||
|
|
6668249e24 | ||
|
|
81c255f988 | ||
|
|
81cd5ae092 | ||
|
|
29a9813921 | ||
|
|
f60e7de98e | ||
|
|
b5efb21934 | ||
|
|
26e6a92f3b | ||
|
|
28b68529b5 | ||
|
|
4e4861ec30 | ||
|
|
70169700c3 | ||
|
|
f4e27c9ead | ||
|
|
9855c76987 | ||
|
|
546935924a | ||
|
|
491e9de600 | ||
|
|
e3bda5bed8 | ||
|
|
e70f6d9e7c | ||
|
|
92e992b198 | ||
|
|
99680be1df | ||
|
|
e83e329355 | ||
|
|
10c12b9377 | ||
|
|
91026460e4 | ||
|
|
7fdd3ece87 | ||
|
|
0de5aa9140 | ||
|
|
a6e0b1404f | ||
|
|
5d259c66b1 | ||
|
|
6207829361 | ||
|
|
319feb83c2 | ||
|
|
661ad4bf75 | ||
|
|
04c15e2314 | ||
|
|
5aa416d77b | ||
|
|
a9a661ccd4 | ||
|
|
321f8d7d9a | ||
|
|
7af6c0fe6f | ||
|
|
36e04fc85c | ||
|
|
95916a72b1 | ||
|
|
a5fb328c6a | ||
|
|
72ae4ccbe5 | ||
|
|
5b2015e8fe | ||
|
|
9c77701ae5 | ||
|
|
394503cb8a | ||
|
|
f1cc14e3d5 | ||
|
|
9d529a72e0 | ||
|
|
c63f07d82e | ||
|
|
e40aa32c04 | ||
|
|
a683e80307 | ||
|
|
7ce22e0264 | ||
|
|
4bd44f22a9 | ||
|
|
d2f333de6f | ||
|
|
948bd8df3c | ||
|
|
8cac79fdb1 | ||
|
|
6cc8b47c6f | ||
|
|
0be6fa1958 | ||
|
|
22d9c80367 | ||
|
|
4630172078 | ||
|
|
1b02c009e7 | ||
|
|
12282c9597 | ||
|
|
592bbc7716 | ||
|
|
fb5054b163 | ||
|
|
3f2a402846 | ||
|
|
c5fc0d8281 | ||
|
|
48037d201f | ||
|
|
71b43c4f65 | ||
|
|
3818224063 | ||
|
|
5b29e8a454 | ||
|
|
2a798336a0 | ||
|
|
cb8f453143 | ||
|
|
19323ea920 | ||
|
|
b951cf1d99 | ||
|
|
1fdc5e773b | ||
|
|
1474d67903 | ||
|
|
1afae1868c | ||
|
|
36e33e130a | ||
|
|
3d794ddd93 | ||
|
|
c61bd0e074 | ||
|
|
1f8252a3ed | ||
|
|
3e2462a699 | ||
|
|
e513384a65 | ||
|
|
6483a6ea70 | ||
|
|
ca308a6886 | ||
|
|
035ef490b9 | ||
|
|
6bf279d08a | ||
|
|
bb16550379 | ||
|
|
7d999d501a | ||
|
|
7f8b1e5773 | ||
|
|
6461006ceb | ||
|
|
5f422817a1 | ||
|
|
1b08836381 | ||
|
|
ae98bca05f | ||
|
|
fb1ad7fc84 | ||
|
|
0d60024683 | ||
|
|
1224b29111 | ||
|
|
2f306f9d25 | ||
|
|
39b4e4a983 | ||
|
|
7e46297c8d | ||
|
|
f9390a5478 | ||
|
|
f42145a164 | ||
|
|
755bbb1cc0 | ||
|
|
a36edd3ca4 | ||
|
|
f2018b2189 | ||
|
|
9c411b6e2b | ||
|
|
e8d8aa3403 | ||
|
|
686e8dfff9 | ||
|
|
b46c8e2a8c | ||
|
|
2d47531473 | ||
|
|
fd03521cb4 | ||
|
|
f03add0b41 | ||
|
|
baf9535ba5 | ||
|
|
cc0e576689 | ||
|
|
d30ad8b184 | ||
|
|
0f765070fa | ||
|
|
313d0cfdbf | ||
|
|
cf767706fe | ||
|
|
1267cf80a1 | ||
|
|
7abee8e28c | ||
|
|
dd0115673c | ||
|
|
bbc65d999a | ||
|
|
6db1a06425 | ||
|
|
52eb86c60c | ||
|
|
2b77dd6b79 | ||
|
|
224f9ddef5 | ||
|
|
7f5c8b51ba | ||
|
|
bd5c747191 | ||
|
|
40846b27d0 | ||
|
|
8e2ac35f63 | ||
|
|
a1e6789a94 | ||
|
|
9114b007ae | ||
|
|
cb0c293f02 | ||
|
|
387ec95b46 | ||
|
|
3514d30f93 | ||
|
|
e186e47261 | ||
|
|
e51e662ef0 | ||
|
|
5afd8a1842 | ||
|
|
1a42045d48 | ||
|
|
b3a12ce01e | ||
|
|
04b2ed5b3e | ||
|
|
189e8e6ec0 | ||
|
|
3407e6019c | ||
|
|
f20012026f | ||
|
|
7743b7976f | ||
|
|
b7b50ce742 | ||
|
|
aa9b80f158 | ||
|
|
53adb47562 | ||
|
|
f7d3c00320 | ||
|
|
b359d922e7 | ||
|
|
01aa440f0b | ||
|
|
51f83e019c | ||
|
|
173ca15c9b | ||
|
|
4704ad638a | ||
|
|
1a18b2267f | ||
|
|
e9704839e9 | ||
|
|
5178fac634 | ||
|
|
388883d4bf | ||
|
|
cae6d06e69 | ||
|
|
89f4f7e8be | ||
|
|
d2efbcd126 | ||
|
|
98e3af0bff | ||
|
|
e8836c6d46 | ||
|
|
9068f2e46f | ||
|
|
5bbbd3fdf6 | ||
|
|
7622357ff1 | ||
|
|
6652a09da6 | ||
|
|
48fb8e1194 | ||
|
|
bbc6e9069b | ||
|
|
37dcd1cf8c | ||
|
|
12b1efad4b | ||
|
|
0575a32108 | ||
|
|
71b0e09dbc | ||
|
|
edff21f0a6 | ||
|
|
22035eb75b | ||
|
|
b556cf7292 | ||
|
|
f99a9d4624 | ||
|
|
a49dfe8457 | ||
|
|
7ff9ac44b4 | ||
|
|
7aff4d7a22 | ||
|
|
633321754d | ||
|
|
40a4cb064f | ||
|
|
45410ae8f0 | ||
|
|
56ad5977ba | ||
|
|
6353d20df2 | ||
|
|
e04e1d97f0 | ||
|
|
52685a348b | ||
|
|
44d81f9830 | ||
|
|
401bdecb71 | ||
|
|
aa82ffc68f | ||
|
|
7e03c76ef2 | ||
|
|
16011a795d | ||
|
|
66f24470dc | ||
|
|
e57ea715eb | ||
|
|
e8ba27f3d2 | ||
|
|
945c34c175 | ||
|
|
c8c64c6cf9 | ||
|
|
0d3f92f127 | ||
|
|
4979d5b484 | ||
|
|
0d9a1ba5ae | ||
|
|
3ede7656cb | ||
|
|
f3cdc074ce | ||
|
|
109db648f1 | ||
|
|
3ccc00eece | ||
|
|
0f688a10cb | ||
|
|
3312ea6101 | ||
|
|
ce49f82dd8 | ||
|
|
cf5cd90b4c | ||
|
|
cdb037c2a4 | ||
|
|
261f13a7c5 | ||
|
|
9eaa66d89b | ||
|
|
da9dfe4a71 | ||
|
|
a863ab6d3d | ||
|
|
050cb8061b | ||
|
|
3fda17f3fa | ||
|
|
1a2cb4f872 | ||
|
|
4969814b69 | ||
|
|
07f2ea7d02 | ||
|
|
a1c17b4b18 | ||
|
|
3eda583472 | ||
|
|
74d43be8a3 | ||
|
|
aa1fe473f9 | ||
|
|
a92acf13e4 | ||
|
|
0533892eb4 | ||
|
|
43fb4ad30e | ||
|
|
b88a8c89d1 | ||
|
|
36d7f6c7c5 | ||
|
|
a1a52db9f3 | ||
|
|
88e54b10ca | ||
|
|
203099e007 | ||
|
|
4e9ea33f8d | ||
|
|
68ba5ba947 | ||
|
|
99af32331c | ||
|
|
810a92a9b0 | ||
|
|
9c760dd6e2 | ||
|
|
dea233d702 | ||
|
|
787285e08a | ||
|
|
ee065c5938 | ||
|
|
dbc8ba0844 | ||
|
|
fe9e23a16a | ||
|
|
16de39288a | ||
|
|
67ff09364d | ||
|
|
1dfe0dc4a4 | ||
|
|
6f83b63bf5 | ||
|
|
f0db57dcab | ||
|
|
6cba851606 | ||
|
|
209324abab | ||
|
|
846135c190 | ||
|
|
32d20248ae | ||
|
|
ba8485d89f | ||
|
|
97721a77b9 | ||
|
|
7dfee150df | ||
|
|
251330ef7f | ||
|
|
448bd61c6f | ||
|
|
657e0936e8 | ||
|
|
36d70683e9 | ||
|
|
7a9bf9ecf6 | ||
|
|
5210dd20ed | ||
|
|
e83d1a7f9e | ||
|
|
6ae3564af4 | ||
|
|
9e33c7b24e | ||
|
|
d37cc30485 | ||
|
|
412722b7c7 | ||
|
|
c19f6bbdcd | ||
|
|
dfd2c8da97 | ||
|
|
27eef9a04c | ||
|
|
f172a4dc76 | ||
|
|
c88ece8451 | ||
|
|
33ad931dbb | ||
|
|
4e4b26a024 | ||
|
|
228bfba836 | ||
|
|
34c35ecdad | ||
|
|
1828f05f7a | ||
|
|
927419e77f | ||
|
|
e29242d481 | ||
|
|
035c0a8550 | ||
|
|
e9884d0d9a | ||
|
|
02131e37d9 | ||
|
|
341d29a88f | ||
|
|
5e3bc57de0 | ||
|
|
a826799c7c | ||
|
|
62bd8f3ca4 | ||
|
|
4056d3f353 | ||
|
|
ddf8825c2f | ||
|
|
4678e809c3 | ||
|
|
b75c104ca8 | ||
|
|
94c859a50e | ||
|
|
293da043d1 | ||
|
|
808396c4e6 | ||
|
|
7205f47330 | ||
|
|
7ad352e12a | ||
|
|
5bf95cd61f | ||
|
|
18f3abac75 | ||
|
|
7854a0cae7 | ||
|
|
a72a638da4 | ||
|
|
46c34bb6a5 | ||
|
|
948917a97b | ||
|
|
d9cb143213 | ||
|
|
0cfde7beae | ||
|
|
ce2a129c36 | ||
|
|
78532b17de | ||
|
|
8b26e8d15a | ||
|
|
4dc94c27cf | ||
|
|
76555571a6 | ||
|
|
be43989cc9 | ||
|
|
6f6e534936 | ||
|
|
99a4a141f4 | ||
|
|
c1285cc7f3 | ||
|
|
57662657e0 | ||
|
|
8d4007321f | ||
|
|
8eb9866044 | ||
|
|
e554590514 | ||
|
|
5959fab498 | ||
|
|
408b70728f | ||
|
|
9d74a11420 | ||
|
|
5acd006232 | ||
|
|
0022878947 | ||
|
|
71d07ee7f4 | ||
|
|
8d1c02194f | ||
|
|
5187531b8b | ||
|
|
44ff4ed92d | ||
|
|
96857323bb | ||
|
|
cad2a1bda3 | ||
|
|
c2c73b16c1 | ||
|
|
63c7766312 | ||
|
|
175c9649c4 | ||
|
|
495989aff1 | ||
|
|
c09e310dc1 | ||
|
|
1db2ec93f3 | ||
|
|
0a601ebeee | ||
|
|
da21b560da | ||
|
|
c1efd614e8 | ||
|
|
dcf2f7f74f | ||
|
|
8109be4850 | ||
|
|
a0a791cada | ||
|
|
147905fd60 | ||
|
|
57db6baebb | ||
|
|
c38f1acc38 | ||
|
|
9ca9ab33ef | ||
|
|
fdbb31f707 | ||
|
|
14a9f0b4ae | ||
|
|
2ee6797b63 | ||
|
|
2b729b1130 | ||
|
|
0374a8ae84 | ||
|
|
7f951c9333 | ||
|
|
449da348c0 | ||
|
|
51476af47d | ||
|
|
9a70be75c2 | ||
|
|
282305f4d7 | ||
|
|
c2a765ed5b | ||
|
|
9ea5899759 | ||
|
|
62d47dd238 | ||
|
|
e480353a3d | ||
|
|
3a4acaaed8 | ||
|
|
f7f679181d | ||
|
|
f3010adf3e | ||
|
|
b7cdb2373c | ||
|
|
22ebe0d733 | ||
|
|
cb614c45fa | ||
|
|
e6e79e1717 | ||
|
|
45a631dbaf | ||
|
|
1fd26e45c8 | ||
|
|
de4fdb85b9 | ||
|
|
2fd8046c9d | ||
|
|
d189609ea9 | ||
|
|
3681a25ab6 | ||
|
|
092944b039 | ||
|
|
9e30788903 | ||
|
|
bca2d0b1b0 | ||
|
|
d78b8a6d49 | ||
|
|
da0e854737 | ||
|
|
f24f33ea89 | ||
|
|
7789b4e03e | ||
|
|
75988cd9be | ||
|
|
65341e4a6d | ||
|
|
0f13e29d1f | ||
|
|
5cd765a20d | ||
|
|
deb31af403 | ||
|
|
a6b35b119b | ||
|
|
7dadf1bf21 | ||
|
|
cca8ad3588 | ||
|
|
7117491f1a | ||
|
|
aa1efabe45 | ||
|
|
dab0e73adf | ||
|
|
15b20027cf | ||
|
|
1b4cc0b6fa | ||
|
|
bbba8d75a6 | ||
|
|
a274bd910a | ||
|
|
f4d1db5c23 | ||
|
|
cecf84878d | ||
|
|
be75d5e01d | ||
|
|
cf36ddc55e | ||
|
|
fe438f8e25 | ||
|
|
fdd0a76eca | ||
|
|
7c0b4c8c8e | ||
|
|
b33066473d | ||
|
|
92b4784fb6 | ||
|
|
345999bf0b | ||
|
|
4c5c122aa6 | ||
|
|
bee5abe269 | ||
|
|
220d0c24c7 | ||
|
|
2f5c2edb22 | ||
|
|
721e4c3367 | ||
|
|
2f2a90e464 | ||
|
|
81a06ff6ed | ||
|
|
dfc02c42d9 | ||
|
|
ac7d3d7f84 | ||
|
|
874e5099b0 | ||
|
|
4a3337d069 | ||
|
|
123f6df529 | ||
|
|
341cf69e13 | ||
|
|
f7b503e36b | ||
|
|
beaceb0089 | ||
|
|
03509eca9b | ||
|
|
2c9c274411 | ||
|
|
1c85db7f9e | ||
|
|
d259dd49a2 | ||
|
|
ea20ae1fbd | ||
|
|
383c74bb06 | ||
|
|
b4593b7df0 | ||
|
|
9b92c9db92 | ||
|
|
a357b6a054 | ||
|
|
0bc2f7ce96 | ||
|
|
e2e76ea34f | ||
|
|
719018955c | ||
|
|
4c903565c9 | ||
|
|
fc60088a95 | ||
|
|
a7f90656b3 | ||
|
|
0cd4af837e | ||
|
|
96e47f9be7 | ||
|
|
eca40cad4d | ||
|
|
4e864eae3b | ||
|
|
49a0bad962 | ||
|
|
b971d8f4ad | ||
|
|
fca0924fa9 | ||
|
|
8dfe214356 | ||
|
|
f2d6820ca2 | ||
|
|
705c2a5785 | ||
|
|
5e33fdb0d9 | ||
|
|
dab978c436 | ||
|
|
2cc925b655 | ||
|
|
4ce6f3c3df | ||
|
|
b3bf0f3990 | ||
|
|
8426bf89fd | ||
|
|
d7c3e33a96 | ||
|
|
17ef667e04 | ||
|
|
295b5da700 | ||
|
|
e820a5d75b | ||
|
|
2c8682d5e6 | ||
|
|
87993cd853 | ||
|
|
e0dd9c9560 | ||
|
|
28853c9f3b | ||
|
|
608ad1a0cf | ||
|
|
257e4c088d | ||
|
|
7b145b5fae | ||
|
|
253459691c | ||
|
|
cb5db3f888 | ||
|
|
52d2b3b70b | ||
|
|
fa5fbefff9 | ||
|
|
256b466cc4 | ||
|
|
57f4a60e24 | ||
|
|
2e289f30e2 | ||
|
|
bc0d607611 | ||
|
|
1fa3ba1b16 | ||
|
|
d8d1da5d6d | ||
|
|
094bc8ae17 | ||
|
|
48aac87d46 | ||
|
|
31971c78cd | ||
|
|
13760f5b16 | ||
|
|
c644f654ce | ||
|
|
9adda12e86 | ||
|
|
6db8a6c378 | ||
|
|
a34eeedd37 | ||
|
|
35bc046b26 | ||
|
|
64e9bb0e79 | ||
|
|
19a01870e7 | ||
|
|
c4560dd084 | ||
|
|
0313f578ce | ||
|
|
d068c17d9e | ||
|
|
8eebeae48a | ||
|
|
da9dadf09c | ||
|
|
e06e40278f | ||
|
|
6473b1c04c | ||
|
|
7694412cb0 | ||
|
|
e990e98a54 | ||
|
|
b2d037d560 | ||
|
|
4beeea41b4 | ||
|
|
8e80635955 | ||
|
|
c8837583fc | ||
|
|
bb36513e49 | ||
|
|
5402397d9f | ||
|
|
f6b4601c63 | ||
|
|
ed62711289 | ||
|
|
2cb9b82943 | ||
|
|
4f420be5bd | ||
|
|
cf40c1e950 | ||
|
|
91936faf85 | ||
|
|
ca319bd10e | ||
|
|
4d3cfaa653 | ||
|
|
c8b716540c | ||
|
|
1cecc2cc99 | ||
|
|
5137c78ee5 | ||
|
|
c37021df01 | ||
|
|
c6e99860cd | ||
|
|
05b4ac2afb | ||
|
|
91bd11146c | ||
|
|
8ace7bdc6e | ||
|
|
4bb4f1812c | ||
|
|
7bd9f10bef | ||
|
|
0b38e86c65 | ||
|
|
b717b2fcde | ||
|
|
216d501175 | ||
|
|
c2e811ce23 | ||
|
|
dbf50bf9e0 | ||
|
|
947009a717 | ||
|
|
ca910e5511 | ||
|
|
f31d416e6e | ||
|
|
36cb9fb0fc | ||
|
|
6a8a2abd3c | ||
|
|
c88f07696b | ||
|
|
0b33ef444f | ||
|
|
604ffba8e1 | ||
|
|
a3727c20a4 | ||
|
|
6a9b0017a4 | ||
|
|
3b2ce6cae6 | ||
|
|
c61b9256d1 | ||
|
|
09e08a3554 | ||
|
|
f31bef6a30 | ||
|
|
1a216636c5 | ||
|
|
7eec3d790d | ||
|
|
5afed16e5f | ||
|
|
14fa980966 | ||
|
|
39491a0fba | ||
|
|
c6b6dabbb9 | ||
|
|
e1a9afe11c | ||
|
|
6449431df2 | ||
|
|
60ff774608 | ||
|
|
dd591f1661 | ||
|
|
fefbd7a497 | ||
|
|
10f1a63300 | ||
|
|
a06325cfba | ||
|
|
e0b7f34ba7 | ||
|
|
e02a1810e6 | ||
|
|
55ab748aaa | ||
|
|
bb0acc6313 | ||
|
|
17fd1a694b | ||
|
|
454ef11759 | ||
|
|
e3396c6572 | ||
|
|
3beda962f3 | ||
|
|
1f97ce0215 | ||
|
|
00f360b99d | ||
|
|
9882bed066 | ||
|
|
e8855efe7c | ||
|
|
4067ce8b81 | ||
|
|
d5790807c8 | ||
|
|
ed61605069 | ||
|
|
d0e7f46ec4 | ||
|
|
ef477a1dd7 | ||
|
|
9149639a33 | ||
|
|
2fdb2200a0 | ||
|
|
15c43e89cd | ||
|
|
b0559f7f8e | ||
|
|
a41bc75590 | ||
|
|
6ebd1e5184 | ||
|
|
9ad81048ce | ||
|
|
8cfcbb030f | ||
|
|
254ecd5a66 | ||
|
|
0461bf14b2 | ||
|
|
7e5351f399 | ||
|
|
fe944a16b5 | ||
|
|
909090903e | ||
|
|
75a1b03f39 | ||
|
|
a47644812e | ||
|
|
23393c46d7 | ||
|
|
3c6827c2c3 | ||
|
|
de8537f42a | ||
|
|
ada1ce86b7 | ||
|
|
7c13389546 | ||
|
|
7627a79c01 | ||
|
|
39faaac1d3 | ||
|
|
b3152daa8d | ||
|
|
6db6ddbab2 | ||
|
|
c870bc9a3a | ||
|
|
f5f14c3aa3 | ||
|
|
e831babc61 | ||
|
|
c7736a605a | ||
|
|
a9a6d1986e | ||
|
|
c342ca379e | ||
|
|
cc316409b0 | ||
|
|
a8dafdc2b5 | ||
|
|
f8646352c6 | ||
|
|
3cbec713b8 | ||
|
|
4186db28f7 | ||
|
|
18f02c9c99 | ||
|
|
15b99e2a8d | ||
|
|
e9a7adef28 | ||
|
|
bceb2ef3d8 | ||
|
|
86e7315da6 | ||
|
|
0741f2b23a | ||
|
|
0c4c4d5441 | ||
|
|
abfbe6a46b | ||
|
|
62aa8428dd | ||
|
|
e6a3eb1258 | ||
|
|
0ce7328fd7 | ||
|
|
6e76d3f012 | ||
|
|
ac40fdb561 | ||
|
|
890ea4bca9 | ||
|
|
113fcc64e3 | ||
|
|
afefcaf556 | ||
|
|
df4388ca60 | ||
|
|
fa18c2b29f | ||
|
|
399ab79d14 | ||
|
|
9601a19811 | ||
|
|
60ff151fc1 | ||
|
|
121cb19a65 | ||
|
|
739ccacdc4 | ||
|
|
cff0bdeaa3 | ||
|
|
70d858dd49 | ||
|
|
3340d60d91 | ||
|
|
57c17e3349 | ||
|
|
356e1a5128 | ||
|
|
633920d001 | ||
|
|
406f3c410a | ||
|
|
17349dafc1 | ||
|
|
962f570776 | ||
|
|
f66ac5d5a6 | ||
|
|
3f466981fc | ||
|
|
fd62612e9e | ||
|
|
26791e8412 | ||
|
|
f42065d568 | ||
|
|
912f27c42c | ||
|
|
86e1ccdd8d | ||
|
|
36ec0200a6 | ||
|
|
1686147b24 | ||
|
|
ecc8611061 | ||
|
|
abefdb50ee | ||
|
|
2ea6ca5b36 | ||
|
|
a83d4379b1 | ||
|
|
fbc8407035 | ||
|
|
6972aed899 | ||
|
|
d2f58713aa | ||
|
|
068c794af7 | ||
|
|
1e119b6d1a | ||
|
|
77721f6637 | ||
|
|
d731e56579 | ||
|
|
e5b90e33c6 | ||
|
|
849315646a | ||
|
|
d891a81b7f | ||
|
|
5098017251 | ||
|
|
2da85f306f | ||
|
|
1f94ad201f | ||
|
|
862f206cd2 | ||
|
|
81964ae791 | ||
|
|
b7d1d9c9a9 | ||
|
|
c5e4d55c3b | ||
|
|
d74064b67a | ||
|
|
8862a73fdd | ||
|
|
7b44f7e007 | ||
|
|
ff5499165a | ||
|
|
b3cd6b4dab | ||
|
|
ce02569aea | ||
|
|
f1c04eb1eb | ||
|
|
77aeac1761 | ||
|
|
569522d50d | ||
|
|
ea8be20255 | ||
|
|
d6f700217a | ||
|
|
1015b3659d | ||
|
|
03359ef1ab | ||
|
|
fd9aae59b0 | ||
|
|
9af1e7006f | ||
|
|
5efdcae81a | ||
|
|
f0fb8731a5 | ||
|
|
5a15252e66 | ||
|
|
c0c6e403b6 | ||
|
|
d0677c93b9 | ||
|
|
466908db61 | ||
|
|
8dbd6b7684 | ||
|
|
5a40a5875d | ||
|
|
790a41a722 | ||
|
|
62c7ba2bee | ||
|
|
41797e3af9 | ||
|
|
c6150c6a2b | ||
|
|
19b09596c6 | ||
|
|
4ec398d39a | ||
|
|
6bbaac9c49 | ||
|
|
012f269570 | ||
|
|
09222f42ae | ||
|
|
403191b6b6 | ||
|
|
02cba443ad | ||
|
|
31fa0d7883 | ||
|
|
f9caa0457d | ||
|
|
248394635c | ||
|
|
a094f682be | ||
|
|
45213ad923 | ||
|
|
385e3b6e96 | ||
|
|
5453c1f4f0 | ||
|
|
787c534f64 | ||
|
|
d812e938ac | ||
|
|
7de94e6400 | ||
|
|
68fbd80105 | ||
|
|
02445f719d | ||
|
|
215b040f0d | ||
|
|
925ede2589 | ||
|
|
d1510a82d5 | ||
|
|
808e74aed5 | ||
|
|
f51d00d350 | ||
|
|
c8111b053c | ||
|
|
294f03454a | ||
|
|
5d27b8f90e | ||
|
|
87e62cbb7f | ||
|
|
2c29e8b9a1 | ||
|
|
04a9e3b562 | ||
|
|
4adaa73d25 | ||
|
|
234594684c | ||
|
|
3c0527bec1 | ||
|
|
c5d41cd3f1 | ||
|
|
601cabfd2a | ||
|
|
81c750c6d7 | ||
|
|
0661130e18 | ||
|
|
4244b92ac6 | ||
|
|
e9595da9ac | ||
|
|
b77ec78d01 | ||
|
|
96d8c1e901 | ||
|
|
8816b6ff48 | ||
|
|
9205a596c9 | ||
|
|
6fc20c9b7f | ||
|
|
eb07280d5c | ||
|
|
eaaab1cec3 | ||
|
|
853381d0bb | ||
|
|
1394617d60 | ||
|
|
093498a0a1 | ||
|
|
d2241010ef | ||
|
|
a0f02c17c0 | ||
|
|
bb5257e07d | ||
|
|
f687ff8f21 | ||
|
|
537c66b2ea | ||
|
|
073c2e666b | ||
|
|
465e63b28c | ||
|
|
b8f0b066dc | ||
|
|
9e663851ce | ||
|
|
ad196941ed | ||
|
|
f8e867a9ff | ||
|
|
8cb01730c7 | ||
|
|
ebba1db2c3 | ||
|
|
716331904e | ||
|
|
2ad63ddbd3 | ||
|
|
c4606c9269 | ||
|
|
7dcb43c768 | ||
|
|
691c5309aa | ||
|
|
84b222366a | ||
|
|
b98ed88402 | ||
|
|
0ca827ae3b | ||
|
|
16b0a25bf6 | ||
|
|
fa0af5c382 | ||
|
|
db36b200b1 | ||
|
|
7cfd76cc1b | ||
|
|
682b1f5e44 | ||
|
|
7b56e4491e | ||
|
|
acc1fdb337 | ||
|
|
e3286d1234 | ||
|
|
83019fade2 | ||
|
|
83b3d4a8f9 | ||
|
|
56273e234f | ||
|
|
48a00b4d3f | ||
|
|
f641885a8d | ||
|
|
9457ce6e2b | ||
|
|
a31f8b1a2b | ||
|
|
ffded4a3e8 | ||
|
|
9e6b9d7d70 | ||
|
|
7d45057bba | ||
|
|
c4fd8b0739 | ||
|
|
49088ede98 | ||
|
|
3543ed1ef8 | ||
|
|
9bd0fdbc18 | ||
|
|
c5d29cf8e3 | ||
|
|
c5e0997b44 | ||
|
|
ee084d3176 | ||
|
|
c256f0c9cb | ||
|
|
d84365cd03 | ||
|
|
3c52e818b1 | ||
|
|
188598ef9d | ||
|
|
f8b8d766d5 | ||
|
|
15a6402865 | ||
|
|
91bd6b26c2 | ||
|
|
9dae796baf | ||
|
|
6d9aef83a3 | ||
|
|
bd5a0d94b6 | ||
|
|
5405f14867 | ||
|
|
cb25b9c13a | ||
|
|
e63d25d41f | ||
|
|
2a7ae24c8e | ||
|
|
e68a74a71c | ||
|
|
67152eb712 | ||
|
|
83bdf158fa | ||
|
|
5e240ab99f | ||
|
|
0fae072f07 | ||
|
|
e0561697dc | ||
|
|
3aa0f17b55 | ||
|
|
8b218279a3 | ||
|
|
90b6355bf0 | ||
|
|
84f23853b7 | ||
|
|
a4001afbd6 | ||
|
|
cfbb105cb6 | ||
|
|
c549015370 | ||
|
|
9e22b87414 | ||
|
|
7961bc11b1 | ||
|
|
87f807365d | ||
|
|
25d9bbc737 | ||
|
|
d2f865c91a | ||
|
|
a13373a271 | ||
|
|
a764546381 | ||
|
|
380b68048b | ||
|
|
4dcf9cd2ab | ||
|
|
f3641e0c33 | ||
|
|
d35633ec7a | ||
|
|
7eea3d82f6 | ||
|
|
57ecdba082 | ||
|
|
db03758c66 | ||
|
|
82837572d4 | ||
|
|
8efcf46b31 | ||
|
|
4391cf8a4c | ||
|
|
87a69f94d9 | ||
|
|
c12fad850b | ||
|
|
47b8d68850 | ||
|
|
530929f741 | ||
|
|
a965723128 | ||
|
|
9845a63f5c | ||
|
|
4af7e96d03 | ||
|
|
13a3d9d0a9 | ||
|
|
9d042b2683 | ||
|
|
7a59874419 | ||
|
|
8dee767b82 | ||
|
|
5fc5a95363 | ||
|
|
8ba779d78e | ||
|
|
04376074d2 | ||
|
|
262202d43f | ||
|
|
f64dddeeb4 | ||
|
|
1d50c4a8cd | ||
|
|
d313593fee | ||
|
|
5753a00ef5 | ||
|
|
38731c6386 | ||
|
|
9f400a0dfd | ||
|
|
ba020e3463 | ||
|
|
c0d425d939 | ||
|
|
4752a51595 | ||
|
|
10608f5908 | ||
|
|
d01ec214f2 | ||
|
|
6158538131 | ||
|
|
dd27d4eb81 | ||
|
|
248d04f73c | ||
|
|
c5e40d9067 | ||
|
|
e0ed1ad0ef | ||
|
|
2907f8a584 | ||
|
|
52691651dc | ||
|
|
b9404683e1 | ||
|
|
70954fb6f8 | ||
|
|
65e65163cd | ||
|
|
41397ce45e | ||
|
|
c09954033f | ||
|
|
7cec1987ac | ||
|
|
739e40fb5e | ||
|
|
9dec5892e7 | ||
|
|
94616818f0 | ||
|
|
4f0d9003dc | ||
|
|
b2edfc47dd | ||
|
|
6bd872ad2c | ||
|
|
03eb8cc744 | ||
|
|
9687dd1d8a | ||
|
|
2df0d2b443 | ||
|
|
0e56c0b653 | ||
|
|
0469a6f681 | ||
|
|
325413a824 | ||
|
|
b84dd3ce25 | ||
|
|
190220c10d | ||
|
|
4fb049a68b | ||
|
|
3e0678b50f | ||
|
|
5b06192e7c | ||
|
|
b419442896 | ||
|
|
49b8b7e301 | ||
|
|
b1776b79c8 | ||
|
|
a48ff666f8 | ||
|
|
3bffbad95a | ||
|
|
18041fdab5 | ||
|
|
b36d2222e6 | ||
|
|
50ffa593bb | ||
|
|
6cbc46fdb6 | ||
|
|
08c60fceea | ||
|
|
c30a9630bb | ||
|
|
0158fe2782 | ||
|
|
3a8557bcc6 | ||
|
|
d10d1e249b | ||
|
|
3ec1728de8 | ||
|
|
9c266d4158 | ||
|
|
0135ee2ed1 | ||
|
|
5c2618165a | ||
|
|
8123132b99 | ||
|
|
f5863fd356 | ||
|
|
cf0fdf35f2 | ||
|
|
8830cdd08c | ||
|
|
4960e3179f | ||
|
|
0f3f604249 | ||
|
|
5915f05b06 | ||
|
|
dccdb5ab67 | ||
|
|
9a01fd28ca | ||
|
|
d5cd6a4bd1 | ||
|
|
006301e81d | ||
|
|
4a38014043 | ||
|
|
a0ac655b06 | ||
|
|
41e56c42c7 | ||
|
|
4e8a0cfe8b | ||
|
|
ee72f2f8ad | ||
|
|
ed557fd2c3 | ||
|
|
d90cd153ee | ||
|
|
3376371dd8 | ||
|
|
a2b261d79a | ||
|
|
6c93dbd391 | ||
|
|
f58dc6eca1 | ||
|
|
5326f2302f | ||
|
|
b9a78a31fb | ||
|
|
ba69b25cab | ||
|
|
a6533acdd4 | ||
|
|
d3b37e3d0d | ||
|
|
f3a1262ff6 | ||
|
|
933abd531a | ||
|
|
67ed7f234b | ||
|
|
f90accffb3 | ||
|
|
93441b70bf | ||
|
|
67f23b6380 | ||
|
|
2937ad6e7a | ||
|
|
a5e5d07fcb | ||
|
|
30d8b321f4 | ||
|
|
405e57e429 | ||
|
|
58f376b118 | ||
|
|
b7d68d8225 | ||
|
|
9252820289 | ||
|
|
a5cc9fab25 | ||
|
|
4e5685a75d | ||
|
|
d475227ba5 | ||
|
|
38cb8b924d | ||
|
|
fdd83e94df | ||
|
|
ad112b7981 | ||
|
|
2b0d6e221f | ||
|
|
acee5b203f | ||
|
|
84e88e382f | ||
|
|
bbdc4e3b67 | ||
|
|
311eb9f3ba | ||
|
|
3dfd7a648b | ||
|
|
943f491830 | ||
|
|
dc9461a053 | ||
|
|
f2720d7b82 | ||
|
|
99161b7790 | ||
|
|
5de6285e1f | ||
|
|
14d702e830 | ||
|
|
9539b27b4a | ||
|
|
a4f7326577 | ||
|
|
9b297384e1 | ||
|
|
9d77946f60 | ||
|
|
6d21e6dc05 | ||
|
|
68c827cfcf | ||
|
|
d95ca49e8d | ||
|
|
03fd0b8719 | ||
|
|
ebe1c12c21 | ||
|
|
b46021d870 | ||
|
|
64ba54fc1b | ||
|
|
71571f685a | ||
|
|
10f86cb1a1 | ||
|
|
0f694c5087 | ||
|
|
9dfebd1adb | ||
|
|
3781acab4b | ||
|
|
cdfbf6d0f0 | ||
|
|
0ccb02802f | ||
|
|
a4572586dc | ||
|
|
cb3c752d1f | ||
|
|
383a511d0e | ||
|
|
cc55dbcaa8 | ||
|
|
e644692ccf | ||
|
|
96d5358317 | ||
|
|
3a473c9a22 | ||
|
|
40944de129 | ||
|
|
f9202d6b64 | ||
|
|
d99c8732ba | ||
|
|
2c559eae3d | ||
|
|
3a2ca44a8a | ||
|
|
17241e2689 | ||
|
|
ca33d01e9f | ||
|
|
3c6644f237 | ||
|
|
326dfd1e76 |
@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"env": { "node": true, "jest": true },
|
|
||||||
"parser": "@typescript-eslint/parser",
|
|
||||||
"parserOptions": { "ecmaVersion": 2020, "sourceType": "module" },
|
|
||||||
"extends": [
|
|
||||||
"eslint:recommended",
|
|
||||||
"plugin:@typescript-eslint/eslint-recommended",
|
|
||||||
"plugin:@typescript-eslint/recommended",
|
|
||||||
"plugin:import/errors",
|
|
||||||
"plugin:import/warnings",
|
|
||||||
"plugin:import/typescript",
|
|
||||||
"plugin:prettier/recommended",
|
|
||||||
"prettier/@typescript-eslint"
|
|
||||||
],
|
|
||||||
"plugins": ["@typescript-eslint", "jest"],
|
|
||||||
"rules": {
|
|
||||||
"camelcase": "off",
|
|
||||||
"require-atomic-updates": "off",
|
|
||||||
"@typescript-eslint/ban-ts-ignore": "off",
|
|
||||||
"@typescript-eslint/camelcase": "off",
|
|
||||||
"@typescript-eslint/no-unused-vars": "off"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
84
.github/CONTRIBUTING.md
vendored
84
.github/CONTRIBUTING.md
vendored
@ -1,63 +1,83 @@
|
|||||||
# Contributing to setup-php
|
# Contributing to setup-php
|
||||||
|
|
||||||
|
## Welcome!
|
||||||
|
|
||||||
|
We look forward to your contributions! Here are some examples how you can contribute:
|
||||||
|
|
||||||
|
* [Ask any questions you may have](https://github.com/shivammathur/setup-php/discussions/new?category=Q-A-Help)
|
||||||
|
* [Report a bug](https://github.com/shivammathur/setup-php/issues/new?labels=type/bug&template=bug.md)
|
||||||
|
* [Propose a new feature](https://github.com/shivammathur/setup-php/issues/new?labels=enhancement&template=feature.md)
|
||||||
|
* [Send a pull request](https://github.com/shivammathur/setup-php/pulls)
|
||||||
|
|
||||||
## Contributor Code of Conduct
|
## Contributor Code of Conduct
|
||||||
|
|
||||||
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
|
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
|
||||||
|
|
||||||
## Workflow
|
## Getting Started
|
||||||
|
|
||||||
* Fork the project.
|
To get started fork `setup-php` and clone it using git:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/<your-username>/setup-php.git
|
||||||
|
|
||||||
|
cd setup-php
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are using `Windows` configure `git` to handle line endings.
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
git config --local core.autocrlf true
|
||||||
|
```
|
||||||
|
|
||||||
|
Install `setup-php` dependencies using [npm](https://www.npmjs.com/):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
## Workflow to create Pull Requests
|
||||||
|
|
||||||
|
* Fork the `setup-php` project and clone it.
|
||||||
|
* Create a new branch from the develop branch.
|
||||||
* Make your bug fix or feature addition.
|
* Make your bug fix or feature addition.
|
||||||
* Add tests for it. This is important so we don't break it in a future version unintentionally.
|
* Add tests for it, so we don't break it in a future version unintentionally.
|
||||||
* Send a pull request to the develop branch.
|
* Ensure the test suite passes and the code complies with our coding guidelines (see below).
|
||||||
|
* Send a pull request to the develop branch with all the details.
|
||||||
|
* If possible, create a GitHub Actions workflow with an integration test for the change in a demo repository and link it in your pull request.
|
||||||
|
|
||||||
Please make sure that you have [set up your user name and email address](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) for use with Git. Strings such as `silly nick name <root@localhost>` look really stupid in the commit history of a project.
|
Please make sure that you have [set up your user name and email address](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) for use with Git. Strings such as `silly nick name <root@localhost>` look really stupid in the commit history of a project.
|
||||||
|
|
||||||
Due to time constraints, you may not always get a quick response. Please do not take delays personal and feel free to remind.
|
Due to time constraints, you may not always get a quick response. Please do not take delays personally and feel free to remind.
|
||||||
|
|
||||||
## Coding Guidelines
|
## Coding Guidelines
|
||||||
|
|
||||||
This project comes with `.prettierrc.json` and `eslintrc.json` configuration files. Please run the following commands to format the code before committing it.
|
This project comes with `.prettierrc.json` and `eslintrc.json` configuration files. Please run the following commands to fix and verify the code quality.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ npm run format
|
npm run format
|
||||||
$ npm run lint
|
npm run lint
|
||||||
```
|
```
|
||||||
|
|
||||||
## Using setup-php from a Git checkout
|
### Running the test suite
|
||||||
|
|
||||||
The following commands can be used to perform the initial checkout of setup-php:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ git clone https://github.com/shivammathur/setup-php.git
|
|
||||||
|
|
||||||
$ cd setup-php
|
|
||||||
```
|
|
||||||
|
|
||||||
Install setup-php dependencies using [npm](https://www.npmjs.com/):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
## Running the test suite
|
|
||||||
|
|
||||||
After following the steps shown above, The `setup-php` tests in the `__tests__` directory can be run using this command:
|
After following the steps shown above, The `setup-php` tests in the `__tests__` directory can be run using this command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ npm test
|
npm test
|
||||||
```
|
```
|
||||||
|
|
||||||
## Creating a release
|
### Creating a release
|
||||||
|
|
||||||
Create a release before you push your changes.
|
Creating a release means compiling all the TypeScript code to a single file which `setup-php` can run. Run this, before you push your changes.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ npm run release
|
npm run build
|
||||||
|
npm run release
|
||||||
```
|
```
|
||||||
|
|
||||||
## Reporting issues
|
### Reporting issues and discussions
|
||||||
|
|
||||||
Please submit the issue using the appropriate template provided for a bug report or a feature request:
|
For questions or support, we prefer GitHub Discussions. For any bugs or new features you can create an issue using the appropriate template:
|
||||||
|
|
||||||
* [Issues](https://github.com/shivammathur/setup-php/issues)
|
* [Discussions](https://github.com/shivammathur/setup-php/discussions)
|
||||||
|
* [Issues](https://github.com/shivammathur/setup-php/issues)
|
||||||
|
|||||||
5
.github/FUNDING.yml
vendored
5
.github/FUNDING.yml
vendored
@ -1,8 +1,3 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github: shivammathur
|
github: shivammathur
|
||||||
community_bridge: setup-php
|
|
||||||
issuehunt: shivammathur
|
|
||||||
patreon: shivammathur
|
|
||||||
liberapay: shivammathur
|
|
||||||
custom: https://www.paypal.me/shivammathur
|
|
||||||
|
|||||||
94
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
94
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
name: Bug report
|
||||||
|
description: Nice, you found a bug!
|
||||||
|
title: "Bug: "
|
||||||
|
labels: ["bug"]
|
||||||
|
assignees: ["shivammathur"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: "Please fill out the sections below to help us address your issue."
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: bug-description
|
||||||
|
attributes:
|
||||||
|
label: "Describe the bug"
|
||||||
|
placeholder: "Please describe the bug concisely."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: "Version"
|
||||||
|
description: "I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`."
|
||||||
|
options:
|
||||||
|
- label: "v2"
|
||||||
|
- label: "v1"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: runners
|
||||||
|
attributes:
|
||||||
|
label: "Runners"
|
||||||
|
description: "Please choose the GitHub Action runner your workflow uses."
|
||||||
|
options:
|
||||||
|
- "GitHub Hosted"
|
||||||
|
- "Self Hosted"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: operating-systems
|
||||||
|
attributes:
|
||||||
|
label: "Operating systems"
|
||||||
|
placeholder: "e.g., Ubuntu 22.04, Windows Server 2022, etc."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: php-versions
|
||||||
|
attributes:
|
||||||
|
label: "PHP versions"
|
||||||
|
placeholder: "e.g., PHP 7.4, PHP 8.0, etc."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: steps-to-reproduce
|
||||||
|
attributes:
|
||||||
|
label: "To Reproduce"
|
||||||
|
placeholder: "Please provide the relevant steps of your workflow `.yml` file."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: expected-behavior
|
||||||
|
attributes:
|
||||||
|
label: "Expected behavior"
|
||||||
|
placeholder: "A clear and concise description of what you expected to happen."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: screenshots-logs
|
||||||
|
attributes:
|
||||||
|
label: "Screenshots/Logs"
|
||||||
|
placeholder: "Drag and drop images or paste logs here..."
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: additional-context
|
||||||
|
attributes:
|
||||||
|
label: "Additional context"
|
||||||
|
placeholder: "Add any other context about the problem here."
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: willing-to-submit-pr
|
||||||
|
attributes:
|
||||||
|
label: "Are you willing to submit a PR?"
|
||||||
|
description: "We accept pull requests targeting the develop branch."
|
||||||
|
options:
|
||||||
|
- "Yes"
|
||||||
|
- "No"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
23
.github/ISSUE_TEMPLATE/bug_report.md
vendored
23
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -1,23 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us improve
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**To Reproduce**
|
|
||||||
Please provide the GitHub Action `.yml` file.
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If applicable, add screenshots to help explain your problem.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context about the problem here.
|
|
||||||
58
.github/ISSUE_TEMPLATE/feature.yml
vendored
Normal file
58
.github/ISSUE_TEMPLATE/feature.yml
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
name: Feature request
|
||||||
|
description: Suggest a new feature
|
||||||
|
title: "Feature: "
|
||||||
|
labels: ["enhancement"]
|
||||||
|
assignees: ["shivammathur"]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: "Please fill out the sections below to help us understand your new feature proposal."
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: feature-description
|
||||||
|
attributes:
|
||||||
|
label: "Describe the feature"
|
||||||
|
placeholder: "A clear and concise description of what you want and why."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
id: version-check
|
||||||
|
attributes:
|
||||||
|
label: "Please check the latest release"
|
||||||
|
options:
|
||||||
|
- label: "I have checked releases, and the feature is missing in the latest patch version of `v2`."
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: underlying-issue
|
||||||
|
attributes:
|
||||||
|
label: "Underlying issue"
|
||||||
|
placeholder: "Please describe the issue this would solve."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: alternatives
|
||||||
|
attributes:
|
||||||
|
label: "Describe alternatives"
|
||||||
|
placeholder: "Please mention any alternative solutions you've considered."
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: additional-context
|
||||||
|
attributes:
|
||||||
|
label: "Additional context"
|
||||||
|
placeholder: "Drag and drop images or paste any additional information here..."
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: willing-to-submit-pr
|
||||||
|
attributes:
|
||||||
|
label: "Are you willing to submit a PR?"
|
||||||
|
description: "We accept pull requests targeting the develop branch."
|
||||||
|
options:
|
||||||
|
- "Yes"
|
||||||
|
- "No"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I want to improve [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
18
.github/PULL_REQUEST_TEMPLATE.md
vendored
18
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -5,16 +5,15 @@ labels: bug or enhancement
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## A Pull Request should be associated with an Issue.
|
## A Pull Request should be associated with a Discussion.
|
||||||
|
|
||||||
> We wish to have discussions in Issues. A single issue may be targeted by multiple PRs.
|
> If you're fixing a bug, adding a new feature or improving something please provide the details in discussions,
|
||||||
> If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues,
|
> so that the development can be pointed in the intended direction.
|
||||||
> and potentially we'll be able to point development in a particular direction.
|
|
||||||
|
|
||||||
Related issue:
|
Related discussion: <!-- Please link the related discussion -->
|
||||||
|
|
||||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
||||||
> Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR
|
> Thank you for your contribution.
|
||||||
|
|
||||||
### Description
|
### Description
|
||||||
|
|
||||||
@ -26,7 +25,12 @@ This PR [briefly explain what it does]
|
|||||||
- [ ] I have run `npm run format` before the commit.
|
- [ ] I have run `npm run format` before the commit.
|
||||||
- [ ] I have run `npm run lint` before the commit.
|
- [ ] I have run `npm run lint` before the commit.
|
||||||
- [ ] I have run `npm run release` before the commit.
|
- [ ] I have run `npm run release` before the commit.
|
||||||
- [ ] `npm test` returns with no unit test errors.
|
- [ ] `npm test` returns with no unit test errors and all code covered.
|
||||||
|
|
||||||
|
> In case this PR edits any scripts:
|
||||||
|
|
||||||
|
- [ ] I have checked the edited scripts for syntax.
|
||||||
|
- [ ] I have tested the changes in an integration test (If yes, provide workflow YAML and link).
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
- Please target the develop branch when submitting the pull request.
|
- Please target the develop branch when submitting the pull request.
|
||||||
|
|||||||
33
.github/PULL_REQUEST_TEMPLATE/FIX.md
vendored
33
.github/PULL_REQUEST_TEMPLATE/FIX.md
vendored
@ -1,33 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🐞 Bug Fix
|
|
||||||
about: You have a fix for a bug?
|
|
||||||
labels: bug
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## A Pull Request should be associated with an Issue.
|
|
||||||
|
|
||||||
> We wish to have discussions in Issues. A single issue may be targeted by multiple PRs.
|
|
||||||
> If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues,
|
|
||||||
> and potentially we'll be able to point development in a particular direction.
|
|
||||||
|
|
||||||
Related issue:
|
|
||||||
|
|
||||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
|
||||||
> Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
This PR [briefly explain what it does]
|
|
||||||
|
|
||||||
> In case this PR introduced TypeScript/JavaScript code changes:
|
|
||||||
|
|
||||||
- [ ] I have written test cases for the changes in this pull request.
|
|
||||||
- [ ] I have run `npm run format` before the commit.
|
|
||||||
- [ ] I have run `npm run lint` before the commit.
|
|
||||||
- [ ] I have run `npm run release` before the commit.
|
|
||||||
- [ ] `npm test` returns with no unit test errors.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
- Please target the develop branch when submitting the pull request.
|
|
||||||
-->
|
|
||||||
33
.github/PULL_REQUEST_TEMPLATE/IMPROVEMENT.md
vendored
33
.github/PULL_REQUEST_TEMPLATE/IMPROVEMENT.md
vendored
@ -1,33 +0,0 @@
|
|||||||
---
|
|
||||||
name: ⚙ Improvement
|
|
||||||
about: You have some improvement to make setup-php better?
|
|
||||||
labels: enhancement
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## A Pull Request should be associated with an Issue.
|
|
||||||
|
|
||||||
> We wish to have discussions in Issues. A single issue may be targeted by multiple PRs.
|
|
||||||
> If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues,
|
|
||||||
> and potentially we'll be able to point development in a particular direction.
|
|
||||||
|
|
||||||
Related issue:
|
|
||||||
|
|
||||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
|
||||||
> Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
This PR [briefly explain what it does]
|
|
||||||
|
|
||||||
> In case this PR introduced TypeScript/JavaScript code changes:
|
|
||||||
|
|
||||||
- [ ] I have written test cases for the changes in this pull request.
|
|
||||||
- [ ] I have run `npm run format` before the commit.
|
|
||||||
- [ ] I have run `npm run lint` before the commit.
|
|
||||||
- [ ] I have run `npm run release` before the commit.
|
|
||||||
- [ ] `npm test` returns with no unit test errors.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
- Please target the develop branch when submitting the pull request.
|
|
||||||
-->
|
|
||||||
33
.github/PULL_REQUEST_TEMPLATE/NEW_FEATURE.md
vendored
33
.github/PULL_REQUEST_TEMPLATE/NEW_FEATURE.md
vendored
@ -1,33 +0,0 @@
|
|||||||
---
|
|
||||||
name: 🎉 New Feature
|
|
||||||
about: You have implemented some neat idea that you want to make part of setup-php?
|
|
||||||
labels: enhancement
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## A Pull Request should be associated with an Issue.
|
|
||||||
|
|
||||||
> We wish to have discussions in Issues. A single issue may be targeted by multiple PRs.
|
|
||||||
> If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues,
|
|
||||||
> and potentially we'll be able to point development in a particular direction.
|
|
||||||
|
|
||||||
Related issue:
|
|
||||||
|
|
||||||
> Further notes in [Contribution Guidelines](.github/CONTRIBUTING.md)
|
|
||||||
> Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR
|
|
||||||
|
|
||||||
### Description
|
|
||||||
|
|
||||||
This PR [briefly explain what it does]
|
|
||||||
|
|
||||||
> In case this PR introduced TypeScript/JavaScript code changes:
|
|
||||||
|
|
||||||
- [ ] I have written test cases for the changes in this pull request.
|
|
||||||
- [ ] I have run `npm run format` before the commit.
|
|
||||||
- [ ] I have run `npm run lint` before the commit.
|
|
||||||
- [ ] I have run `npm run release` before the commit.
|
|
||||||
- [ ] `npm test` returns with no unit test errors.
|
|
||||||
|
|
||||||
<!--
|
|
||||||
- Please target the develop branch when submitting the pull request.
|
|
||||||
-->
|
|
||||||
21
.github/SECURITY.md
vendored
Normal file
21
.github/SECURITY.md
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
The latest patch version of `v2` release of this project is supported for security updates.
|
||||||
|
|
||||||
|
## Supported PHP Versions
|
||||||
|
|
||||||
|
This security policy only applies to the latest patch releases of the following PHP versions.
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
|---------|--------------------|
|
||||||
|
| 8.1 | :white_check_mark: |
|
||||||
|
| 8.2 | :white_check_mark: |
|
||||||
|
| 8.3 | :white_check_mark: |
|
||||||
|
| 8.4 | :white_check_mark: |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@setup-php.com](mailto:contact@setup-php.com).
|
||||||
|
Do not report security reports publicly.
|
||||||
4
.github/codeql/codeql-configuration.yml
vendored
Normal file
4
.github/codeql/codeql-configuration.yml
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
name : CodeQL Configuration
|
||||||
|
|
||||||
|
paths:
|
||||||
|
- './src'
|
||||||
7
.github/dependabot.yml
vendored
Normal file
7
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
target-branch: "develop"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
33
.github/workflows/codeql.yml
vendored
Normal file
33
.github/workflows/codeql.yml
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
name: CodeQL Workflow
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 15 * * 6'
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
codeql:
|
||||||
|
if: github.event.repository.fork == false
|
||||||
|
permissions:
|
||||||
|
actions: read # for github/codeql-action/init to get workflow details
|
||||||
|
contents: read # for actions/checkout to fetch code
|
||||||
|
security-events: write # for github/codeql-action/autobuild to send a status report
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v4
|
||||||
|
with:
|
||||||
|
config-file: ./.github/codeql/codeql-configuration.yml
|
||||||
|
languages: javascript
|
||||||
|
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v4
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v4
|
||||||
138
.github/workflows/docs.yml
vendored
Normal file
138
.github/workflows/docs.yml
vendored
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
name: Docs workflow
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 15 * * 6'
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create:
|
||||||
|
if: github.event.repository.fork == false
|
||||||
|
permissions:
|
||||||
|
contents: none
|
||||||
|
name: Create
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15-intel]
|
||||||
|
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5', '8.6']
|
||||||
|
steps:
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: none
|
||||||
|
- name: Create file with all extensions for Linux and macOS
|
||||||
|
env:
|
||||||
|
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
|
version: ${{ matrix.php-versions }}
|
||||||
|
if: matrix.operating-system != 'windows-2022'
|
||||||
|
run: |
|
||||||
|
php -m >> "$file.all"
|
||||||
|
- name: Create file with all extensions for Windows
|
||||||
|
env:
|
||||||
|
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
|
version: ${{ matrix.php-versions }}
|
||||||
|
if: matrix.operating-system == 'windows-2022'
|
||||||
|
run: |
|
||||||
|
php -m | Out-File -FilePath "$env:file.all" -Append
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
extensions: none
|
||||||
|
tools: none
|
||||||
|
- name: Create final file for Linux and macOS
|
||||||
|
env:
|
||||||
|
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
|
version: ${{ matrix.php-versions }}
|
||||||
|
if: matrix.operating-system != 'windows-2022'
|
||||||
|
run: |
|
||||||
|
echo "## PHP $version" >> "$file"
|
||||||
|
printf "\n" >> "$file"
|
||||||
|
echo "\`\`\`" >> "$file"
|
||||||
|
php -m >> "$file.builtin"
|
||||||
|
while IFS= read -r line; do
|
||||||
|
if [[ $line == [* || -z "${line// }" ]]; then
|
||||||
|
echo "$line" >> "$file"
|
||||||
|
elif grep -q "^$line" "$file.builtin"; then
|
||||||
|
echo "$line (builtin)" >> "$file"
|
||||||
|
else
|
||||||
|
echo "$line (shared)" >> "$file"
|
||||||
|
fi
|
||||||
|
done < "$file.all"
|
||||||
|
echo "\`\`\`" >> "$file"
|
||||||
|
printf "\n" >> "$file"
|
||||||
|
rm "$file.all" "$file.builtin"
|
||||||
|
- name: Create final file for Windows
|
||||||
|
env:
|
||||||
|
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
|
version: ${{ matrix.php-versions }}
|
||||||
|
if: matrix.operating-system == 'windows-2022'
|
||||||
|
run: |
|
||||||
|
Write-Output "## PHP ${{ matrix.php-versions }}`n" | Out-File -FilePath "$env:file"
|
||||||
|
Write-Output "``````" | Out-File -FilePath "$env:file" -Append
|
||||||
|
php -m | Out-File -FilePath "$env:file.builtin" -Append
|
||||||
|
Get-Content "$env:file.all" | ForEach-Object {
|
||||||
|
if ($_.startsWith('[') -or -not $_.trim()) {
|
||||||
|
Write-Output "$_" | Out-File -FilePath "$env:file" -Append
|
||||||
|
} elseif ($_ -in (Get-Content "$env:file.builtin")) {
|
||||||
|
Write-Output "$_ (builtin)" | Out-File -FilePath "$env:file" -Append
|
||||||
|
} else {
|
||||||
|
Write-Output "$_ (shared)" | Out-File -FilePath "$env:file" -Append
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Write-Output "```````n" | Out-File -FilePath "$env:file" -Append
|
||||||
|
Remove-Item "$env:file.all" -Force
|
||||||
|
Remove-Item "$env:file.builtin" -Force
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: lists-php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
|
path: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||||
|
update:
|
||||||
|
if: github.event.repository.fork == false
|
||||||
|
permissions:
|
||||||
|
contents: write # for Git to git push
|
||||||
|
name: Update
|
||||||
|
needs: create
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
repository: ${{ github.repository }}.wiki
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: actions/download-artifact@v8
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}/lists
|
||||||
|
pattern: lists-*
|
||||||
|
merge-multiple: true
|
||||||
|
- name: Configure Git
|
||||||
|
run : |
|
||||||
|
git config --local user.email "${{ secrets.email }}"
|
||||||
|
git config --local user.name "${{ github.repository_owner }}"
|
||||||
|
- name: Combine
|
||||||
|
run: |
|
||||||
|
for os in ubuntu-24.04 ubuntu-22.04 windows-2025 windows-2022 windows-2019 macos-13 macos-14 macos-15 macos-26; do
|
||||||
|
echo "These are extensions which are loaded by default on the following PHP versions. More extensions which are available as packages and available on pecl are supported by setup-php. Refer to [php extension support](https://github.com/shivammathur/setup-php#heavy_plus_sign-php-extension-support) for more details." > Php-extensions-loaded-on-"$os".md
|
||||||
|
for version in 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 8.2 8.3 8.4 8.5 8.6; do
|
||||||
|
if [[ "${os%-*}" = "macos" ]]; then
|
||||||
|
cat lists/php"$version"-macos-15-intel.md >> Php-extensions-loaded-on-"$os".md
|
||||||
|
elif [ "${os%-*}" = "windows" ]; then
|
||||||
|
cat lists/php"$version"-windows-2022.md >> Php-extensions-loaded-on-"$os".md
|
||||||
|
else
|
||||||
|
cat lists/php"$version"-"$os".md >> Php-extensions-loaded-on-"$os".md
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
rm -rf ./lists
|
||||||
|
- name: Update
|
||||||
|
run: |
|
||||||
|
if [ "$(git status --porcelain=v1 2>/dev/null | wc -l)" != "0" ]; then
|
||||||
|
git add .
|
||||||
|
git commit -m "Update PHP extensions on wiki - $(date +'%d-%m-%y')"
|
||||||
|
git push -f https://${{ github.repository_owner }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.wiki.git master || true
|
||||||
|
fi
|
||||||
92
.github/workflows/experimental-workflow.yml
vendored
92
.github/workflows/experimental-workflow.yml
vendored
@ -1,92 +0,0 @@
|
|||||||
name: Experimental workflow
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- nightly
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
- 'examples/**'
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- nightly
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
- 'examples/**'
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
name: Run
|
|
||||||
runs-on: ${{ matrix.operating-system }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
|
||||||
php-versions: ['8.0']
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Setup Node.js 12.x
|
|
||||||
uses: actions/setup-node@v1
|
|
||||||
with:
|
|
||||||
node-version: 12.x
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Prettier Format Check
|
|
||||||
run: npm run format-check
|
|
||||||
|
|
||||||
- name: ESLint Check
|
|
||||||
run: npm run lint
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: npm test
|
|
||||||
|
|
||||||
- name: Send Coverage
|
|
||||||
continue-on-error: true
|
|
||||||
timeout-minutes: 1
|
|
||||||
run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/clover.xml -n github-actions-codecov-${{ matrix.operating-system }}-php${{ matrix.php-versions }}
|
|
||||||
|
|
||||||
- name: Setup PHP with extensions and custom config
|
|
||||||
run: node dist/index.js
|
|
||||||
env:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extensions: xml, opcache, xdebug, pcov #optional
|
|
||||||
ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata #optional
|
|
||||||
coverage: pcov
|
|
||||||
|
|
||||||
- name: Testing PHP version
|
|
||||||
run: |
|
|
||||||
php -v
|
|
||||||
php -r "if(strpos(phpversion(), '${{ matrix.php-versions }}') === false) {throw new Exception('Wrong PHP version Installed');}"
|
|
||||||
|
|
||||||
- name: Testing Composer version
|
|
||||||
run: |
|
|
||||||
composer -V
|
|
||||||
php -r "if(strpos(@exec('composer -V'), 'Composer version') === false) {throw new Exception('Composer not found');}"
|
|
||||||
- name: Testing Extensions
|
|
||||||
run: |
|
|
||||||
php -m
|
|
||||||
php -r "if(! extension_loaded('mbstring')) {throw new Exception('mbstring not found');}"
|
|
||||||
php -r "if(! extension_loaded('pcov')) {throw new Exception('PCOV not found');}"
|
|
||||||
- name: Testing ini values
|
|
||||||
run: |
|
|
||||||
php -r "if(ini_get('post_max_size')!='256M') {throw new Exception('post_max_size not added');}"
|
|
||||||
php -r "if(ini_get('short_open_tag')!=1) {throw new Exception('short_open_tag not added');}"
|
|
||||||
php -r "if(ini_get('date.timezone')!='Asia/Kolkata') {throw new Exception('date.timezone not added');}"
|
|
||||||
- name: Test JIT
|
|
||||||
run: |
|
|
||||||
php -r "if(! extension_loaded('Zend OPcache')) {throw new Exception('Zend OPcache not found');}"
|
|
||||||
php -r "if(ini_get('opcache.jit_buffer_size')!='256M') {throw new Exception('opcache.jit_buffer_size not set');}"
|
|
||||||
php -r "if(ini_get('opcache.jit')!=1235) {throw new Exception('opcache.jit not set');}"
|
|
||||||
php -r "if(ini_get('pcre.jit')!=1) {throw new Exception('pcre.jit not set');}"
|
|
||||||
- name: Benchmark JIT
|
|
||||||
run: |
|
|
||||||
curl -o bench.php https://raw.githubusercontent.com/php/php-src/master/Zend/bench.php
|
|
||||||
php bench.php
|
|
||||||
63
.github/workflows/node.yml
vendored
Normal file
63
.github/workflows/node.yml
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
name: Node workflow
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
|
- verbose
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
- 'examples/**'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
|
- verbose
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
- 'examples/**'
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
name: Run
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
|
||||||
|
- name: Setup Node.js 24.x
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: 24.x
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm install
|
||||||
|
|
||||||
|
- name: Prettier Format Check
|
||||||
|
run: npm run format-check
|
||||||
|
|
||||||
|
- name: ESLint Check
|
||||||
|
run: npm run lint
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: npm test
|
||||||
|
|
||||||
|
- name: Run npm audit
|
||||||
|
run: npm audit
|
||||||
|
|
||||||
|
- name: Send Coverage
|
||||||
|
uses: codecov/codecov-action@v5
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
files: coverage/lcov.info
|
||||||
|
name: github-actions-codecov-${{ matrix.operating-system }}
|
||||||
|
fail_ci_if_error: false
|
||||||
|
verbose: true
|
||||||
93
.github/workflows/php.yml
vendored
Normal file
93
.github/workflows/php.yml
vendored
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
name: Main workflow
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
|
- verbose
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
- 'examples/**'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- develop
|
||||||
|
- verbose
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
- 'examples/**'
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
env:
|
||||||
|
default-php-version: '8.2'
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
name: Run
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15-intel]
|
||||||
|
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5', '8.6']
|
||||||
|
include:
|
||||||
|
- operating-system: ubuntu-24.04
|
||||||
|
php-versions: ''
|
||||||
|
php-version-file: 'php-version-file'
|
||||||
|
env:
|
||||||
|
extensions: xml, opcache, xdebug, pcov, gd
|
||||||
|
key: cache-v5
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Setup cache environment
|
||||||
|
id: cache-env
|
||||||
|
uses: shivammathur/cache-extensions@develop
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions || env.default-php-version }}
|
||||||
|
extensions: ${{ env.extensions }}
|
||||||
|
key: ${{ env.key }}
|
||||||
|
|
||||||
|
- name: Cache extensions
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.cache-env.outputs.dir }}
|
||||||
|
key: ${{ steps.cache-env.outputs.key }}
|
||||||
|
restore-keys: ${{ steps.cache-env.outputs.key }}
|
||||||
|
|
||||||
|
- name: Stage php-version-file
|
||||||
|
if: ${{ matrix.php-version-file == 'php-version-file' }}
|
||||||
|
run: |
|
||||||
|
echo ${{ env.default-php-version }} > php-version-file
|
||||||
|
|
||||||
|
- name: Setup PHP with extensions and custom config
|
||||||
|
run: node dist/index.js
|
||||||
|
env:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
php-version-file: ${{ matrix.php-version-file }}
|
||||||
|
extensions: ${{ env.extensions }}
|
||||||
|
ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata
|
||||||
|
|
||||||
|
- name: Testing PHP version
|
||||||
|
run: |
|
||||||
|
php -v
|
||||||
|
php -r "if(strpos(phpversion(), '${{ matrix.php-versions || env.default-php-version }}') === false) {throw new Exception('Wrong PHP version Installed');}"
|
||||||
|
|
||||||
|
- name: Testing Composer version
|
||||||
|
run: |
|
||||||
|
composer -V
|
||||||
|
php -r "if(strpos(@exec('composer -V'), 'Composer version') === false) {throw new Exception('Composer not found');}"
|
||||||
|
- name: Testing Extensions
|
||||||
|
run: |
|
||||||
|
php -m
|
||||||
|
php -r "if(! extension_loaded('gd')) {throw new Exception('gd not found');}"
|
||||||
|
php -r "if(! extension_loaded('xml')) {throw new Exception('xml not found');}"
|
||||||
|
php -r "if(! extension_loaded('Xdebug')) {throw new Exception('Xdebug not found');}"
|
||||||
|
php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}"
|
||||||
|
- name: Testing ini values
|
||||||
|
run: |
|
||||||
|
php -r "if(ini_get('memory_limit')!='-1') {throw new Exception('memory_limit not disabled');}"
|
||||||
|
php -r "if(ini_get('post_max_size')!='256M') {throw new Exception('post_max_size not added');}"
|
||||||
|
php -r "if(ini_get('short_open_tag')!=1) {throw new Exception('short_open_tag not added');}"
|
||||||
|
php -r "if(ini_get('date.timezone')!='Asia/Kolkata') {throw new Exception('date.timezone not added');}"
|
||||||
62
.github/workflows/publish.yml
vendored
Normal file
62
.github/workflows/publish.yml
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
name: Publish Package
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [created]
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
skip:
|
||||||
|
description: Skip release to repository
|
||||||
|
required: false
|
||||||
|
tag:
|
||||||
|
description: Tag name
|
||||||
|
required: true
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
steps:
|
||||||
|
- name: Checkout release
|
||||||
|
if: github.event_name != 'workflow_dispatch'
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Checkout tag
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
if: github.event_name == 'workflow_dispatch'
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.inputs.tag }}
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
node-version: '20.x'
|
||||||
|
registry-url: https://registry.npmjs.org
|
||||||
|
|
||||||
|
- name: Install dependencies and add lib
|
||||||
|
run: |
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
sed -i -e '/lib\//d' .gitignore
|
||||||
|
|
||||||
|
- name: Publish to NPM
|
||||||
|
if: "!contains(github.event.inputs.skip, 'skip-npm')"
|
||||||
|
run: npm publish --access public
|
||||||
|
env:
|
||||||
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
|
|
||||||
|
- name: Change to GitHub Packages registry
|
||||||
|
uses: actions/setup-node@v6
|
||||||
|
with:
|
||||||
|
registry-url: https://npm.pkg.github.com
|
||||||
|
scope: '@shivammathur'
|
||||||
|
|
||||||
|
- name: Patch package.json
|
||||||
|
run: |
|
||||||
|
sed -i 's#"name": "#"name": "@shivammathur/#' package.json
|
||||||
|
|
||||||
|
- name: Publish to GitHub Packages
|
||||||
|
if: "!contains(github.event.inputs.skip, 'skip-github-packages')"
|
||||||
|
run: npm publish
|
||||||
|
env:
|
||||||
|
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
80
.github/workflows/workflow.yml
vendored
80
.github/workflows/workflow.yml
vendored
@ -1,80 +0,0 @@
|
|||||||
name: Main workflow
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
- 'examples/**'
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
- 'examples/**'
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
name: Run
|
|
||||||
runs-on: ${{ matrix.operating-system }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
|
||||||
php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Setup Node.js 12.x
|
|
||||||
uses: actions/setup-node@v1
|
|
||||||
with:
|
|
||||||
node-version: 12.x
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: npm install
|
|
||||||
|
|
||||||
- name: Prettier Format Check
|
|
||||||
run: npm run format-check
|
|
||||||
|
|
||||||
- name: ESLint Check
|
|
||||||
run: npm run lint
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: npm test
|
|
||||||
|
|
||||||
- name: Send Coverage
|
|
||||||
continue-on-error: true
|
|
||||||
timeout-minutes: 1
|
|
||||||
run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/clover.xml -n github-actions-codecov-${{ matrix.operating-system }}-php${{ matrix.php-versions }}
|
|
||||||
|
|
||||||
- name: Setup PHP with extensions and custom config
|
|
||||||
run: node dist/index.js
|
|
||||||
env:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extensions: xml, opcache, xdebug, pcov #optional
|
|
||||||
ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata #optional
|
|
||||||
|
|
||||||
- name: Testing PHP version
|
|
||||||
run: |
|
|
||||||
php -v
|
|
||||||
php -r "if(strpos(phpversion(), '${{ matrix.php-versions }}') === false) {throw new Exception('Wrong PHP version Installed');}"
|
|
||||||
|
|
||||||
- name: Testing Composer version
|
|
||||||
run: |
|
|
||||||
composer -V
|
|
||||||
php -r "if(strpos(@exec('composer -V'), 'Composer version') === false) {throw new Exception('Composer not found');}"
|
|
||||||
- name: Testing Extensions
|
|
||||||
run: |
|
|
||||||
php -m
|
|
||||||
php -r "if(! extension_loaded('xml')) {throw new Exception('xml not found');}"
|
|
||||||
php -r "if(! extension_loaded('Xdebug')) {throw new Exception('Xdebug not found');}"
|
|
||||||
php -r "if(phpversion()>=7.1 && ! extension_loaded('pcov')) {throw new Exception('PCOV not found');}"
|
|
||||||
- name: Testing ini values
|
|
||||||
run: |
|
|
||||||
php -r "if(ini_get('post_max_size')!='256M') {throw new Exception('post_max_size not added');}"
|
|
||||||
php -r "if(ini_get('short_open_tag')!=1) {throw new Exception('short_open_tag not added');}"
|
|
||||||
php -r "if(ini_get('date.timezone')!='Asia/Kolkata') {throw new Exception('date.timezone not added');}"
|
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,7 +3,7 @@ node_modules/
|
|||||||
__tests__/runner/*
|
__tests__/runner/*
|
||||||
lib/
|
lib/
|
||||||
|
|
||||||
# Rest of the file pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
|
# Rest of the file pulled from https://github.com/github/gitignore/blob/main/Node.gitignore
|
||||||
# Logs
|
# Logs
|
||||||
logs
|
logs
|
||||||
*.log
|
*.log
|
||||||
|
|||||||
1
.node-version
Normal file
1
.node-version
Normal file
@ -0,0 +1 @@
|
|||||||
|
20
|
||||||
@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
|
"arrowParens": "avoid",
|
||||||
|
"bracketSpacing": false,
|
||||||
|
"endOfLine": "auto",
|
||||||
|
"parser": "typescript",
|
||||||
"printWidth": 80,
|
"printWidth": 80,
|
||||||
"tabWidth": 2,
|
|
||||||
"useTabs": false,
|
|
||||||
"semi": true,
|
"semi": true,
|
||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
|
"tabWidth": 2,
|
||||||
"trailingComma": "none",
|
"trailingComma": "none",
|
||||||
"bracketSpacing": false,
|
"useTabs": false
|
||||||
"arrowParens": "avoid",
|
}
|
||||||
"parser": "typescript"
|
|
||||||
}
|
|
||||||
2
LICENSE
2
LICENSE
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2019-2020 shivammathur and contributors
|
Copyright (c) shivammathur and contributors
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@ -1,52 +1,16 @@
|
|||||||
import * as config from '../src/config';
|
import * as config from '../src/config';
|
||||||
|
|
||||||
describe('Config tests', () => {
|
describe('Config tests', () => {
|
||||||
it('checking addINIValuesOnWindows', async () => {
|
it.each`
|
||||||
let win32: string = await config.addINIValues(
|
ini_values | os | output
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
${'a=b, c=d'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=b\nc=d"'}
|
||||||
'win32'
|
${'a=b, c=d'} | ${'linux'} | ${'echo "a=b\nc=d" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'}
|
||||||
);
|
${'a=b, c=d'} | ${'darwin'} | ${'echo "a=b\nc=d" | sudo tee -a "${pecl_file:-${ini_file[@]}}"'}
|
||||||
expect(win32).toContain(
|
${'a=b & ~c'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'b & ~c\'"'}
|
||||||
'Add-Content C:\\tools\\php\\php.ini "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"'
|
${'a="~(b)"'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'~(b)\'"'}
|
||||||
);
|
${'a="b, c"'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=b, c"'}
|
||||||
|
${'a=b, c=d'} | ${'openbsd'} | ${'Platform openbsd is not supported'}
|
||||||
win32 = await config.addINIValues(
|
`('checking addINIValues on $os', async ({ini_values, os, output}) => {
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
expect(await config.addINIValues(ini_values, os)).toContain(output);
|
||||||
'fedora'
|
|
||||||
);
|
|
||||||
expect(win32).toContain('Platform fedora is not supported');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addINIValuesOnLinux', async () => {
|
|
||||||
let linux: string = await config.addINIValues(
|
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
|
||||||
'linux',
|
|
||||||
true
|
|
||||||
);
|
|
||||||
expect(linux).toContain(
|
|
||||||
'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"'
|
|
||||||
);
|
|
||||||
|
|
||||||
linux = await config.addINIValues(
|
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
|
||||||
'fedora'
|
|
||||||
);
|
|
||||||
expect(linux).toContain('Platform fedora is not supported');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addINIValuesOnDarwin', async () => {
|
|
||||||
let darwin: string = await config.addINIValues(
|
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
|
||||||
'darwin'
|
|
||||||
);
|
|
||||||
expect(darwin).toContain(
|
|
||||||
'echo "post_max_size=256M\nshort_open_tag=On\ndate.timezone=Asia/Kolkata"'
|
|
||||||
);
|
|
||||||
|
|
||||||
darwin = await config.addINIValues(
|
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
|
||||||
'fedora'
|
|
||||||
);
|
|
||||||
expect(darwin).toContain('Platform fedora is not supported');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
106
__tests__/core.test.ts
Normal file
106
__tests__/core.test.ts
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
import * as core from '../src/core';
|
||||||
|
|
||||||
|
describe('Core tests', () => {
|
||||||
|
const originalEnv = process.env;
|
||||||
|
const originalExitCode = process.exitCode;
|
||||||
|
let stdoutOutput: string;
|
||||||
|
const originalWrite = process.stdout.write;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
process.env = {...originalEnv};
|
||||||
|
process.exitCode = undefined;
|
||||||
|
stdoutOutput = '';
|
||||||
|
process.stdout.write = jest.fn((chunk: string | Uint8Array): boolean => {
|
||||||
|
stdoutOutput += chunk.toString();
|
||||||
|
return true;
|
||||||
|
}) as unknown as typeof process.stdout.write;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
process.env = originalEnv;
|
||||||
|
process.exitCode = originalExitCode;
|
||||||
|
process.stdout.write = originalWrite;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking issueCommand with no properties', () => {
|
||||||
|
core.issueCommand('warning', {}, 'test message');
|
||||||
|
expect(stdoutOutput).toContain('::warning::test message');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking issueCommand with properties', () => {
|
||||||
|
core.issueCommand('error', {file: 'test.ts', line: '10'}, 'error message');
|
||||||
|
expect(stdoutOutput).toContain(
|
||||||
|
'::error file=test.ts,line=10::error message'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking issueCommand escapes special characters in message', () => {
|
||||||
|
core.issueCommand('warning', {}, 'line1\nline2\rline3%percent');
|
||||||
|
expect(stdoutOutput).toContain(
|
||||||
|
'::warning::line1%0Aline2%0Dline3%25percent'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking issueCommand escapes special characters in properties', () => {
|
||||||
|
core.issueCommand('error', {file: 'path:to,file'}, 'message');
|
||||||
|
expect(stdoutOutput).toContain('::error file=path%3Ato%2Cfile::message');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking issueCommand with Error object', () => {
|
||||||
|
const error = new Error('test error');
|
||||||
|
core.issueCommand('error', {}, error);
|
||||||
|
expect(stdoutOutput).toContain('::error::Error: test error');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking issueCommand filters empty properties', () => {
|
||||||
|
core.issueCommand('warning', {file: 'test.ts', line: ''}, 'message');
|
||||||
|
expect(stdoutOutput).toContain('::warning file=test.ts::message');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking error', () => {
|
||||||
|
core.error('error message');
|
||||||
|
expect(stdoutOutput).toContain('::error::error message');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking error with Error object', () => {
|
||||||
|
core.error(new Error('error instance'));
|
||||||
|
expect(stdoutOutput).toContain('::error::Error: error instance');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking setFailed', () => {
|
||||||
|
core.setFailed('failure message');
|
||||||
|
expect(process.exitCode).toBe(1);
|
||||||
|
expect(stdoutOutput).toContain('::error::failure message');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking setFailed with Error object', () => {
|
||||||
|
core.setFailed(new Error('failure error'));
|
||||||
|
expect(process.exitCode).toBe(1);
|
||||||
|
expect(stdoutOutput).toContain('::error::Error: failure error');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getInput returns value', () => {
|
||||||
|
process.env['INPUT_TEST-INPUT'] = 'test value';
|
||||||
|
expect(core.getInput('test-input')).toBe('test value');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getInput trims value', () => {
|
||||||
|
process.env['INPUT_TEST-INPUT'] = ' trimmed ';
|
||||||
|
expect(core.getInput('test-input')).toBe('trimmed');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getInput returns empty string for missing input', () => {
|
||||||
|
expect(core.getInput('missing-input')).toBe('');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getInput throws for required missing input', () => {
|
||||||
|
expect(() => core.getInput('missing-input', true)).toThrow(
|
||||||
|
'Input required and not supplied: missing-input'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getInput handles spaces in name', () => {
|
||||||
|
process.env['INPUT_INPUT_WITH_SPACES'] = 'spaced value';
|
||||||
|
expect(core.getInput('input with spaces')).toBe('spaced value');
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -1,97 +1,44 @@
|
|||||||
import * as coverage from '../src/coverage';
|
import * as coverage from '../src/coverage';
|
||||||
|
|
||||||
jest.mock('../src/extensions', () => ({
|
|
||||||
addExtension: jest.fn().mockImplementation(extension => {
|
|
||||||
return 'add_extension ' + extension + '\n';
|
|
||||||
})
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('Config tests', () => {
|
describe('Config tests', () => {
|
||||||
it('checking addCoverage with PCOV on windows', async () => {
|
it.each`
|
||||||
let win32: string = await coverage.addCoverage('PCOV', '7.4', 'win32');
|
driver | php | os | output
|
||||||
expect(win32).toContain('add_extension pcov');
|
${'PCOV'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
||||||
expect(win32).toContain('Remove-Extension xdebug');
|
${'pcov'} | ${'7.4'} | ${'win32'} | ${'$pcov_version = php -r "echo phpversion(\'pcov\');"'}
|
||||||
|
${'pcov'} | ${'7.4'} | ${'win32'} | ${'PCOV $pcov_version enabled as coverage driver'}
|
||||||
win32 = await coverage.addCoverage('pcov', '7.0', 'win32');
|
${'pcov'} | ${'7.0'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
|
||||||
expect(win32).toContain('PHP 7.1 or newer is required');
|
${'pcov'} | ${'5.6'} | ${'win32'} | ${'PHP 7.1 or newer is required'}
|
||||||
|
${'pcov'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
||||||
win32 = await coverage.addCoverage('pcov', '5.6', 'win32');
|
${'pcov'} | ${'7.4'} | ${'linux'} | ${'add_extension pcov,disable_extension xdebug false'}
|
||||||
expect(win32).toContain('PHP 7.1 or newer is required');
|
${'pcov'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension pcov,disable_extension xdebug false'}
|
||||||
});
|
${'xdebug'} | ${'7.4'} | ${'win32'} | ${'Add-Extension xdebug'}
|
||||||
|
${'xdebug3'} | ${'7.1'} | ${'win32'} | ${'xdebug3 is not supported on PHP 7.1'}
|
||||||
it('checking addCoverage with PCOV on linux', async () => {
|
${'xdebug2'} | ${'7.4'} | ${'win32'} | ${'Add-Extension xdebug stable 2.9.8'}
|
||||||
const linux: string = await coverage.addCoverage('pcov', '7.4', 'linux');
|
${'xdebug'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
|
||||||
expect(linux).toContain('add_extension pcov');
|
${'xdebug3'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
|
||||||
expect(linux).toContain('remove_extension xdebug');
|
${'xdebug2'} | ${'7.4'} | ${'linux'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'}
|
||||||
});
|
${'xdebug'} | ${'7.4'} | ${'linux'} | ${'xdebug_version="$(php -r "echo phpversion(\'xdebug\');")"'}
|
||||||
|
${'xdebug'} | ${'7.4'} | ${'linux'} | ${'Xdebug $xdebug_version enabled as coverage driver'}
|
||||||
it('checking addCoverage with PCOV on darwin', async () => {
|
${'xdebug'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug'}
|
||||||
const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin');
|
${'xdebug3'} | ${'7.1'} | ${'darwin'} | ${'xdebug3 is not supported on PHP 7.1'}
|
||||||
expect(darwin).toContain('add_extension pcov');
|
${'xdebug2'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug2'}
|
||||||
expect(darwin).toContain('remove_extension xdebug');
|
${'xdebug2'} | ${'8.0'} | ${'darwin'} | ${'xdebug2 is not supported on PHP 8.0'}
|
||||||
});
|
${'none'} | ${'7.4'} | ${'win32'} | ${'Disable-Extension xdebug false,Disable-Extension pcov false'}
|
||||||
|
${'none'} | ${'7.4'} | ${'linux'} | ${'disable_extension xdebug false,disable_extension pcov false'}
|
||||||
it('checking addCoverage with Xdebug on windows', async () => {
|
${'none'} | ${'7.4'} | ${'darwin'} | ${'disable_extension xdebug false,disable_extension pcov false'}
|
||||||
const win32: string = await coverage.addCoverage('xdebug', '7.4', 'win32');
|
${'nocov'} | ${'7.x'} | ${'any'} | ${''}
|
||||||
expect(win32).toContain('add_extension xdebug');
|
${''} | ${'7.x'} | ${'any'} | ${''}
|
||||||
});
|
`(
|
||||||
|
'checking addCoverage with $driver on $os',
|
||||||
it('checking addCoverage with Xdebug on windows', async () => {
|
async ({driver, php, os, output}) => {
|
||||||
const win32: string = await coverage.addCoverage('xdebug', '8.0', 'win32');
|
const script: string = await coverage.addCoverage(driver, php, os);
|
||||||
expect(win32).toContain('Xdebug currently only supports PHP 7.4 or lower');
|
if (output) {
|
||||||
});
|
output.split(',').forEach((command: string) => {
|
||||||
|
expect(script).toContain(command);
|
||||||
it('checking addCoverage with Xdebug on linux', async () => {
|
});
|
||||||
const linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux');
|
} else {
|
||||||
expect(linux).toContain('add_extension xdebug');
|
expect(script).toEqual(output);
|
||||||
});
|
}
|
||||||
|
}
|
||||||
it('checking addCoverage with Xdebug on linux', async () => {
|
);
|
||||||
const linux: string = await coverage.addCoverage('xdebug', '8.0', 'linux');
|
|
||||||
expect(linux).toContain('Xdebug currently only supports PHP 7.4 or lower');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on darwin', async () => {
|
|
||||||
const darwin: string = await coverage.addCoverage(
|
|
||||||
'xdebug',
|
|
||||||
'7.4',
|
|
||||||
'darwin'
|
|
||||||
);
|
|
||||||
expect(darwin).toContain('add_extension xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on darwin', async () => {
|
|
||||||
const darwin: string = await coverage.addCoverage(
|
|
||||||
'xdebug',
|
|
||||||
'8.0',
|
|
||||||
'darwin'
|
|
||||||
);
|
|
||||||
expect(darwin).toContain('Xdebug currently only supports PHP 7.4 or lower');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking disableCoverage windows', async () => {
|
|
||||||
const win32 = await coverage.addCoverage('none', '7.4', 'win32');
|
|
||||||
expect(win32).toContain('Remove-Extension xdebug');
|
|
||||||
expect(win32).toContain('Remove-Extension pcov');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking disableCoverage on linux', async () => {
|
|
||||||
const linux: string = await coverage.addCoverage('none', '7.4', 'linux');
|
|
||||||
expect(linux).toContain('remove_extension xdebug');
|
|
||||||
expect(linux).toContain('remove_extension pcov');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking disableCoverage on darwin', async () => {
|
|
||||||
const darwin: string = await coverage.addCoverage('none', '7.4', 'darwin');
|
|
||||||
expect(darwin).toContain('remove_extension xdebug');
|
|
||||||
expect(darwin).toContain('remove_extension pcov');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking no or invalid coverage driver', async () => {
|
|
||||||
let nocov: string = await coverage.addCoverage('nocov', '7.x', 'any');
|
|
||||||
expect(nocov).toEqual('');
|
|
||||||
|
|
||||||
nocov = await coverage.addCoverage('', '7.x', 'any');
|
|
||||||
expect(nocov).toEqual('');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,121 +1,161 @@
|
|||||||
|
import * as fs from 'fs';
|
||||||
import * as extensions from '../src/extensions';
|
import * as extensions from '../src/extensions';
|
||||||
|
|
||||||
describe('Extension tests', () => {
|
describe('Extension tests', () => {
|
||||||
it('checking addExtensionOnWindows', async () => {
|
it.each`
|
||||||
let win32: string = await extensions.addExtension(
|
extension | version | output
|
||||||
'xdebug, pcov, phalcon4, ast-beta',
|
${'none'} | ${'7.4'} | ${'Disable-AllShared'}
|
||||||
'7.4',
|
${':intl'} | ${'7.4'} | ${'Disable-Extension intl'}
|
||||||
'win32'
|
${'ast-beta'} | ${'7.4'} | ${'Add-Extension ast beta'}
|
||||||
);
|
${'blackfire'} | ${'7.3'} | ${'Add-Blackfire blackfire'}
|
||||||
expect(win32).toContain('Add-Extension xdebug');
|
${'blackfire-1.31.0'} | ${'7.3'} | ${'Add-Blackfire blackfire-1.31.0'}
|
||||||
expect(win32).toContain('Add-Extension pcov');
|
${'grpc-1.2.3'} | ${'7.4'} | ${'Add-Extension grpc stable 1.2.3'}
|
||||||
expect(win32).toContain('phalcon.ps1 phalcon4');
|
${'inotify-1.2.3alpha2'} | ${'7.4'} | ${'Add-Extension inotify alpha 1.2.3'}
|
||||||
expect(win32).toContain('Add-Extension ast beta');
|
${'ioncube'} | ${'7.4'} | ${'Add-Ioncube'}
|
||||||
|
${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.3'} | ${'Add-Log "$cross" "mongodb-mongodb/mongo-php-driver@master" "mongodb-mongodb/mongo-php-driver@master is not supported on PHP 7.3"'}
|
||||||
|
${'mysql'} | ${'7.4'} | ${'Add-Extension mysqli\nAdd-Extension mysqlnd'}
|
||||||
|
${'mysql'} | ${'5.5'} | ${'Add-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd'}
|
||||||
|
${'oci8'} | ${'7.4'} | ${'Add-Oci oci8'}
|
||||||
|
${'pcov'} | ${'5.6'} | ${'Add-Log "$cross" "pcov" "pcov is not supported on PHP 5.6"'}
|
||||||
|
${'pdo_oci'} | ${'7.4'} | ${'Add-Oci pdo_oci'}
|
||||||
|
${'ibm_db2'} | ${'7.4'} | ${'Add-Ibm ibm_db2'}
|
||||||
|
${'pdo_ibm'} | ${'7.4'} | ${'Add-Ibm pdo_ibm'}
|
||||||
|
${'pecl_http'} | ${'7.4'} | ${'Add-Http'}
|
||||||
|
${'pdo_sqlsrv'} | ${'7.4'} | ${'Add-Sqlsrv pdo_sqlsrv'}
|
||||||
|
${'phalcon3'} | ${'7.2'} | ${'Add-Phalcon phalcon3'}
|
||||||
|
${'phalcon4'} | ${'7.4'} | ${'Add-Phalcon phalcon4'}
|
||||||
|
${'sqlite'} | ${'7.4'} | ${'Add-Extension sqlite3'}
|
||||||
|
${'sqlsrv'} | ${'5.6'} | ${'Add-Extension sqlsrv'}
|
||||||
|
${'sqlsrv'} | ${'7.4'} | ${'Add-Sqlsrv sqlsrv'}
|
||||||
|
${'sqlsrv-1.2.3preview1'} | ${'7.4'} | ${'Add-Extension sqlsrv devel 1.2.3'}
|
||||||
|
${'Xdebug'} | ${'7.4'} | ${'Add-Extension xdebug'}
|
||||||
|
${'xdebug2'} | ${'7.2'} | ${'Add-Extension xdebug stable 2.9.8'}
|
||||||
|
${'zephir_parser'} | ${'7.2'} | ${'Add-ZephirParser zephir_parser'}
|
||||||
|
`(
|
||||||
|
'checking addExtensionOnWindows for extension $extension on version $version',
|
||||||
|
async ({extension, version, output}) => {
|
||||||
|
expect(
|
||||||
|
await extensions.addExtension(extension, version, 'win32')
|
||||||
|
).toContain(output);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
win32 = await extensions.addExtension(
|
it.each`
|
||||||
'phalcon3, does_not_exist',
|
extension | version | output
|
||||||
'7.2',
|
${'none'} | ${'7.4'} | ${'disable_all_shared'}
|
||||||
'win32',
|
${':intl'} | ${'7.4'} | ${'disable_extension intl'}
|
||||||
true
|
${'ast-beta'} | ${'7.4'} | ${'add_unstable_extension ast beta extension'}
|
||||||
);
|
${'blackfire'} | ${'7.3'} | ${'add_blackfire blackfire'}
|
||||||
expect(win32).toContain('phalcon.ps1 phalcon3');
|
${'blackfire-1.31.0'} | ${'7.3'} | ${'add_blackfire blackfire-1.31.0'}
|
||||||
expect(win32).toContain('Add-Extension does_not_exist');
|
${'couchbase'} | ${'7.4'} | ${'add_couchbase'}
|
||||||
|
${'gearman'} | ${'5.6'} | ${'add_gearman'}
|
||||||
|
${'geos'} | ${'7.3'} | ${'add_geos'}
|
||||||
|
${'grpc-1.2.3'} | ${'7.4'} | ${'add_pecl_extension grpc 1.2.3 extension'}
|
||||||
|
${'http-1.2.3'} | ${'7.3'} | ${'add_http http-1.2.3'}
|
||||||
|
${'intl-65.1'} | ${'5.6'} | ${'add_intl intl-65.1'}
|
||||||
|
${'ioncube'} | ${'7.3'} | ${'add_ioncube'}
|
||||||
|
${'memcache-8.2'} | ${'8.2'} | ${'add_pecl_extension memcache 8.2 extension'}
|
||||||
|
${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.3'} | ${'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'}
|
||||||
|
${'oci8'} | ${'7.3'} | ${'add_oci oci8'}
|
||||||
|
${'pcov'} | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6'}
|
||||||
|
${'ibm_db2'} | ${'7.3'} | ${'add_ibm ibm_db2'}
|
||||||
|
${'pdo-odbc'} | ${'7.4'} | ${'add_pdo_extension odbc'}
|
||||||
|
${'pdo_cubrid'} | ${'7.0'} | ${'add_cubrid pdo_cubrid'}
|
||||||
|
${'pdo_cubrid'} | ${'7.4'} | ${'add_pdo_extension cubrid'}
|
||||||
|
${'pdo_mysql'} | ${'7.4'} | ${'add_pdo_extension mysql'}
|
||||||
|
${'pdo_oci'} | ${'7.3'} | ${'add_oci pdo_oci'}
|
||||||
|
${'pdo_ibm'} | ${'7.3'} | ${'add_ibm pdo_ibm'}
|
||||||
|
${'pdo_sqlsrv'} | ${'7.4'} | ${'add_sqlsrv pdo_sqlsrv'}
|
||||||
|
${'pecl_http'} | ${'7.3'} | ${'add_http'}
|
||||||
|
${'phalcon3'} | ${'7.3'} | ${'add_phalcon phalcon3'}
|
||||||
|
${'relay'} | ${'7.4'} | ${'add_relay relay'}
|
||||||
|
${'relay-v1.2.3'} | ${'7.4'} | ${'add_relay relay-v1.2.3'}
|
||||||
|
${'sqlite'} | ${'7.4'} | ${'add_extension sqlite3'}
|
||||||
|
${'sqlsrv-1.2.3-beta1'} | ${'7.4'} | ${'add_pecl_extension sqlsrv 1.2.3beta1 extension'}
|
||||||
|
${'Xdebug'} | ${'7.4'} | ${'add_extension xdebug'}
|
||||||
|
${'xdebug-alpha'} | ${'7.4'} | ${'add_unstable_extension xdebug alpha zend_extension'}
|
||||||
|
${'xdebug2'} | ${'7.2'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'}
|
||||||
|
${'zephir_parser-1.2.3'} | ${'7.2'} | ${'add_zephir_parser zephir_parser-1.2.3'}
|
||||||
|
`(
|
||||||
|
'checking addExtensionOnLinux for extension $extension on version $version',
|
||||||
|
async ({extension, version, output}) => {
|
||||||
|
expect(
|
||||||
|
await extensions.addExtension(extension, version, 'linux')
|
||||||
|
).toContain(output);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
win32 = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
it.each`
|
||||||
expect(win32).toContain('Platform fedora is not supported');
|
extension | version | output
|
||||||
});
|
${'none'} | ${'7.2'} | ${'disable_all_shared'}
|
||||||
|
${':intl'} | ${'7.2'} | ${'disable_extension intl'}
|
||||||
|
${'ast-beta'} | ${'7.2'} | ${'add_unstable_extension ast beta extension'}
|
||||||
|
${'blackfire'} | ${'7.3'} | ${'add_blackfire blackfire'}
|
||||||
|
${'blackfire-1.31.0'} | ${'7.3'} | ${'add_blackfire blackfire-1.31.0'}
|
||||||
|
${'couchbase'} | ${'5.6'} | ${'add_couchbase'}
|
||||||
|
${'does_not_exist'} | ${'7.2'} | ${'add_extension does_not_exist'}
|
||||||
|
${'geos'} | ${'7.3'} | ${'add_geos'}
|
||||||
|
${'grpc-1.2.3'} | ${'7.2'} | ${'add_pecl_extension grpc 1.2.3 extension'}
|
||||||
|
${'http-1.2.3'} | ${'7.3'} | ${'add_http http-1.2.3'}
|
||||||
|
${'imagick'} | ${'5.5'} | ${'add_extension imagick'}
|
||||||
|
${'ioncube'} | ${'7.3'} | ${'add_ioncube'}
|
||||||
|
${'mongodb-mongodb/mongo-php-driver@master'} | ${'7.2'} | ${'add_extension_from_source mongodb https://github.com mongodb mongo-php-driver master extension'}
|
||||||
|
${'oci8'} | ${'7.3'} | ${'add_oci oci8'}
|
||||||
|
${'pcov'} | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'}
|
||||||
|
${'pdo_oci'} | ${'7.3'} | ${'add_oci pdo_oci'}
|
||||||
|
${'pecl_http'} | ${'7.3'} | ${'add_http'}
|
||||||
|
${'relay-1.2.3'} | ${'7.4'} | ${'add_relay relay-1.2.3'}
|
||||||
|
${'sqlite'} | ${'7.2'} | ${'add_extension sqlite3'}
|
||||||
|
${'zephir_parser-v1.2.3'} | ${'7.2'} | ${'add_zephir_parser zephir_parser-v1.2.3'}
|
||||||
|
`(
|
||||||
|
'checking addExtensionOnDarwin for extension $extension on version $version',
|
||||||
|
async ({extension, version, output}) => {
|
||||||
|
expect(
|
||||||
|
await extensions.addExtension(extension, version, 'darwin')
|
||||||
|
).toContain(output);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
it('checking addExtensionOnLinux', async () => {
|
const data: string[][] = fs
|
||||||
let linux: string = await extensions.addExtension(
|
.readFileSync('src/configs/brew_extensions')
|
||||||
'xdebug, pcov, ast-beta, xdebug-alpha',
|
.toString()
|
||||||
'7.4',
|
.split(/\r?\n/)
|
||||||
'linux'
|
.filter(Boolean)
|
||||||
);
|
.map(line => {
|
||||||
expect(linux).toContain('update_extension xdebug 2.9.0');
|
const [formula, extension]: string[] = line.split('=');
|
||||||
expect(linux).toContain(
|
const prefix: string =
|
||||||
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php7.4-pcov'
|
extension == 'xdebug' ? 'zend_extension' : 'extension';
|
||||||
);
|
const ext_name = extension.replace(/\d+|(pdo|pecl)[_-]/, '');
|
||||||
expect(linux).toContain('add_unstable_extension ast beta extension');
|
const output: string = fs.existsSync(
|
||||||
expect(linux).toContain(
|
`src/scripts/extensions/${ext_name}.sh`
|
||||||
'add_unstable_extension xdebug alpha zend_extension'
|
)
|
||||||
);
|
? `add_${ext_name}`
|
||||||
|
: `add_brew_extension ${formula} ${prefix}`;
|
||||||
|
return [
|
||||||
|
formula,
|
||||||
|
formula.match(/phalcon3|lua|propro/) ? '7.3' : '8.1',
|
||||||
|
output
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.0', 'linux');
|
it.each(data)(
|
||||||
expect(linux).toContain('gearman.sh 7.0');
|
'checking addExtensionOnDarwin for brew extension %s',
|
||||||
linux = await extensions.addExtension('gearman', '7.1', 'linux');
|
async (extension, version, output) => {
|
||||||
expect(linux).toContain('gearman.sh 7.1');
|
expect(
|
||||||
|
await extensions.addExtension(extension, version, 'darwin')
|
||||||
|
).toContain(output);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
linux = await extensions.addExtension('gearman', '7.2', 'linux');
|
it.each`
|
||||||
expect(linux).toContain('gearman.sh 7.2');
|
extension | version | output
|
||||||
|
${'xdebug'} | ${'7.2'} | ${'Platform openbsd is not supported'}
|
||||||
linux = await extensions.addExtension('gearman', '7.3', 'linux');
|
`(
|
||||||
expect(linux).toContain('gearman.sh 7.3');
|
'checking addExtension on openbsd for extension $extension on version $version',
|
||||||
|
async ({extension, version, output}) => {
|
||||||
linux = await extensions.addExtension('gearman', '7.4', 'linux');
|
expect(
|
||||||
expect(linux).toContain('gearman.sh 7.4');
|
await extensions.addExtension(extension, version, 'openbsd')
|
||||||
|
).toContain(output);
|
||||||
linux = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
}
|
||||||
expect(linux).toContain('Platform fedora is not supported');
|
);
|
||||||
|
|
||||||
linux = await extensions.addExtension('phalcon3, phalcon4', '7.3', 'linux');
|
|
||||||
expect(linux).toContain('phalcon.sh phalcon3 7.3');
|
|
||||||
expect(linux).toContain('phalcon.sh phalcon4 7.3');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addExtensionOnDarwin', async () => {
|
|
||||||
let darwin: string = await extensions.addExtension(
|
|
||||||
'xdebug, pcov, ast-beta',
|
|
||||||
'7.2',
|
|
||||||
'darwin'
|
|
||||||
);
|
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f pcov');
|
|
||||||
expect(darwin).toContain('add_unstable_extension ast beta extension');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('phalcon3', '7.0', 'darwin');
|
|
||||||
expect(darwin).toContain('phalcon_darwin.sh phalcon3 7.0');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('phalcon4', '7.3', 'darwin');
|
|
||||||
expect(darwin).toContain('phalcon_darwin.sh phalcon4 7.3');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('pcov', '5.6', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f pcov');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('pcov', '7.2', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f pcov');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '5.6', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug-2.5.5');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '7.0', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug-2.9.0');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '7.2', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f xdebug');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('redis', '5.6', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f redis-2.2.8');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('redis', '7.2', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f redis');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('imagick', '5.6', 'darwin');
|
|
||||||
expect(darwin).toContain('brew install pkg-config imagemagick');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f imagick');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('imagick', '7.4', 'darwin');
|
|
||||||
expect(darwin).toContain('brew install pkg-config imagemagick');
|
|
||||||
expect(darwin).toContain('sudo pecl install -f imagick');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension(
|
|
||||||
'does_not_exist',
|
|
||||||
'7.2',
|
|
||||||
'darwin',
|
|
||||||
false
|
|
||||||
);
|
|
||||||
expect(darwin).toContain('add_extension does_not_exist');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
|
||||||
expect(darwin).toContain('Platform fedora is not supported');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
45
__tests__/fetch.test.ts
Normal file
45
__tests__/fetch.test.ts
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import * as fetch from '../src/fetch';
|
||||||
|
import nock from 'nock';
|
||||||
|
|
||||||
|
it('checking fetch', async () => {
|
||||||
|
const host_url = 'https://example.com';
|
||||||
|
const manifest_url = host_url + '/manifest';
|
||||||
|
const ping_url = host_url + '/ping';
|
||||||
|
|
||||||
|
nock(host_url)
|
||||||
|
.get('/manifest')
|
||||||
|
.reply(200, {latest: 'latest'})
|
||||||
|
.get('/manifest', '', {
|
||||||
|
reqheaders: {authorization: 'Bearer invalid_token'}
|
||||||
|
})
|
||||||
|
.reply(401, {error: '401: Unauthorized'})
|
||||||
|
.get('/ping')
|
||||||
|
.twice()
|
||||||
|
.reply(301, undefined, {
|
||||||
|
Location: host_url + '/pong'
|
||||||
|
})
|
||||||
|
.get('/pong')
|
||||||
|
.reply(200, 'pong')
|
||||||
|
.get('/error')
|
||||||
|
.replyWithError('Network failure');
|
||||||
|
|
||||||
|
let response: Record<string, string> = await fetch.fetch(manifest_url);
|
||||||
|
expect(response.error).toBe(undefined);
|
||||||
|
expect(response.data).toContain('latest');
|
||||||
|
|
||||||
|
response = await fetch.fetch(ping_url, '', 1);
|
||||||
|
expect(response.error).toBe(undefined);
|
||||||
|
expect(response.data).toContain('pong');
|
||||||
|
|
||||||
|
response = await fetch.fetch(ping_url, '', 0);
|
||||||
|
expect(response.error).toBe('301: Redirect error');
|
||||||
|
expect(response.data).toBe(undefined);
|
||||||
|
|
||||||
|
response = await fetch.fetch(manifest_url, 'invalid_token');
|
||||||
|
expect(response.error).not.toBe(undefined);
|
||||||
|
expect(response.data).toBe(undefined);
|
||||||
|
|
||||||
|
response = await fetch.fetch(host_url + '/error');
|
||||||
|
expect(response.error).toContain('Fetch error:');
|
||||||
|
expect(response.data).toBe(undefined);
|
||||||
|
});
|
||||||
@ -1,179 +1,87 @@
|
|||||||
import * as install from '../src/install';
|
import * as install from '../src/install';
|
||||||
|
import * as utils from '../src/utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mock install.ts
|
* Mock install.ts
|
||||||
*/
|
*/
|
||||||
jest.mock('../src/install', () => ({
|
jest.mock('../src/install', () => ({
|
||||||
build: jest.fn().mockImplementation(
|
getScript: jest
|
||||||
async (
|
.fn()
|
||||||
filename: string,
|
.mockImplementation(async (os: string): Promise<string> => {
|
||||||
version: string,
|
const filename = os + (await utils.scriptExtension(os));
|
||||||
os_version: string
|
const version: string = await utils.parseVersion(
|
||||||
): Promise<string> => {
|
await utils.readPHPVersion()
|
||||||
|
);
|
||||||
|
const ini_file: string = await utils.parseIniFile(
|
||||||
|
await utils.getInput('ini-file', false)
|
||||||
|
);
|
||||||
const extension_csv: string = process.env['extensions'] || '';
|
const extension_csv: string = process.env['extensions'] || '';
|
||||||
const ini_values_csv: string = process.env['ini-values'] || '';
|
const ini_values_csv: string = process.env['ini-values'] || '';
|
||||||
const coverage_driver: string = process.env['coverage'] || '';
|
const coverage_driver: string = process.env['coverage'] || '';
|
||||||
let tools_csv: string = process.env['tools'] || '';
|
const tools_csv: string = process.env['tools'] || '';
|
||||||
const pecl: string = process.env['pecl'] || '';
|
let script = await utils.joins(filename, version, ini_file);
|
||||||
if (pecl == 'true') {
|
script += extension_csv ? ' install extensions' : '';
|
||||||
tools_csv = 'pecl, ' + tools_csv;
|
script += tools_csv ? ' add_tool' : '';
|
||||||
}
|
script += coverage_driver ? ' set coverage driver' : '';
|
||||||
|
script += ini_values_csv ? ' edit php.ini' : '';
|
||||||
let script = 'initial script ' + filename + version + os_version;
|
|
||||||
if (tools_csv) {
|
|
||||||
script += 'add_tool';
|
|
||||||
}
|
|
||||||
if (extension_csv) {
|
|
||||||
script += 'install extensions';
|
|
||||||
}
|
|
||||||
if (ini_values_csv) {
|
|
||||||
script += 'edit php.ini';
|
|
||||||
}
|
|
||||||
if (coverage_driver) {
|
|
||||||
script += 'set coverage driver';
|
|
||||||
}
|
|
||||||
|
|
||||||
return script;
|
return script;
|
||||||
}
|
}),
|
||||||
),
|
run: jest.fn().mockImplementation(async (): Promise<string> => {
|
||||||
run: jest.fn().mockImplementation(
|
const os: string = process.env['RUNNER_OS'] || '';
|
||||||
async (): Promise<string> => {
|
const tool = await utils.scriptTool(os);
|
||||||
const os_version: string = process.env['RUNNER_OS'] || '';
|
return tool + (await install.getScript(os));
|
||||||
let version: string = process.env['php-version'] || '';
|
})
|
||||||
version = version.length > 1 ? version.slice(0, 3) : version + '.0';
|
|
||||||
let script = '';
|
|
||||||
switch (os_version) {
|
|
||||||
case 'darwin':
|
|
||||||
case 'linux':
|
|
||||||
script = await install.build(os_version + '.sh', version, os_version);
|
|
||||||
script += 'sh script.sh ' + version + ' ' + __dirname;
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
script = await install.build(os_version + '.sh', version, os_version);
|
|
||||||
script += 'pwsh script.ps1 ' + version + ' ' + __dirname;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
script += os_version + ' is not supported';
|
|
||||||
}
|
|
||||||
|
|
||||||
return script;
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to set the process.env
|
* Mock fetch.ts
|
||||||
*
|
|
||||||
* @param version
|
|
||||||
* @param os
|
|
||||||
* @param extension_csv
|
|
||||||
* @param ini_values_csv
|
|
||||||
* @param coverage_driver
|
|
||||||
*/
|
*/
|
||||||
function setEnv(
|
jest.mock('../src/fetch', () => ({
|
||||||
version: string | number,
|
fetch: jest.fn().mockImplementation(() => {
|
||||||
os: string,
|
return {
|
||||||
extension_csv: string,
|
data: '{ "latest": "8.3", "lowest": "8.1", "highest": "8.3", "nightly": "8.4", "5.x": "5.6" }'
|
||||||
ini_values_csv: string,
|
};
|
||||||
coverage_driver: string,
|
})
|
||||||
tools: string,
|
}));
|
||||||
pecl: string
|
|
||||||
): void {
|
|
||||||
process.env['php-version'] = version.toString();
|
|
||||||
process.env['RUNNER_OS'] = os;
|
|
||||||
process.env['extensions'] = extension_csv;
|
|
||||||
process.env['ini-values'] = ini_values_csv;
|
|
||||||
process.env['coverage'] = coverage_driver;
|
|
||||||
process.env['tools'] = tools;
|
|
||||||
process.env['pecl'] = pecl;
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('Install', () => {
|
describe('Install', () => {
|
||||||
it('Test install on windows', async () => {
|
it.each`
|
||||||
setEnv('7.0', 'win32', '', '', '', '', '');
|
version | os | extension_csv | ini_file | ini_values_csv | coverage_driver | tools | output
|
||||||
// @ts-ignore
|
${'7.3'} | ${'darwin'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.3 production'}
|
||||||
let script: string = await install.run();
|
${'7.3'} | ${'darwin'} | ${'a, b'} | ${'development'} | ${'a=b'} | ${'x'} | ${''} | ${'bash darwin.sh 7.3 development install extensions set coverage driver edit php.ini'}
|
||||||
expect(script).toContain('initial script');
|
${'7.4.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.4 none'}
|
||||||
expect(script).toContain('pwsh script.ps1 7.0 ' + __dirname);
|
${'8'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 production'}
|
||||||
|
${'8.0'} | ${'darwin'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 development'}
|
||||||
setEnv('7.3', 'win32', '', '', '', '', '');
|
${'8.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.1 none'}
|
||||||
// @ts-ignore
|
${'7.3'} | ${'linux'} | ${''} | ${'invalid'} | ${''} | ${''} | ${''} | ${'bash linux.sh 7.3 production'}
|
||||||
script = await install.run();
|
${'7.3'} | ${'linux'} | ${'a, b'} | ${'development'} | ${'a=b'} | ${'x'} | ${'phpunit'} | ${'bash linux.sh 7.3 development install extensions add_tool set coverage driver edit php.ini'}
|
||||||
expect(script).toContain('initial script');
|
${'latest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.3 none'}
|
||||||
expect(script).toContain('pwsh script.ps1 7.3 ' + __dirname);
|
${'lowest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.1 none'}
|
||||||
|
${'highest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.3 none'}
|
||||||
setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '', '');
|
${'nightly'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.4 none'}
|
||||||
// @ts-ignore
|
${'7.0'} | ${'win32'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.0 production'}
|
||||||
script = await install.run();
|
${'7.3'} | ${'win32'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.3 development'}
|
||||||
expect(script).toContain('initial script');
|
${'7.3'} | ${'win32'} | ${'a, b'} | ${'none'} | ${'a=b'} | ${'x'} | ${''} | ${'pwsh win32.ps1 7.3 none install extensions set coverage driver edit php.ini'}
|
||||||
expect(script).toContain('install extensions');
|
`(
|
||||||
expect(script).toContain('edit php.ini');
|
'Test install on $os for $version with extensions=$extension_csv, ini_values=$ini_values_csv, coverage_driver=$coverage_driver, tools=$tools',
|
||||||
expect(script).toContain('set coverage driver');
|
async ({
|
||||||
expect(script).toContain('pwsh script.ps1 7.3 ' + __dirname);
|
version,
|
||||||
});
|
os,
|
||||||
|
extension_csv,
|
||||||
it('Test install on linux', async () => {
|
ini_file,
|
||||||
setEnv('7.3', 'linux', '', '', '', '', '');
|
ini_values_csv,
|
||||||
// @ts-ignore
|
coverage_driver,
|
||||||
let script: string = await install.run();
|
tools,
|
||||||
expect(script).toContain('initial script');
|
output
|
||||||
expect(script).toContain('sh script.sh 7.3 ');
|
}) => {
|
||||||
|
process.env['php-version'] = version.toString();
|
||||||
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', 'true');
|
process.env['RUNNER_OS'] = os;
|
||||||
// @ts-ignore
|
process.env['extensions'] = extension_csv;
|
||||||
script = await install.run();
|
process.env['ini-file'] = ini_file;
|
||||||
expect(script).toContain('initial script');
|
process.env['ini-values'] = ini_values_csv;
|
||||||
expect(script).toContain('install extensions');
|
process.env['coverage'] = coverage_driver;
|
||||||
expect(script).toContain('edit php.ini');
|
process.env['tools'] = tools;
|
||||||
expect(script).toContain('set coverage driver');
|
expect(await install.run()).toBe(output);
|
||||||
expect(script).toContain('sh script.sh 7.3');
|
}
|
||||||
expect(script).toContain('add_tool');
|
);
|
||||||
|
|
||||||
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'phpunit', '');
|
|
||||||
// @ts-ignore
|
|
||||||
script = await install.run();
|
|
||||||
expect(script).toContain('initial script');
|
|
||||||
expect(script).toContain('install extensions');
|
|
||||||
expect(script).toContain('edit php.ini');
|
|
||||||
expect(script).toContain('set coverage driver');
|
|
||||||
expect(script).toContain('sh script.sh 7.3');
|
|
||||||
expect(script).toContain('add_tool');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Test install on darwin', async () => {
|
|
||||||
setEnv('7.3', 'darwin', '', '', '', '', '');
|
|
||||||
// @ts-ignore
|
|
||||||
let script: string = await install.run();
|
|
||||||
expect(script).toContain('initial script');
|
|
||||||
expect(script).toContain('sh script.sh 7.3 ' + __dirname);
|
|
||||||
|
|
||||||
setEnv('7.3', 'darwin', 'a, b', 'a=b', 'x', '', '');
|
|
||||||
// @ts-ignore
|
|
||||||
script = await install.run();
|
|
||||||
expect(script).toContain('initial script');
|
|
||||||
expect(script).toContain('install extensions');
|
|
||||||
expect(script).toContain('edit php.ini');
|
|
||||||
expect(script).toContain('set coverage driver');
|
|
||||||
expect(script).toContain('sh script.sh 7.3 ' + __dirname);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Test malformed version inputs', async () => {
|
|
||||||
setEnv('7.4.1', 'darwin', '', '', '', '', '');
|
|
||||||
// @ts-ignore
|
|
||||||
let script: string = await install.run();
|
|
||||||
expect(script).toContain('initial script');
|
|
||||||
expect(script).toContain('sh script.sh 7.4 ' + __dirname);
|
|
||||||
|
|
||||||
setEnv(8.0, 'darwin', '', '', '', '', '');
|
|
||||||
// @ts-ignore
|
|
||||||
script = await install.run();
|
|
||||||
expect(script).toContain('initial script');
|
|
||||||
expect(script).toContain('sh script.sh 8.0 ' + __dirname);
|
|
||||||
|
|
||||||
setEnv(8, 'darwin', '', '', '', '', '');
|
|
||||||
// @ts-ignore
|
|
||||||
script = await install.run();
|
|
||||||
expect(script).toContain('initial script');
|
|
||||||
expect(script).toContain('sh script.sh 8.0 ' + __dirname);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,34 +0,0 @@
|
|||||||
import * as io from '@actions/io';
|
|
||||||
import * as path from 'path';
|
|
||||||
import * as fs from 'fs';
|
|
||||||
import * as matchers from '../src/matchers';
|
|
||||||
|
|
||||||
async function cleanup(path: string): Promise<void> {
|
|
||||||
fs.unlink(path, error => {
|
|
||||||
if (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
jest.mock('@actions/io');
|
|
||||||
|
|
||||||
describe('Matchers', () => {
|
|
||||||
it('Add matchers', async () => {
|
|
||||||
process.env['RUNNER_TOOL_CACHE'] = __dirname;
|
|
||||||
await matchers.addMatchers();
|
|
||||||
const spy = jest.spyOn(io, 'cp');
|
|
||||||
expect(spy).toHaveBeenCalledTimes(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Test Regex', async () => {
|
|
||||||
const regex1 = /^\d+\)\s.*$/;
|
|
||||||
const regex2 = /^(.*Failed\sasserting\sthat.*)$/;
|
|
||||||
const regex3 = /^\s*$/;
|
|
||||||
const regex4 = /^(.*):(\d+)$/;
|
|
||||||
expect(regex1.test('1) Tests\\Test::it_tests')).toBe(true);
|
|
||||||
expect(regex2.test('Failed asserting that false is true')).toBe(true);
|
|
||||||
expect(regex3.test('\n')).toBe(true);
|
|
||||||
expect(regex4.test('/path/to/file.php:42')).toBe(true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
50
__tests__/packagist.test.ts
Normal file
50
__tests__/packagist.test.ts
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
import * as packagist from '../src/packagist';
|
||||||
|
import nock from 'nock';
|
||||||
|
|
||||||
|
describe('search function', () => {
|
||||||
|
const mockResponse = {
|
||||||
|
packages: {
|
||||||
|
'test-package': [
|
||||||
|
{
|
||||||
|
require: {
|
||||||
|
php: '8.0.0'
|
||||||
|
},
|
||||||
|
version: '1.0.0'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
version: '2.0.0'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
test('should return the version if matching php version is found', async () => {
|
||||||
|
nock('https://repo.packagist.org')
|
||||||
|
.get('/p2/test-package.json')
|
||||||
|
.reply(200, mockResponse);
|
||||||
|
const result = await packagist.search('test-package', '8.0');
|
||||||
|
expect(result).toBe('1.0.0');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return null if no matching php version is found', async () => {
|
||||||
|
nock('https://repo.packagist.org')
|
||||||
|
.get('/p2/test-package.json')
|
||||||
|
.reply(200, mockResponse);
|
||||||
|
const result = await packagist.search('test-package', '5.6');
|
||||||
|
expect(result).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return null if fetch fails', async () => {
|
||||||
|
nock('https://repo.packagist.org').get('/p2/test-package.json').reply(404);
|
||||||
|
const result = await packagist.search('test-package', '8.0');
|
||||||
|
expect(result).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should return null if the response is empty', async () => {
|
||||||
|
nock('https://repo.packagist.org')
|
||||||
|
.get('/p2/test-package.json')
|
||||||
|
.reply(200, {error: true, data: '[]'});
|
||||||
|
const result = await packagist.search('test-package', '8.0');
|
||||||
|
expect(result).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,37 +1,73 @@
|
|||||||
import * as fs from 'fs';
|
import fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as utils from '../src/utils';
|
import * as utils from '../src/utils';
|
||||||
|
import * as fetchModule from '../src/fetch';
|
||||||
jest.mock('@actions/core', () => ({
|
|
||||||
getInput: jest.fn().mockImplementation(key => {
|
|
||||||
return ['setup-php'].indexOf(key) !== -1 ? key : '';
|
|
||||||
})
|
|
||||||
}));
|
|
||||||
|
|
||||||
async function cleanup(path: string): Promise<void> {
|
|
||||||
fs.unlink(path, error => {
|
|
||||||
if (error) {
|
|
||||||
console.log(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('Utils tests', () => {
|
describe('Utils tests', () => {
|
||||||
|
it('checking readEnv', async () => {
|
||||||
|
process.env['test'] = 'setup-php';
|
||||||
|
process.env['test-hyphen'] = 'setup-php';
|
||||||
|
expect(await utils.readEnv('test')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('TEST')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('test_hyphen')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('TEST_HYPHEN')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('undefined')).toBe('');
|
||||||
|
});
|
||||||
|
|
||||||
it('checking getInput', async () => {
|
it('checking getInput', async () => {
|
||||||
process.env['test'] = 'setup-php';
|
process.env['test'] = 'setup-php';
|
||||||
process.env['undefined'] = '';
|
process.env['INPUT_SETUP-PHP'] = 'setup-php';
|
||||||
expect(await utils.getInput('test', false)).toBe('setup-php');
|
expect(await utils.getInput('test', false)).toBe('setup-php');
|
||||||
expect(await utils.getInput('undefined', false)).toBe('');
|
|
||||||
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
||||||
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
||||||
|
await expect(async () => {
|
||||||
|
await utils.getInput('DoesNotExist', true);
|
||||||
|
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
||||||
|
delete process.env['INPUT_SETUP-PHP'];
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getManifestURL', async () => {
|
||||||
|
for (const url of await utils.getManifestURLS()) {
|
||||||
|
expect(url).toContain('php-versions.json');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking parseVersion', async () => {
|
||||||
|
const fetchSpy = jest
|
||||||
|
.spyOn(fetchModule, 'fetch')
|
||||||
|
.mockResolvedValue({data: '{ "latest": "8.1", "5.x": "5.6" }'});
|
||||||
|
expect(await utils.parseVersion('latest')).toBe('8.1');
|
||||||
|
expect(await utils.parseVersion('7')).toBe('7.0');
|
||||||
|
expect(await utils.parseVersion('7.4')).toBe('7.4');
|
||||||
|
expect(await utils.parseVersion('5.x')).toBe('5.6');
|
||||||
|
expect(await utils.parseVersion('4.x')).toBe(undefined);
|
||||||
|
|
||||||
|
fetchSpy.mockReset();
|
||||||
|
fetchSpy.mockResolvedValueOnce({}).mockResolvedValueOnce({});
|
||||||
|
await expect(utils.parseVersion('latest')).rejects.toThrow(
|
||||||
|
'Could not fetch the PHP version manifest.'
|
||||||
|
);
|
||||||
|
expect(fetchSpy).toHaveBeenCalledTimes(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking parseIniFile', async () => {
|
||||||
|
expect(await utils.parseIniFile('production')).toBe('production');
|
||||||
|
expect(await utils.parseIniFile('development')).toBe('development');
|
||||||
|
expect(await utils.parseIniFile('none')).toBe('none');
|
||||||
|
expect(await utils.parseIniFile('php.ini-production')).toBe('production');
|
||||||
|
expect(await utils.parseIniFile('php.ini-development')).toBe('development');
|
||||||
|
expect(await utils.parseIniFile('invalid')).toBe('production');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking asyncForEach', async () => {
|
it('checking asyncForEach', async () => {
|
||||||
const array: Array<string> = ['a', 'b', 'c'];
|
const array: Array<string> = ['a', 'b', 'c'];
|
||||||
let concat = '';
|
let concat = '';
|
||||||
await utils.asyncForEach(array, async function(str: string): Promise<void> {
|
await utils.asyncForEach(
|
||||||
concat += str;
|
array,
|
||||||
});
|
async function (str: string): Promise<void> {
|
||||||
|
concat += str;
|
||||||
|
}
|
||||||
|
);
|
||||||
expect(concat).toBe('abc');
|
expect(concat).toBe('abc');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -42,45 +78,10 @@ describe('Utils tests', () => {
|
|||||||
expect(await utils.color('warning')).toBe('33');
|
expect(await utils.color('warning')).toBe('33');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking readScripts', async () => {
|
|
||||||
const darwin: string = fs.readFileSync(
|
|
||||||
path.join(__dirname, '../src/scripts/darwin.sh'),
|
|
||||||
'utf8'
|
|
||||||
);
|
|
||||||
const linux: string = fs.readFileSync(
|
|
||||||
path.join(__dirname, '../src/scripts/linux.sh'),
|
|
||||||
'utf8'
|
|
||||||
);
|
|
||||||
const win32: string = fs.readFileSync(
|
|
||||||
path.join(__dirname, '../src/scripts/win32.ps1'),
|
|
||||||
'utf8'
|
|
||||||
);
|
|
||||||
expect(await utils.readScript('darwin.sh', '7.4', 'darwin')).toBe(darwin);
|
|
||||||
expect(await utils.readScript('darwin.sh', '7.3', 'darwin')).toBe(darwin);
|
|
||||||
expect(await utils.readScript('linux.sh', '7.4', 'linux')).toBe(linux);
|
|
||||||
expect(await utils.readScript('linux.sh', '7.3', 'linux')).toBe(linux);
|
|
||||||
expect(await utils.readScript('win32.ps1', '7.4', 'win32')).toBe(win32);
|
|
||||||
expect(await utils.readScript('win32.ps1', '7.3', 'win32')).toBe(win32);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking writeScripts', async () => {
|
|
||||||
const testString = 'sudo apt-get install php';
|
|
||||||
const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || '';
|
|
||||||
const script_path: string = path.join(runner_dir, 'test.sh');
|
|
||||||
await utils.writeScript('test.sh', testString);
|
|
||||||
await fs.readFile(script_path, function(error: Error | null, data: Buffer) {
|
|
||||||
expect(testString).toBe(data.toString());
|
|
||||||
});
|
|
||||||
await cleanup(script_path);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking extensionArray', async () => {
|
it('checking extensionArray', async () => {
|
||||||
expect(await utils.extensionArray('a, b, php_c, php-d')).toEqual([
|
expect(
|
||||||
'a',
|
await utils.extensionArray('a, :b, php_c, none, php-d, Zend e, :Zend f')
|
||||||
'b',
|
).toEqual(['none', 'a', ':b', 'c', 'd', 'e', ':f']);
|
||||||
'c',
|
|
||||||
'd'
|
|
||||||
]);
|
|
||||||
|
|
||||||
expect(await utils.extensionArray('')).toEqual([]);
|
expect(await utils.extensionArray('')).toEqual([]);
|
||||||
expect(await utils.extensionArray(' ')).toEqual([]);
|
expect(await utils.extensionArray(' ')).toEqual([]);
|
||||||
@ -92,6 +93,23 @@ describe('Utils tests', () => {
|
|||||||
'b=2',
|
'b=2',
|
||||||
'c=3'
|
'c=3'
|
||||||
]);
|
]);
|
||||||
|
expect(await utils.CSVArray('\'a=1,2\', "b=3, 4", c=5, d=~e~')).toEqual([
|
||||||
|
'a=1,2',
|
||||||
|
'b=3, 4',
|
||||||
|
'c=5',
|
||||||
|
"d='~e~'"
|
||||||
|
]);
|
||||||
|
expect(await utils.CSVArray('a=\'1,2\', b="3, 4", c=5')).toEqual([
|
||||||
|
'a=1,2',
|
||||||
|
'b=3, 4',
|
||||||
|
'c=5'
|
||||||
|
]);
|
||||||
|
expect(
|
||||||
|
await utils.CSVArray('a=E_ALL, b=E_ALL & ~ E_ALL, c="E_ALL", d=\'E_ALL\'')
|
||||||
|
).toEqual(['a=E_ALL', 'b=E_ALL & ~ E_ALL', 'c=E_ALL', 'd=E_ALL']);
|
||||||
|
expect(
|
||||||
|
await utils.CSVArray('a="b=c;d=e", b=\'c=d,e\', c="g=h,i=j", d=g=h, a===')
|
||||||
|
).toEqual(["a='b=c;d=e'", "b='c=d,e'", "c='g=h,i=j'", "d='g=h'", "a='=='"]);
|
||||||
expect(await utils.CSVArray('')).toEqual([]);
|
expect(await utils.CSVArray('')).toEqual([]);
|
||||||
expect(await utils.CSVArray(' ')).toEqual([]);
|
expect(await utils.CSVArray(' ')).toEqual([]);
|
||||||
});
|
});
|
||||||
@ -126,8 +144,8 @@ describe('Utils tests', () => {
|
|||||||
expect(step_log).toEqual('step_log "Test message"');
|
expect(step_log).toEqual('step_log "Test message"');
|
||||||
step_log = await utils.stepLog(message, 'darwin');
|
step_log = await utils.stepLog(message, 'darwin');
|
||||||
expect(step_log).toEqual('step_log "Test message"');
|
expect(step_log).toEqual('step_log "Test message"');
|
||||||
step_log = await utils.stepLog(message, 'fedora');
|
step_log = await utils.stepLog(message, 'openbsd');
|
||||||
expect(step_log).toContain('Platform fedora is not supported');
|
expect(step_log).toContain('Platform openbsd is not supported');
|
||||||
|
|
||||||
let add_log: string = await utils.addLog(
|
let add_log: string = await utils.addLog(
|
||||||
'tick',
|
'tick',
|
||||||
@ -140,8 +158,8 @@ describe('Utils tests', () => {
|
|||||||
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
||||||
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'darwin');
|
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'darwin');
|
||||||
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
expect(add_log).toEqual('add_log "tick" "xdebug" "enabled"');
|
||||||
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'fedora');
|
add_log = await utils.addLog('tick', 'xdebug', 'enabled', 'openbsd');
|
||||||
expect(add_log).toContain('Platform fedora is not supported');
|
expect(add_log).toContain('Platform openbsd is not supported');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getExtensionPrefix', async () => {
|
it('checking getExtensionPrefix', async () => {
|
||||||
@ -150,6 +168,7 @@ describe('Utils tests', () => {
|
|||||||
);
|
);
|
||||||
expect(await utils.getExtensionPrefix('xsl')).toEqual('extension');
|
expect(await utils.getExtensionPrefix('xsl')).toEqual('extension');
|
||||||
expect(await utils.getExtensionPrefix('xdebug')).toEqual('zend_extension');
|
expect(await utils.getExtensionPrefix('xdebug')).toEqual('zend_extension');
|
||||||
|
expect(await utils.getExtensionPrefix('xdebug3')).toEqual('zend_extension');
|
||||||
expect(await utils.getExtensionPrefix('opcache')).toEqual('zend_extension');
|
expect(await utils.getExtensionPrefix('opcache')).toEqual('zend_extension');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -157,8 +176,144 @@ describe('Utils tests', () => {
|
|||||||
expect(await utils.suppressOutput('win32')).toEqual(' >$null 2>&1');
|
expect(await utils.suppressOutput('win32')).toEqual(' >$null 2>&1');
|
||||||
expect(await utils.suppressOutput('linux')).toEqual(' >/dev/null 2>&1');
|
expect(await utils.suppressOutput('linux')).toEqual(' >/dev/null 2>&1');
|
||||||
expect(await utils.suppressOutput('darwin')).toEqual(' >/dev/null 2>&1');
|
expect(await utils.suppressOutput('darwin')).toEqual(' >/dev/null 2>&1');
|
||||||
expect(await utils.suppressOutput('fedora')).toContain(
|
expect(await utils.suppressOutput('openbsd')).toContain(
|
||||||
'Platform fedora is not supported'
|
'Platform openbsd is not supported'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('checking getUnsupportedLog', async () => {
|
||||||
|
expect(await utils.getUnsupportedLog('ext', '5.6', 'linux')).toContain(
|
||||||
|
'add_log "$cross" "ext" "ext is not supported on PHP 5.6"'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getCommand', async () => {
|
||||||
|
expect(await utils.getCommand('linux', 'tool')).toBe('add_tool ');
|
||||||
|
expect(await utils.getCommand('darwin', 'tool')).toBe('add_tool ');
|
||||||
|
expect(await utils.getCommand('win32', 'tool')).toBe('Add-Tool ');
|
||||||
|
expect(await utils.getCommand('win32', 'tool_name')).toBe('Add-ToolName ');
|
||||||
|
expect(await utils.getCommand('openbsd', 'tool')).toContain(
|
||||||
|
'Platform openbsd is not supported'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking joins', async () => {
|
||||||
|
expect(await utils.joins('a', 'b', 'c')).toBe('a b c');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking scriptExtension', async () => {
|
||||||
|
expect(await utils.scriptExtension('linux')).toBe('.sh');
|
||||||
|
expect(await utils.scriptExtension('darwin')).toBe('.sh');
|
||||||
|
expect(await utils.scriptExtension('win32')).toBe('.ps1');
|
||||||
|
expect(await utils.scriptExtension('openbsd')).toContain(
|
||||||
|
'Platform openbsd is not supported'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking scriptTool', async () => {
|
||||||
|
expect(await utils.scriptTool('linux')).toBe('bash ');
|
||||||
|
expect(await utils.scriptTool('darwin')).toBe('bash ');
|
||||||
|
expect(await utils.scriptTool('win32')).toBe('pwsh ');
|
||||||
|
expect(await utils.scriptTool('openbsd')).toContain(
|
||||||
|
'Platform openbsd is not supported'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking customPackage', async () => {
|
||||||
|
const script_path: string = path.join('ext', 'pkg.sh');
|
||||||
|
expect(await utils.customPackage('pkg', 'ext', '1.2.3', 'linux')).toContain(
|
||||||
|
script_path + '\nadd_pkg 1.2.3'
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
await utils.customPackage('pdo_pkg', 'ext', '1.2.3', 'linux')
|
||||||
|
).toContain(script_path + '\nadd_pkg 1.2.3');
|
||||||
|
expect(
|
||||||
|
await utils.customPackage('pkg8', 'ext', '1.2.3', 'linux')
|
||||||
|
).toContain(script_path + '\nadd_pkg 1.2.3');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking parseExtensionSource', async () => {
|
||||||
|
expect(
|
||||||
|
await utils.parseExtensionSource(
|
||||||
|
'ext-org-name/repo-name@release',
|
||||||
|
'extension'
|
||||||
|
)
|
||||||
|
).toContain(
|
||||||
|
'\nadd_extension_from_source ext https://github.com org-name repo-name release extension'
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
await utils.parseExtensionSource(
|
||||||
|
'ext-https://sub.domain.tld/org/repo@release',
|
||||||
|
'extension'
|
||||||
|
)
|
||||||
|
).toContain(
|
||||||
|
'\nadd_extension_from_source ext https://sub.domain.tld org repo release extension'
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
await utils.parseExtensionSource(
|
||||||
|
'ext-https://sub.domain.XN--tld/org/repo@release',
|
||||||
|
'extension'
|
||||||
|
)
|
||||||
|
).toContain(
|
||||||
|
'\nadd_extension_from_source ext https://sub.domain.XN--tld org repo release extension'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking readPHPVersion', async () => {
|
||||||
|
expect(await utils.readPHPVersion()).toBe('latest');
|
||||||
|
|
||||||
|
process.env['php-version-file'] = '.phpenv-version';
|
||||||
|
await expect(utils.readPHPVersion()).rejects.toThrow(
|
||||||
|
"Could not find '.phpenv-version' file."
|
||||||
|
);
|
||||||
|
|
||||||
|
const existsSync = jest.spyOn(fs, 'existsSync').mockImplementation();
|
||||||
|
const readFileSync = jest.spyOn(fs, 'readFileSync').mockImplementation();
|
||||||
|
|
||||||
|
existsSync.mockReturnValue(true);
|
||||||
|
readFileSync.mockReturnValue('8.1');
|
||||||
|
|
||||||
|
expect(await utils.readPHPVersion()).toBe('8.1');
|
||||||
|
|
||||||
|
process.env['php-version'] = '8.2';
|
||||||
|
expect(await utils.readPHPVersion()).toBe('8.2');
|
||||||
|
|
||||||
|
delete process.env['php-version-file'];
|
||||||
|
delete process.env['php-version'];
|
||||||
|
|
||||||
|
existsSync.mockReturnValue(true);
|
||||||
|
readFileSync.mockReturnValue('ruby 1.2.3\nphp 8.4.2\nnode 20.1.2');
|
||||||
|
expect(await utils.readPHPVersion()).toBe('8.4.2');
|
||||||
|
|
||||||
|
existsSync.mockReturnValue(true);
|
||||||
|
readFileSync.mockReturnValue('setup-php');
|
||||||
|
expect(await utils.readPHPVersion()).toBe('setup-php');
|
||||||
|
|
||||||
|
existsSync.mockReturnValueOnce(false).mockReturnValueOnce(true);
|
||||||
|
readFileSync.mockReturnValue(
|
||||||
|
'{ "platform-overrides": { "php": "7.3.25" } }'
|
||||||
|
);
|
||||||
|
expect(await utils.readPHPVersion()).toBe('7.3.25');
|
||||||
|
|
||||||
|
existsSync
|
||||||
|
.mockReturnValueOnce(false)
|
||||||
|
.mockReturnValueOnce(false)
|
||||||
|
.mockReturnValueOnce(true);
|
||||||
|
readFileSync.mockReturnValue(
|
||||||
|
'{ "config": { "platform": { "php": "7.4.33" } } }'
|
||||||
|
);
|
||||||
|
expect(await utils.readPHPVersion()).toBe('7.4.33');
|
||||||
|
|
||||||
|
existsSync.mockClear();
|
||||||
|
readFileSync.mockClear();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking setVariable', async () => {
|
||||||
|
let script: string = await utils.setVariable('var', 'command', 'linux');
|
||||||
|
expect(script).toEqual('\nvar="$(command)"\n');
|
||||||
|
script = await utils.setVariable('var', 'command', 'darwin');
|
||||||
|
expect(script).toEqual('\nvar="$(command)"\n');
|
||||||
|
script = await utils.setVariable('var', 'command', 'win32');
|
||||||
|
expect(script).toEqual('\n$var = command\n');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
34
action.yml
34
action.yml
@ -1,16 +1,23 @@
|
|||||||
name: 'Setup PHP Action'
|
name: 'Setup PHP Action'
|
||||||
author: shivammathur
|
author: shivammathur
|
||||||
description: 'Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer'
|
description: 'GitHub Action for PHP'
|
||||||
branding:
|
branding:
|
||||||
color: 'purple'
|
color: 'purple'
|
||||||
|
icon: 'play-circle'
|
||||||
inputs:
|
inputs:
|
||||||
php-version:
|
php-version:
|
||||||
description: 'Setup PHP version.'
|
description: 'Setup PHP version.'
|
||||||
default: '7.4'
|
required: false
|
||||||
required: true
|
php-version-file:
|
||||||
|
description: 'Setup PHP version from a file.'
|
||||||
|
required: false
|
||||||
extensions:
|
extensions:
|
||||||
description: 'Setup PHP extensions.'
|
description: 'Setup PHP extensions.'
|
||||||
required: false
|
required: false
|
||||||
|
ini-file:
|
||||||
|
description: 'Set base ini file.'
|
||||||
|
required: false
|
||||||
|
default: 'production'
|
||||||
ini-values:
|
ini-values:
|
||||||
description: 'Add values to php.ini.'
|
description: 'Add values to php.ini.'
|
||||||
required: false
|
required: false
|
||||||
@ -20,19 +27,12 @@ inputs:
|
|||||||
tools:
|
tools:
|
||||||
description: 'Setup popular tools globally.'
|
description: 'Setup popular tools globally.'
|
||||||
required: false
|
required: false
|
||||||
# Deprecated options, do not use. Will not be supported in v2 which will be released around February 1, 2020.
|
github-token:
|
||||||
extension-csv:
|
description: 'GitHub token to use for authentication.'
|
||||||
description: 'Deprecated! Use extensions instead.'
|
default: ${{ github.token }}
|
||||||
deprecationMessage: 'The extension-csv property will not be supported in v2. Use extensions instead.'
|
outputs:
|
||||||
required: false
|
php-version:
|
||||||
ini-values-csv:
|
description: 'PHP version in semver format'
|
||||||
description: 'Deprecated! Use ini-values instead.'
|
|
||||||
deprecationMessage: 'The ini-values-csv property will not be supported in v2. Use ini-values instead.'
|
|
||||||
required: false
|
|
||||||
pecl:
|
|
||||||
description: 'Deprecated! Use tools instead to setup PECL.'
|
|
||||||
deprecationMessage: 'The pecl property will not be supported in v2. Specify pecl in tools instead.'
|
|
||||||
required: false
|
|
||||||
runs:
|
runs:
|
||||||
using: 'node12'
|
using: 'node24'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
|
|||||||
2907
dist/index.js
vendored
2907
dist/index.js
vendored
File diff suppressed because one or more lines are too long
49
eslint.config.mjs
Normal file
49
eslint.config.mjs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
||||||
|
import importPlugin from 'eslint-plugin-import';
|
||||||
|
import jest from 'eslint-plugin-jest';
|
||||||
|
import prettierRecommended from 'eslint-plugin-prettier/recommended';
|
||||||
|
import eslintConfigPrettier from 'eslint-config-prettier';
|
||||||
|
import globals from 'globals';
|
||||||
|
import tsParser from '@typescript-eslint/parser';
|
||||||
|
import js from '@eslint/js';
|
||||||
|
|
||||||
|
export default [
|
||||||
|
js.configs.recommended,
|
||||||
|
...typescriptEslint.configs['flat/recommended'],
|
||||||
|
importPlugin.flatConfigs.errors,
|
||||||
|
importPlugin.flatConfigs.warnings,
|
||||||
|
importPlugin.flatConfigs.typescript,
|
||||||
|
prettierRecommended,
|
||||||
|
eslintConfigPrettier,
|
||||||
|
{
|
||||||
|
plugins: {
|
||||||
|
jest
|
||||||
|
},
|
||||||
|
|
||||||
|
languageOptions: {
|
||||||
|
globals: {
|
||||||
|
...globals.node,
|
||||||
|
...globals.jest
|
||||||
|
},
|
||||||
|
|
||||||
|
parser: tsParser,
|
||||||
|
ecmaVersion: 2021,
|
||||||
|
sourceType: 'module'
|
||||||
|
},
|
||||||
|
|
||||||
|
settings: {
|
||||||
|
'import/resolver': {
|
||||||
|
typescript: {
|
||||||
|
alwaysTryTypes: true,
|
||||||
|
project: './tsconfig.json'
|
||||||
|
},
|
||||||
|
node: {
|
||||||
|
extensions: ['.js', '.ts']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'import/parsers': {
|
||||||
|
'@typescript-eslint/parser': ['.ts']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
@ -8,25 +8,31 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.1', '7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
- uses: actions/cache@v1
|
|
||||||
|
- uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install -n --prefer-dist
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: PHP test
|
- name: PHP test
|
||||||
run: composer test
|
run: composer test
|
||||||
|
|||||||
36
examples/blackfire-player.yml
Normal file
36
examples/blackfire-player.yml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# GitHub Action for Blackfire Player
|
||||||
|
name: Play a Blackfire Scenario
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
blackfire-player:
|
||||||
|
name: Blackfire (PHP ${{ matrix.php-versions }})
|
||||||
|
# Add your Blackfire credentials securely using GitHub Secrets
|
||||||
|
env:
|
||||||
|
BLACKFIRE_SERVER_ID: ${{ secrets.BLACKFIRE_SERVER_ID }}
|
||||||
|
BLACKFIRE_SERVER_TOKEN: ${{ secrets.BLACKFIRE_SERVER_TOKEN }}
|
||||||
|
BLACKFIRE_CLIENT_ID: ${{ secrets.BLACKFIRE_CLIENT_ID }}
|
||||||
|
BLACKFIRE_CLIENT_TOKEN: ${{ secrets.BLACKFIRE_CLIENT_TOKEN }}
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
|
# blackfire-player supports PHP >= 5.5
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
extensions: blackfire
|
||||||
|
# Setup Blackfire CLI and player
|
||||||
|
tools: blackfire, blackfire-player
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
# Refer to https://blackfire.io/docs/player/index#usage
|
||||||
|
- name: Play the scenario
|
||||||
|
run: blackfire-player run scenario.bkf
|
||||||
37
examples/blackfire.yml
Normal file
37
examples/blackfire.yml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# GitHub Action for Blackfire
|
||||||
|
name: Profiling with blackfire
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
blackfire:
|
||||||
|
name: Blackfire (PHP ${{ matrix.php-versions }})
|
||||||
|
# Add your Blackfire credentials securely using GitHub Secrets
|
||||||
|
env:
|
||||||
|
BLACKFIRE_SERVER_ID: ${{ secrets.BLACKFIRE_SERVER_ID }}
|
||||||
|
BLACKFIRE_SERVER_TOKEN: ${{ secrets.BLACKFIRE_SERVER_TOKEN }}
|
||||||
|
BLACKFIRE_CLIENT_ID: ${{ secrets.BLACKFIRE_CLIENT_ID }}
|
||||||
|
BLACKFIRE_CLIENT_TOKEN: ${{ secrets.BLACKFIRE_CLIENT_TOKEN }}
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
|
# Blackfire supports PHP >= 5.3 on Ubuntu and macOS, and PHP >= 5.4 on Windows
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
# Setup Blackfire extension and CLI
|
||||||
|
extensions: blackfire
|
||||||
|
tools: blackfire
|
||||||
|
# Disable Xdebug and PCOV coverage drivers
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
# Refer to https://blackfire.io/docs/cookbooks/profiling-cli
|
||||||
|
- name: Profile
|
||||||
|
run: blackfire run php my-script.php
|
||||||
@ -6,11 +6,13 @@ jobs:
|
|||||||
tests:
|
tests:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:latest
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: password
|
MYSQL_ROOT_PASSWORD: password
|
||||||
@ -18,6 +20,7 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 3306/tcp
|
- 3306/tcp
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@ -25,30 +28,41 @@ jobs:
|
|||||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
||||||
# Install memcached if using ext-memcached
|
# Install memcached if using ext-memcached
|
||||||
extensions: mbstring, intl, redis, pdo_mysql
|
extensions: mbstring, intl, redis, pdo_mysql
|
||||||
coverage: pcov
|
coverage: pcov
|
||||||
|
|
||||||
|
# Local MySQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start mysql service
|
||||||
|
# run: sudo systemctl start mysql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer run-script post-install-cmd --no-interaction
|
composer run-script post-install-cmd
|
||||||
|
|
||||||
# Add a step to run migrations if required
|
# Add a step to run migrations if required
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
@ -61,25 +75,31 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '7.3'
|
php-version: '8.1'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: PHP CodeSniffer
|
- name: PHP CodeSniffer
|
||||||
run: composer cs-check
|
run: composer cs-check
|
||||||
|
|
||||||
@ -88,25 +108,31 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '7.3'
|
php-version: '8.1'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Static Analysis using PHPStan
|
- name: Static Analysis using PHPStan
|
||||||
run: phpstan analyse --no-progress src/
|
run: phpstan analyse --no-progress src/
|
||||||
|
|||||||
@ -6,11 +6,13 @@ jobs:
|
|||||||
tests:
|
tests:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:10.8
|
image: postgres:latest
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@ -18,6 +20,7 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 5432/tcp
|
- 5432/tcp
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@ -25,30 +28,41 @@ jobs:
|
|||||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
||||||
# Install memcached if using ext-memcached
|
# Install memcached if using ext-memcached
|
||||||
extensions: mbstring, intl, redis, pdo_pgsql
|
extensions: mbstring, intl, redis, pdo_pgsql
|
||||||
coverage: pcov
|
coverage: pcov
|
||||||
|
|
||||||
|
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start postgresql service
|
||||||
|
# run: sudo systemctl start postgresql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer run-script post-install-cmd --no-interaction
|
composer run-script post-install-cmd
|
||||||
|
|
||||||
# Add a step to run migrations if required
|
# Add a step to run migrations if required
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
@ -61,25 +75,31 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '7.3'
|
php-version: '8.1'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: PHP CodeSniffer
|
- name: PHP CodeSniffer
|
||||||
run: composer cs-check
|
run: composer cs-check
|
||||||
|
|
||||||
@ -88,25 +108,31 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '7.3'
|
php-version: '8.1'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Static Analysis using PHPStan
|
- name: Static Analysis using PHPStan
|
||||||
run: phpstan analyse --no-progress src/
|
run: phpstan analyse --no-progress src/
|
||||||
|
|||||||
@ -7,32 +7,38 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, intl, pdo_sqlite, pdo_mysql
|
extensions: mbstring, intl, pdo_sqlite, pdo_mysql
|
||||||
coverage: pcov #optional
|
coverage: pcov
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer run-script post-install-cmd --no-interaction
|
composer run-script post-install-cmd
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
|
|
||||||
@ -41,25 +47,30 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '7.3'
|
php-version: '8.1'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: PHP CodeSniffer
|
- name: PHP CodeSniffer
|
||||||
run: composer cs-check
|
run: composer cs-check
|
||||||
|
|
||||||
@ -68,25 +79,31 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v1
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: '7.3'
|
php-version: '8.1'
|
||||||
extensions: mbstring, intl
|
extensions: mbstring, intl
|
||||||
tools: phpstan
|
tools: phpstan
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Static Analysis using PHPStan
|
- name: Static Analysis using PHPStan
|
||||||
run: phpstan analyse --no-progress src/
|
run: phpstan analyse --no-progress src/
|
||||||
|
|||||||
@ -6,29 +6,35 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, intl, curl, dom
|
extensions: mbstring, intl, curl, dom
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# GitHub Action for Zend Framework
|
# GitHub Action for Laminas framework MVC projects
|
||||||
name: Testing Zend Framework
|
name: Testing Zend Framework
|
||||||
on: [push, pull_request]
|
on: [push, pull_request]
|
||||||
jobs:
|
jobs:
|
||||||
@ -6,31 +6,34 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, bcmath, curl, intl
|
coverage: xdebug
|
||||||
coverage: xdebug #optional
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
|
||||||
composer require --dev phpunit/phpunit squizlabs/php_codesniffer zendframework/zend-test
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
@ -12,10 +12,12 @@ jobs:
|
|||||||
BROADCAST_DRIVER: log
|
BROADCAST_DRIVER: log
|
||||||
CACHE_DRIVER: redis
|
CACHE_DRIVER: redis
|
||||||
QUEUE_CONNECTION: redis
|
QUEUE_CONNECTION: redis
|
||||||
SESSION_DRIVER: redis
|
SESSION_DRIVER: redis
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:latest
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: password
|
MYSQL_ROOT_PASSWORD: password
|
||||||
@ -23,6 +25,7 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 3306/tcp
|
- 3306/tcp
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@ -31,42 +34,56 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local MySQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start mysql service
|
||||||
|
# run: sudo systemctl start mysql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
php artisan key:generate
|
php artisan key:generate
|
||||||
|
|
||||||
- name: Clear Config
|
- name: Clear Config
|
||||||
run: php artisan config:clear
|
run: php artisan config:clear
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: php artisan migrate -v
|
run: php artisan migrate -v
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|||||||
@ -15,9 +15,11 @@ jobs:
|
|||||||
DB_PASSWORD: postgres
|
DB_PASSWORD: postgres
|
||||||
DB_USERNAME: postgres
|
DB_USERNAME: postgres
|
||||||
DB_DATABASE: postgres
|
DB_DATABASE: postgres
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:10.8
|
image: postgres:latest
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@ -25,6 +27,7 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 5432/tcp
|
- 5432/tcp
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@ -33,42 +36,56 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, pgsql
|
extensions: mbstring, dom, fileinfo, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start postgresql service
|
||||||
|
# run: sudo systemctl start postgresql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
php artisan key:generate
|
php artisan key:generate
|
||||||
|
|
||||||
- name: Clear Config
|
- name: Clear Config
|
||||||
run: php artisan config:clear
|
run: php artisan config:clear
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: php artisan migrate -v
|
run: php artisan migrate -v
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|||||||
@ -9,34 +9,42 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo
|
extensions: mbstring, dom, fileinfo
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
php artisan key:generate
|
php artisan key:generate
|
||||||
|
|
||||||
- name: Clear Config
|
- name: Clear Config
|
||||||
run: php artisan config:clear
|
run: php artisan config:clear
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
|
|||||||
@ -13,9 +13,11 @@ jobs:
|
|||||||
CACHE_DRIVER: redis
|
CACHE_DRIVER: redis
|
||||||
QUEUE_CONNECTION: redis
|
QUEUE_CONNECTION: redis
|
||||||
SESSION_DRIVER: redis
|
SESSION_DRIVER: redis
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:latest
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: password
|
MYSQL_ROOT_PASSWORD: password
|
||||||
@ -23,6 +25,7 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 3306/tcp
|
- 3306/tcp
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@ -31,42 +34,56 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local MySQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start mysql service
|
||||||
|
# run: sudo systemctl start mysql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer require predis/predis illuminate/redis
|
composer require predis/predis illuminate/redis
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
|
||||||
- name: Register Redis as service provider
|
- name: Register Redis as service provider
|
||||||
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: php artisan migrate -v
|
run: php artisan migrate -v
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|||||||
@ -15,9 +15,11 @@ jobs:
|
|||||||
DB_PASSWORD: postgres
|
DB_PASSWORD: postgres
|
||||||
DB_USERNAME: postgres
|
DB_USERNAME: postgres
|
||||||
DB_DATABASE: postgres
|
DB_DATABASE: postgres
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:10.8
|
image: postgres:latest
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@ -25,6 +27,7 @@ jobs:
|
|||||||
ports:
|
ports:
|
||||||
- 5432/tcp
|
- 5432/tcp
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis
|
image: redis
|
||||||
ports:
|
ports:
|
||||||
@ -33,40 +36,54 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, pgsql
|
extensions: mbstring, dom, fileinfo, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start postgresql service
|
||||||
|
# run: sudo systemctl start postgresql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer require predis/predis illuminate/redis
|
composer require predis/predis illuminate/redis
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
|
||||||
- name: Register Redis as service provider
|
- name: Register Redis as service provider
|
||||||
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
run: sed -i '$i\$app->register(Illuminate\\Redis\\RedisServiceProvider::class);' bootstrap/app.php
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: php artisan migrate -v
|
run: php artisan migrate -v
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
env:
|
env:
|
||||||
|
|||||||
@ -9,30 +9,37 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
|
|||||||
@ -16,9 +16,11 @@ jobs:
|
|||||||
DB_PASSWORD: password
|
DB_PASSWORD: password
|
||||||
CODECEPTION_URL: 127.0.0.1
|
CODECEPTION_URL: 127.0.0.1
|
||||||
CODECEPTION_PORT: 8888
|
CODECEPTION_PORT: 8888
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:latest
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: password
|
MYSQL_ROOT_PASSWORD: password
|
||||||
@ -30,32 +32,45 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
# For phalcon 3.x, use
|
# For phalcon 3.x, use
|
||||||
# php-versions: ['7.0', '7.1', '7.2', '7.3']
|
# php-versions: ['7.0', '7.1', '7.2', '7.3']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, zip, phalcon4, mysql #use phalcon3 for the phalcon 3.x.
|
# Use phalcon3 for the phalcon 3.x.
|
||||||
coverage: xdebug #optional
|
extensions: mbstring, dom, zip, phalcon4, mysql
|
||||||
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local MySQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start mysql service
|
||||||
|
# run: sudo systemctl start mysql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi
|
if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi
|
||||||
@ -63,10 +78,11 @@ jobs:
|
|||||||
vendor/bin/phinx seed:run
|
vendor/bin/phinx seed:run
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: |
|
run: |
|
||||||
(cd public && nohup php -S $CODECEPTION_URL:$CODECEPTION_PORT > phalcon.log 2>&1 &)
|
(cd public && nohup php -S $CODECEPTION_URL:$CODECEPTION_PORT > phalcon.log 2>&1 &)
|
||||||
vendor/bin/codecept build
|
vendor/bin/codecept build
|
||||||
vendor/bin/codecept run
|
vendor/bin/codecept run
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
|
|||||||
@ -17,9 +17,11 @@ jobs:
|
|||||||
CODECEPTION_URL: 127.0.0.1
|
CODECEPTION_URL: 127.0.0.1
|
||||||
CODECEPTION_PORT: 8888
|
CODECEPTION_PORT: 8888
|
||||||
DB_CONNECTION: pgsql
|
DB_CONNECTION: pgsql
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:10.8
|
image: postgres:latest
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@ -31,22 +33,31 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
# For phalcon 3.x, use
|
# For phalcon 3.x, use
|
||||||
# php-versions: ['7.0', '7.1', '7.2', '7.3']
|
# php-versions: ['7.0', '7.1', '7.2', '7.3']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, dom, zip, phalcon4, pgsql #use phalcon3 for the phalcon 3.x
|
# Use phalcon3 for the phalcon 3.x
|
||||||
coverage: xdebug #optional
|
extensions: mbstring, dom, zip, phalcon4, pgsql
|
||||||
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start postgresql service
|
||||||
|
# run: sudo systemctl start postgresql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
@ -54,7 +65,7 @@ jobs:
|
|||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
|
|||||||
@ -8,50 +8,62 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.1', '7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
node-versions: ['8', '10']
|
node-versions: ['16']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: ${{ matrix.node-versions }}
|
node-version: ${{ matrix.node-versions }}
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring
|
extensions: mbstring
|
||||||
|
|
||||||
- name: Check node versions
|
- name: Check node versions
|
||||||
run: node -v
|
run: node -v
|
||||||
|
|
||||||
- name: Get yarn cache
|
- name: Get yarn cache
|
||||||
id: yarn-cache
|
id: yarn-cache
|
||||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||||
- uses: actions/cache@v1
|
|
||||||
|
- uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.yarn-cache.outputs.dir }}
|
path: ${{ steps.yarn-cache.outputs.dir }}
|
||||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-yarn-
|
restore-keys: ${{ runner.os }}-yarn-
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install yarn dependencies
|
- name: Install yarn dependencies
|
||||||
run: yarn -V
|
run: yarn -V
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install -o --prefer-dist --no-interaction
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Yarn test and build
|
- name: Yarn test and build
|
||||||
run: |
|
run: |
|
||||||
yarn run test
|
yarn run test
|
||||||
yarn run build
|
yarn run build
|
||||||
yarn run rmdist
|
yarn run rmdist
|
||||||
yarn run "build:production"
|
yarn run "build:production"
|
||||||
|
|
||||||
- name: PHP test
|
- name: PHP test
|
||||||
run: composer test
|
run: composer test
|
||||||
|
|||||||
@ -6,29 +6,35 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, simplexml, dom
|
extensions: mbstring, simplexml, dom
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text
|
||||||
|
|||||||
@ -5,9 +5,11 @@ jobs:
|
|||||||
symfony:
|
symfony:
|
||||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:latest
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: symfony
|
MYSQL_ROOT_PASSWORD: symfony
|
||||||
@ -18,36 +20,51 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: phpunit-bridge
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local MySQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start mysql service
|
||||||
|
# run: sudo systemctl start mysql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
composer require symfony/orm-pack
|
composer require --dev symfony/orm-pack
|
||||||
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||||
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony
|
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony
|
||||||
- name: Run Tests
|
|
||||||
run: php bin/phpunit --coverage-text
|
- name: Install PHPUnit
|
||||||
|
run: simple-phpunit install
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: simple-phpunit --coverage-text
|
||||||
|
|||||||
@ -5,9 +5,11 @@ jobs:
|
|||||||
symfony:
|
symfony:
|
||||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:10.8
|
image: postgres:latest
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@ -18,36 +20,51 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: phpunit-bridge
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start postgresql service
|
||||||
|
# run: sudo systemctl start postgresql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
composer require symfony/orm-pack
|
composer require --dev symfony/orm-pack
|
||||||
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||||
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8
|
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8
|
||||||
- name: Run Tests
|
|
||||||
run: php bin/phpunit --coverage-text
|
- name: Install PHPUnit
|
||||||
|
run: simple-phpunit install
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: simple-phpunit --coverage-text
|
||||||
|
|||||||
@ -9,30 +9,38 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.3', '7.4']
|
php-versions: ['7.4', '8.0', '8.1']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
tools: phpunit-bridge
|
||||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: |
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
composer require symfony/orm-pack
|
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
- name: Install PHPUnit
|
||||||
- name: Run Tests
|
run: simple-phpunit install
|
||||||
run: php bin/phpunit --coverage-text
|
|
||||||
|
- name: Run tests
|
||||||
|
run: simple-phpunit --coverage-text
|
||||||
|
|||||||
@ -11,9 +11,11 @@ jobs:
|
|||||||
TEST_DB_USERNAME: root
|
TEST_DB_USERNAME: root
|
||||||
TEST_DB_PASSWORD: yii
|
TEST_DB_PASSWORD: yii
|
||||||
DB_CHARSET: utf8
|
DB_CHARSET: utf8
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:latest
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: yii
|
MYSQL_ROOT_PASSWORD: yii
|
||||||
@ -24,33 +26,45 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set Node.js 10.x
|
- name: Set Node.js 10.x
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 10.x
|
node-version: 10.x
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, intl, gd, imagick, zip, dom, mysql
|
extensions: mbstring, intl, gd, imagick, zip, dom, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local MySQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start mysql service
|
||||||
|
# run: sudo systemctl start mysql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||||
@ -60,6 +74,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||||
TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||||
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: |
|
run: |
|
||||||
vendor/bin/codecept build
|
vendor/bin/codecept build
|
||||||
@ -68,4 +83,4 @@ jobs:
|
|||||||
vendor/bin/codecept run
|
vendor/bin/codecept run
|
||||||
env:
|
env:
|
||||||
DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||||
TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
TEST_DB_DSN: mysql:host=127.0.0.1;port=${{ job.services.mysql.ports['3306'] }};dbname=yii
|
||||||
|
|||||||
@ -11,9 +11,11 @@ jobs:
|
|||||||
TEST_DB_USERNAME: postgres
|
TEST_DB_USERNAME: postgres
|
||||||
TEST_DB_PASSWORD: postgres
|
TEST_DB_PASSWORD: postgres
|
||||||
DB_CHARSET: utf8
|
DB_CHARSET: utf8
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:10.8
|
image: postgres:latest
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@ -24,33 +26,45 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.4', '8.0']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set Node.js 10.x
|
- name: Set Node.js 10.x
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v5
|
||||||
with:
|
with:
|
||||||
node-version: 10.x
|
node-version: 10.x
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@v1 #https://github.com/shivammathur/setup-php
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
with:
|
with:
|
||||||
php-version: ${{ matrix.php-versions }}
|
php-version: ${{ matrix.php-versions }}
|
||||||
extensions: mbstring, intl, gd, imagick, zip, dom, pgsql
|
extensions: mbstring, intl, gd, imagick, zip, dom, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
||||||
|
# If you are using it instead of service containers, make sure you start it.
|
||||||
|
# - name: Start postgresql service
|
||||||
|
# run: sudo systemctl start postgresql.service
|
||||||
|
|
||||||
- name: Get composer cache directory
|
- name: Get composer cache directory
|
||||||
id: composer-cache
|
id: composer-cache
|
||||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Cache composer dependencies
|
- name: Cache composer dependencies
|
||||||
uses: actions/cache@v1
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.composer-cache.outputs.dir }}
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
# Use composer.json for key, if composer.lock is not committed.
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
restore-keys: ${{ runner.os }}-composer-
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
- name: Prepare the application
|
- name: Prepare the application
|
||||||
run: |
|
run: |
|
||||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
||||||
@ -60,6 +74,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||||
TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||||
|
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: |
|
run: |
|
||||||
vendor/bin/codecept build
|
vendor/bin/codecept build
|
||||||
@ -68,4 +83,4 @@ jobs:
|
|||||||
vendor/bin/codecept run
|
vendor/bin/codecept run
|
||||||
env:
|
env:
|
||||||
DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||||
TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
TEST_DB_DSN: pgsql:host=127.0.0.1;port=${{ job.services.postgres.ports['5432'] }};dbname=postgres
|
||||||
|
|||||||
@ -9,4 +9,4 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
verbose: true,
|
verbose: true,
|
||||||
collectCoverage: true
|
collectCoverage: true
|
||||||
};
|
};
|
||||||
|
|||||||
12364
package-lock.json
generated
12364
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
80
package.json
80
package.json
@ -1,15 +1,25 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-php",
|
"name": "setup-php",
|
||||||
"version": "1.8.2",
|
"version": "2.36.0",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "Setup PHP for use with GitHub Actions",
|
"description": "Setup PHP for use with GitHub Actions",
|
||||||
"main": "dist/index.js",
|
"main": "lib/install.js",
|
||||||
|
"types": "lib/install.d.ts",
|
||||||
|
"directories": {
|
||||||
|
"lib": "lib",
|
||||||
|
"test": "__tests__",
|
||||||
|
"src": "src"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"lib",
|
||||||
|
"src"
|
||||||
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"lint": "eslint **/*.ts --cache",
|
"lint": "eslint **/src/*.ts **/__tests__/*.ts --cache --fix",
|
||||||
"format": "prettier --write **/*.ts && git add .",
|
"format": "prettier --write **/src/*.ts **/__tests__/*.ts && git add -f __tests__/ ",
|
||||||
"format-check": "prettier --check **/*.ts",
|
"format-check": "prettier --check **/src/*.ts **/__tests__/*.ts",
|
||||||
"release": "ncc build src/install.ts -o dist && git add -f dist/",
|
"release": "ncc build -m -o dist && git add -f dist/",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
@ -24,33 +34,41 @@
|
|||||||
"author": "shivammathur",
|
"author": "shivammathur",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.2.2",
|
"@actions/exec": "^2.0.0",
|
||||||
"@actions/exec": "^1.0.3",
|
"compare-versions": "^6.1.1"
|
||||||
"@actions/io": "^1.0.2",
|
|
||||||
"fs": "0.0.1-security"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^25.1.1",
|
"@eslint/compat": "^2.0.2",
|
||||||
"@types/node": "^13.7.0",
|
"@eslint/js": "^9.39.1",
|
||||||
"@typescript-eslint/eslint-plugin": "^2.18.0",
|
"@types/jest": "^30.0.0",
|
||||||
"@typescript-eslint/parser": "^2.18.0",
|
"@types/node": "^25.2.2",
|
||||||
"@zeit/ncc": "^0.21.0",
|
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
||||||
"eslint": "^6.8.0",
|
"@typescript-eslint/parser": "^8.54.0",
|
||||||
"eslint-config-prettier": "^6.10.0",
|
"@vercel/ncc": "^0.38.4",
|
||||||
"eslint-plugin-import": "^2.20.1",
|
"eslint": "^9.39.1",
|
||||||
"eslint-plugin-jest": "^23.6.0",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"eslint-plugin-prettier": "^3.1.2",
|
"eslint-import-resolver-typescript": "^4.4.4",
|
||||||
"husky": "^4.2.1",
|
"eslint-plugin-import": "^2.32.0",
|
||||||
"jest": "^25.1.0",
|
"eslint-plugin-jest": "^29.12.2",
|
||||||
"jest-circus": "^25.1.0",
|
"eslint-plugin-prettier": "^5.5.5",
|
||||||
"prettier": "^1.19.1",
|
"globals": "^17.3.0",
|
||||||
"ts-jest": "^25.1.0",
|
"jest": "^30.2.0",
|
||||||
"typescript": "^3.7.5"
|
"jest-circus": "^30.2.0",
|
||||||
|
"nock": "^14.0.10",
|
||||||
|
"prettier": "^3.8.1",
|
||||||
|
"simple-git-hooks": "^2.13.1",
|
||||||
|
"ts-jest": "^29.4.6",
|
||||||
|
"typescript": "^5.9.3"
|
||||||
},
|
},
|
||||||
"husky": {
|
"overrides": {
|
||||||
"skipCI": true,
|
"test-exclude": "^7.0.1",
|
||||||
"hooks": {
|
"glob": "^11.1.0",
|
||||||
"pre-commit": "npm run format && npm run lint && npm run build && npm run release"
|
"minimatch": "^10.2.1"
|
||||||
}
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/shivammathur/setup-php/issues"
|
||||||
|
},
|
||||||
|
"simple-git-hooks": {
|
||||||
|
"pre-commit": "npm run format && npm run lint && npm run test && npm run build && npm run release"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@ -9,12 +9,17 @@ export async function addINIValuesUnix(
|
|||||||
ini_values_csv: string
|
ini_values_csv: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const ini_values: Array<string> = await utils.CSVArray(ini_values_csv);
|
const ini_values: Array<string> = await utils.CSVArray(ini_values_csv);
|
||||||
let script = '\n';
|
let script = '';
|
||||||
await utils.asyncForEach(ini_values, async function(line: string) {
|
await utils.asyncForEach(ini_values, async function (line: string) {
|
||||||
script +=
|
script +=
|
||||||
(await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n';
|
'\n' + (await utils.addLog('$tick', line, 'Added to php.ini', 'linux'));
|
||||||
});
|
});
|
||||||
return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script;
|
return (
|
||||||
|
'echo "' +
|
||||||
|
ini_values.join('\n') +
|
||||||
|
'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1' +
|
||||||
|
script
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,15 +32,12 @@ export async function addINIValuesWindows(
|
|||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const ini_values: Array<string> = await utils.CSVArray(ini_values_csv);
|
const ini_values: Array<string> = await utils.CSVArray(ini_values_csv);
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
await utils.asyncForEach(ini_values, async function(line: string) {
|
await utils.asyncForEach(ini_values, async function (line: string) {
|
||||||
script +=
|
script +=
|
||||||
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
|
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
|
||||||
});
|
});
|
||||||
return (
|
return (
|
||||||
'Add-Content C:\\tools\\php\\php.ini "' +
|
'Add-Content "$php_dir\\php.ini" "' + ini_values.join('\n') + '"' + script
|
||||||
ini_values.join('\n') +
|
|
||||||
'"' +
|
|
||||||
script
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,27 +45,28 @@ export async function addINIValuesWindows(
|
|||||||
* Function to add custom ini values
|
* Function to add custom ini values
|
||||||
*
|
*
|
||||||
* @param ini_values_csv
|
* @param ini_values_csv
|
||||||
* @param os_version
|
* @param os
|
||||||
|
* @param no_step
|
||||||
*/
|
*/
|
||||||
export async function addINIValues(
|
export async function addINIValues(
|
||||||
ini_values_csv: string,
|
ini_values_csv: string,
|
||||||
os_version: string,
|
os: string,
|
||||||
no_step = false
|
no_step = false
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (no_step) {
|
switch (no_step) {
|
||||||
case true:
|
case true:
|
||||||
script +=
|
script +=
|
||||||
(await utils.stepLog('Add php.ini values', os_version)) +
|
(await utils.stepLog('Add php.ini values', os)) +
|
||||||
(await utils.suppressOutput(os_version)) +
|
(await utils.suppressOutput(os)) +
|
||||||
'\n';
|
'\n';
|
||||||
break;
|
break;
|
||||||
case false:
|
case false:
|
||||||
default:
|
default:
|
||||||
script += (await utils.stepLog('Add php.ini values', os_version)) + '\n';
|
script += (await utils.stepLog('Add php.ini values', os)) + '\n';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (os_version) {
|
switch (os) {
|
||||||
case 'win32':
|
case 'win32':
|
||||||
return script + (await addINIValuesWindows(ini_values_csv));
|
return script + (await addINIValuesWindows(ini_values_csv));
|
||||||
case 'darwin':
|
case 'darwin':
|
||||||
@ -71,8 +74,8 @@ export async function addINIValues(
|
|||||||
return script + (await addINIValuesUnix(ini_values_csv));
|
return script + (await addINIValuesUnix(ini_values_csv));
|
||||||
default:
|
default:
|
||||||
return await utils.log(
|
return await utils.log(
|
||||||
'Platform ' + os_version + ' is not supported',
|
'Platform ' + os + ' is not supported',
|
||||||
os_version,
|
os,
|
||||||
'error'
|
'error'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
65
src/configs/brew_extensions
Normal file
65
src/configs/brew_extensions
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
amqp=amqp
|
||||||
|
apcu=apcu
|
||||||
|
ast=ast
|
||||||
|
brotli=brotli
|
||||||
|
couchbase=couchbase
|
||||||
|
ds=ds
|
||||||
|
event=event
|
||||||
|
excimer=excimer
|
||||||
|
expect=expect
|
||||||
|
gearman=gearman
|
||||||
|
gmagick=gmagick
|
||||||
|
gnupg=gnupg
|
||||||
|
grpc=grpc
|
||||||
|
igbinary=igbinary
|
||||||
|
imagick=imagick
|
||||||
|
imap=imap
|
||||||
|
interbase=interbase
|
||||||
|
lua=lua
|
||||||
|
mailparse=mailparse
|
||||||
|
maxminddb=maxminddb
|
||||||
|
mcrypt=mcrypt
|
||||||
|
memcache=memcache
|
||||||
|
memcached=memcached
|
||||||
|
mongodb=mongodb
|
||||||
|
mongodb1=mongodb1
|
||||||
|
msgpack=msgpack
|
||||||
|
newrelic=newrelic
|
||||||
|
oauth=oauth
|
||||||
|
opentelemetry=opentelemetry
|
||||||
|
pcov=pcov
|
||||||
|
pdo_firebird=pdo_firebird
|
||||||
|
pdo_sqlsrv=pdo_sqlsrv
|
||||||
|
pecl_http=http
|
||||||
|
phalcon3=phalcon
|
||||||
|
phalcon4=phalcon
|
||||||
|
phalcon5=phalcon
|
||||||
|
pinba=pinba
|
||||||
|
propro=propro
|
||||||
|
protobuf=protobuf
|
||||||
|
psr=psr
|
||||||
|
raphf=raphf
|
||||||
|
rdkafka=rdkafka
|
||||||
|
phpredis=redis
|
||||||
|
redis=redis
|
||||||
|
seaslog=seaslog
|
||||||
|
scalar_objects=scalar_objects
|
||||||
|
snmp=snmp
|
||||||
|
sqlsrv=sqlsrv
|
||||||
|
spx=spx
|
||||||
|
ssh2=ssh2
|
||||||
|
swoole=swoole
|
||||||
|
swow=swow
|
||||||
|
uopz=uopz
|
||||||
|
uploadprogress=uploadprogress
|
||||||
|
uuid=uuid
|
||||||
|
v8js=v8js
|
||||||
|
vips=vips
|
||||||
|
vld=vld
|
||||||
|
xdebug=xdebug
|
||||||
|
xdebug2=xdebug
|
||||||
|
xhprof=xhprof
|
||||||
|
xlswriter=xlswriter
|
||||||
|
yaml=yaml
|
||||||
|
zmq=zmq
|
||||||
|
zstd=zstd
|
||||||
3
src/configs/composer.env
Normal file
3
src/configs/composer.env
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
COMPOSER_PROCESS_TIMEOUT=0
|
||||||
|
COMPOSER_NO_INTERACTION=1
|
||||||
|
COMPOSER_NO_AUDIT=1
|
||||||
@ -1,58 +0,0 @@
|
|||||||
variants:
|
|
||||||
dev:
|
|
||||||
bcmath:
|
|
||||||
calendar:
|
|
||||||
cli:
|
|
||||||
ctype:
|
|
||||||
dom:
|
|
||||||
fileinfo:
|
|
||||||
filter:
|
|
||||||
ipc:
|
|
||||||
iconv:
|
|
||||||
json:
|
|
||||||
mbregex:
|
|
||||||
mbstring:
|
|
||||||
mhash:
|
|
||||||
mcrypt:
|
|
||||||
pcntl:
|
|
||||||
pcre:
|
|
||||||
pdo:
|
|
||||||
phar:
|
|
||||||
posix:
|
|
||||||
sockets:
|
|
||||||
tokenizer:
|
|
||||||
xml:
|
|
||||||
curl:
|
|
||||||
openssl:
|
|
||||||
zip:
|
|
||||||
gd:
|
|
||||||
- --with-freetype
|
|
||||||
- --with-pdo-mysql=mysqlnd
|
|
||||||
- --with-mysqli=mysqlnd
|
|
||||||
- --with-pgsql
|
|
||||||
- --with-pdo-pgsql
|
|
||||||
- --with-gmp=/usr/local/opt/gmp
|
|
||||||
- --with-openssl
|
|
||||||
- --with-pear
|
|
||||||
- --with-zip
|
|
||||||
- --with-libxml
|
|
||||||
- --with-kerberos
|
|
||||||
- --with-gd
|
|
||||||
- --with-ffi
|
|
||||||
- --with-curl
|
|
||||||
- --with-mhash
|
|
||||||
- --with-readline=/usr/local/opt/readline
|
|
||||||
- --with-iconv=/usr/local/opt/libiconv
|
|
||||||
- --with-icu-dir=/usr/local/opt/icu4c
|
|
||||||
- --with-config-file-path=/etc
|
|
||||||
- --enable-intl
|
|
||||||
- --enable-xml
|
|
||||||
- --enable-sysvsem
|
|
||||||
- --enable-sysvshm
|
|
||||||
- --enable-sysvmsg
|
|
||||||
- --enable-phpdbg
|
|
||||||
- --enable-exif
|
|
||||||
- --enable-gd
|
|
||||||
- --enable-soap
|
|
||||||
- --enable-xmlreader
|
|
||||||
- --enable-zend-test=shared
|
|
||||||
22
src/configs/darwin_libs
Normal file
22
src/configs/darwin_libs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
amqp=rabbitmq-c
|
||||||
|
decimal=mpdecimal
|
||||||
|
ev=libev
|
||||||
|
event=libevent
|
||||||
|
geoip=geoip
|
||||||
|
gmagick=graphicsmagick
|
||||||
|
gnupg=gpgme
|
||||||
|
grpc=grpc protobuf
|
||||||
|
imagick=imagemagick
|
||||||
|
memcached=libmemcached libevent
|
||||||
|
protobuf=protobuf
|
||||||
|
rdkafka=librdkafka
|
||||||
|
snappy=snappy
|
||||||
|
sodium=libsodium
|
||||||
|
ssh2=libssh2
|
||||||
|
uv=libuv
|
||||||
|
uuid=util-linux
|
||||||
|
vips=vips
|
||||||
|
yaz=yaz
|
||||||
|
yaml=libyaml
|
||||||
|
zstd=zstd
|
||||||
|
zmq=zeromq
|
||||||
3
src/configs/ini/jit.ini
Normal file
3
src/configs/ini/jit.ini
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
opcache.enable=1
|
||||||
|
opcache.jit_buffer_size=256M
|
||||||
|
opcache.jit=1235
|
||||||
3
src/configs/ini/jit_aarch64.ini
Normal file
3
src/configs/ini/jit_aarch64.ini
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
opcache.enable=1
|
||||||
|
opcache.jit_buffer_size=128M
|
||||||
|
opcache.jit=1235
|
||||||
2
src/configs/ini/php.ini
Normal file
2
src/configs/ini/php.ini
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
date.timezone=UTC
|
||||||
|
memory_limit=-1
|
||||||
1
src/configs/ini/xdebug.ini
Normal file
1
src/configs/ini/xdebug.ini
Normal file
@ -0,0 +1 @@
|
|||||||
|
xdebug.mode=coverage
|
||||||
22
src/configs/linux_libs
Normal file
22
src/configs/linux_libs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
amqp=librabbitmq-dev
|
||||||
|
decimal=libmpdec-dev
|
||||||
|
ev=libev-dev
|
||||||
|
event=libevent-dev
|
||||||
|
geoip=libgeoip-dev
|
||||||
|
gmagick=graphicsmagick-libmagick-dev-compat
|
||||||
|
gnupg=libgpgme-dev
|
||||||
|
grpc=libgrpc-dev libprotobuf-dev protobuf-compiler
|
||||||
|
imagick=libmagickwand-dev libmagickcore-dev
|
||||||
|
memcached=libmemcached-dev libevent-dev
|
||||||
|
protobuf=libprotobuf-dev protobuf-compiler
|
||||||
|
rdkafka=librdkafka-dev
|
||||||
|
snappy=libsnappy-dev
|
||||||
|
sodium=libsodium-dev
|
||||||
|
ssh2=libssh2-1-dev
|
||||||
|
uv=libuv1-dev
|
||||||
|
uuid=uuid-dev
|
||||||
|
vips=libvips-dev
|
||||||
|
yaz=libyaz-dev
|
||||||
|
yaml=libyaml-dev
|
||||||
|
zstd=libzstd-dev
|
||||||
|
zmq=libzmq3-dev
|
||||||
31
src/configs/mod_priority
Normal file
31
src/configs/mod_priority
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
apc=25
|
||||||
|
apcu_bc=25
|
||||||
|
apcu-bc=25
|
||||||
|
blackfire=30
|
||||||
|
couchbase=30
|
||||||
|
decimal=30
|
||||||
|
ds=30
|
||||||
|
event=30
|
||||||
|
ev=30
|
||||||
|
grpc=30
|
||||||
|
http=25
|
||||||
|
pecl_http=25
|
||||||
|
pecl-http=25
|
||||||
|
inotify=30
|
||||||
|
libvirt-php=40
|
||||||
|
mailparse=25
|
||||||
|
maxminddb=30
|
||||||
|
memcached=25
|
||||||
|
mysqlnd=10
|
||||||
|
mysqlnd_ms=30
|
||||||
|
opcache=10
|
||||||
|
openswoole=25
|
||||||
|
pdo=10
|
||||||
|
phalcon=35
|
||||||
|
protobuf=30
|
||||||
|
psr=15
|
||||||
|
rdkafka=30
|
||||||
|
swoole=25
|
||||||
|
vips=30
|
||||||
|
xml=15
|
||||||
|
zstd=30
|
||||||
24
src/configs/os_releases.csv
Normal file
24
src/configs/os_releases.csv
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
8,jessie
|
||||||
|
9,stretch
|
||||||
|
10,buster
|
||||||
|
11,bullseye
|
||||||
|
12,bookworm
|
||||||
|
13,trixie
|
||||||
|
16.04 LTS,xenial
|
||||||
|
16.10,yakkety
|
||||||
|
17.04,zesty
|
||||||
|
17.10,artful
|
||||||
|
18.04 LTS,bionic
|
||||||
|
18.10,cosmic
|
||||||
|
19.04,disco
|
||||||
|
19.10,eoan
|
||||||
|
20.04 LTS,focal
|
||||||
|
20.10,groovy
|
||||||
|
21.04,hirsute
|
||||||
|
21.10,impish
|
||||||
|
22.04,jammy
|
||||||
|
23.04,lunar
|
||||||
|
23.10,mantic
|
||||||
|
24.04,noble
|
||||||
|
24.10,oracular
|
||||||
|
25.10,plucky
|
||||||
|
10
src/configs/php-versions.json
Normal file
10
src/configs/php-versions.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"lowest": "8.1",
|
||||||
|
"highest": "8.5",
|
||||||
|
"latest": "8.5",
|
||||||
|
"nightly": "8.6",
|
||||||
|
"master": "8.6",
|
||||||
|
"5.x": "5.6",
|
||||||
|
"7.x": "7.4",
|
||||||
|
"8.x": "8.5"
|
||||||
|
}
|
||||||
11
src/configs/php_debug_packages
Normal file
11
src/configs/php_debug_packages
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
cgi
|
||||||
|
cli
|
||||||
|
curl
|
||||||
|
fpm
|
||||||
|
intl
|
||||||
|
mbstring
|
||||||
|
mysql
|
||||||
|
opcache
|
||||||
|
pgsql
|
||||||
|
xml
|
||||||
|
zip
|
||||||
12
src/configs/php_packages
Normal file
12
src/configs/php_packages
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
cgi
|
||||||
|
cli
|
||||||
|
curl
|
||||||
|
dev
|
||||||
|
fpm
|
||||||
|
intl
|
||||||
|
mbstring
|
||||||
|
mysql
|
||||||
|
opcache
|
||||||
|
pgsql
|
||||||
|
xml
|
||||||
|
zip
|
||||||
29
src/configs/pm/php.json
Normal file
29
src/configs/pm/php.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"problemMatcher": [
|
||||||
|
{
|
||||||
|
"owner": "php_native_error",
|
||||||
|
"severity": "error",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^(.*error):\\s+\\s+(.+) in (.+) on line (\\d+)$",
|
||||||
|
"code": 1,
|
||||||
|
"message": 2,
|
||||||
|
"file": 3,
|
||||||
|
"line": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}, {
|
||||||
|
"owner": "php_native_warning",
|
||||||
|
"severity": "warning",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^(.*Warning|.*Deprecated|.*Notice):\\s+\\s+(.+) in (.+) on line (\\d+)$",
|
||||||
|
"code": 1,
|
||||||
|
"message": 2,
|
||||||
|
"file": 3,
|
||||||
|
"line": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
358
src/configs/tools.json
Normal file
358
src/configs/tools.json
Normal file
@ -0,0 +1,358 @@
|
|||||||
|
{
|
||||||
|
"backward-compatibility-check": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "roave/backward-compatibility-check",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"box": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "box-project/box",
|
||||||
|
"packagist": "humbug/box",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"churn": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "bmitch/churn-php",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"composer-dependency-analyser": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "shipmonk/composer-dependency-analyser",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"composer-unused": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "composer-unused/composer-unused",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"composer-normalize": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "ergebnis/composer-normalize",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "diagnose"
|
||||||
|
},
|
||||||
|
"cs2pr": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "staabm/annotate-pull-request-from-checkstyle",
|
||||||
|
"extension": "",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"easy-coding-standard": {
|
||||||
|
"type": "composer",
|
||||||
|
"alias": "ecs",
|
||||||
|
"repository": "symplify/easy-coding-standard",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"infection": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "infection/infection",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"name-collision-detector": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "shipmonk/name-collision-detector",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"phan": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "phan/phan",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-v"
|
||||||
|
},
|
||||||
|
"parallel-lint": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "php-parallel-lint/PHP-Parallel-Lint",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"php-cs-fixer": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "PHP-CS-Fixer/PHP-CS-Fixer",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"fetch_latest": "true",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"php-scoper": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "humbug/php-scoper",
|
||||||
|
"packagist": "humbug/php-scoper",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpcbf": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "PHPCSStandards/PHP_CodeSniffer",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpcs": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "PHPCSStandards/PHP_CodeSniffer",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpDocumentor": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "phpDocumentor/phpDocumentor",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"alias": "phpdoc",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpmd": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "phpmd/phpmd",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpspec": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "phpspec/phpspec",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"phpstan": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "phpstan/phpstan",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"pie": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "php/pie",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"pint": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "laravel/pint",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"psalm": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "vimeo/psalm",
|
||||||
|
"extension": ".phar",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-v"
|
||||||
|
},
|
||||||
|
"behat": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "behat/behat",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"codeception": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "codeception/codeception",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"automatic-composer-prefetcher": {
|
||||||
|
"type": "composer",
|
||||||
|
"alias": "composer-prefetcher",
|
||||||
|
"repository": "narrowspark/automatic-composer-prefetcher",
|
||||||
|
"scope": "global"
|
||||||
|
},
|
||||||
|
"composer-require-checker": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "maglnet/composer-require-checker",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"flex": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "symfony/flex",
|
||||||
|
"scope": "global"
|
||||||
|
},
|
||||||
|
"phinx": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "robmorgan/phinx",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"phplint": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "overtrue/phplint",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"phpunit-bridge": {
|
||||||
|
"alias": "simple-phpunit",
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "symfony/phpunit-bridge",
|
||||||
|
"scope": "global"
|
||||||
|
},
|
||||||
|
"phpunit-polyfills": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "yoast/phpunit-polyfills",
|
||||||
|
"scope": "global"
|
||||||
|
},
|
||||||
|
"prestissimo": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "hirak/prestissimo",
|
||||||
|
"scope": "global"
|
||||||
|
},
|
||||||
|
"vapor-cli": {
|
||||||
|
"type": "composer",
|
||||||
|
"alias": "vapor",
|
||||||
|
"repository": "laravel/vapor-cli",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"rector": {
|
||||||
|
"type": "composer",
|
||||||
|
"repository": "rector/rector",
|
||||||
|
"scope": "scoped"
|
||||||
|
},
|
||||||
|
"blackfire": {
|
||||||
|
"type": "custom-package",
|
||||||
|
"alias": "blackfire-agent"
|
||||||
|
},
|
||||||
|
"grpc_php_plugin": {
|
||||||
|
"type": "custom-package",
|
||||||
|
"repository": "grpc/grpc",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "v"
|
||||||
|
},
|
||||||
|
"mago": {
|
||||||
|
"type": "custom-package",
|
||||||
|
"repository": "carthage-software/mago",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": ""
|
||||||
|
},
|
||||||
|
"protoc": {
|
||||||
|
"type": "custom-package",
|
||||||
|
"repository": "protocolbuffers/protobuf",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "v"
|
||||||
|
},
|
||||||
|
"symfony-cli": {
|
||||||
|
"alias": "symfony",
|
||||||
|
"type": "custom-package",
|
||||||
|
"repository": "symfony-cli/symfony-cli",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"blackfire-player": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"domain": "https://get.blackfire.io",
|
||||||
|
"function": "blackfire_player",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"castor": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"repository": "jolicode/castor",
|
||||||
|
"function": "castor",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"composer": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"domain": "https://getcomposer.org",
|
||||||
|
"repository": "composer/composer",
|
||||||
|
"function": "composer"
|
||||||
|
},
|
||||||
|
"deployer": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"domain": "https://deployer.org",
|
||||||
|
"repository": "deployphp/deployer",
|
||||||
|
"function": "deployer",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "-V"
|
||||||
|
},
|
||||||
|
"pecl": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"function": "pecl"
|
||||||
|
},
|
||||||
|
"phing": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"domain": "https://www.phing.info",
|
||||||
|
"repository": "phingofficial/phing",
|
||||||
|
"function": "phing",
|
||||||
|
"extension": ".phar",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "-v"
|
||||||
|
},
|
||||||
|
"phive": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"repository": "phar-io/phive",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"function": "phive",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "status"
|
||||||
|
},
|
||||||
|
"phpcpd": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"repository": "sebastianbergmann/phpcpd",
|
||||||
|
"domain": "https://phar.phpunit.de",
|
||||||
|
"function": "phpcpd",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpunit": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"repository": "sebastianbergmann/phpunit",
|
||||||
|
"packagist": "phpunit/phpunit",
|
||||||
|
"domain": "https://phar.phpunit.de",
|
||||||
|
"function": "phpunit",
|
||||||
|
"version_prefix": "",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"phpize": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"function": "dev_tools",
|
||||||
|
"alias": "php-config"
|
||||||
|
},
|
||||||
|
"php-config": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"function": "dev_tools"
|
||||||
|
},
|
||||||
|
"wp-cli": {
|
||||||
|
"type": "custom-function",
|
||||||
|
"function": "wp_cli",
|
||||||
|
"repository": "wp-cli/wp-cli",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"alias": "wp",
|
||||||
|
"extension": ".phar",
|
||||||
|
"version_parameter": "--version",
|
||||||
|
"version_prefix": "v"
|
||||||
|
}
|
||||||
|
}
|
||||||
136
src/configs/tools_schema.json
Normal file
136
src/configs/tools_schema.json
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"$id": "https://raw.githubusercontent.com/shivammathur/setup-php/develop/src/configs/tools_schema.json",
|
||||||
|
"type": "object",
|
||||||
|
"title": "Tools",
|
||||||
|
"default": {},
|
||||||
|
"examples": [
|
||||||
|
{
|
||||||
|
"tool": {
|
||||||
|
"alias": "tool_alias",
|
||||||
|
"domain": "https://example.com",
|
||||||
|
"extension": ".ext",
|
||||||
|
"fetch_latest": "true",
|
||||||
|
"function": "function_name",
|
||||||
|
"repository": "user/tool",
|
||||||
|
"packagist": "user/tool",
|
||||||
|
"scope": "global, scoped",
|
||||||
|
"type": "phar, composer, custom-package or custom-function",
|
||||||
|
"version_parameter": "--version",
|
||||||
|
"version_prefix": "v"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"items": {
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"$id": "#/items/properties/alias",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The alias schema",
|
||||||
|
"description": "Alias for a tool.",
|
||||||
|
"examples": [
|
||||||
|
"tool_alias"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"domain": {
|
||||||
|
"$id": "#/items/properties/domain",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The domain schema",
|
||||||
|
"description": "Domain URL of the tool.",
|
||||||
|
"examples": [
|
||||||
|
"https://example.com"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"extension": {
|
||||||
|
"$id": "#/items/properties/extension",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The extension schema",
|
||||||
|
"description": "File extension of the tool.",
|
||||||
|
"examples": [
|
||||||
|
".ext"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fetch_latest": {
|
||||||
|
"$id": "#/items/properties/fetch_latest",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The fetch_latest schema",
|
||||||
|
"description": "Fetch the latest version from GitHub releases.",
|
||||||
|
"enum": [
|
||||||
|
"true",
|
||||||
|
"false"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"function": {
|
||||||
|
"$id": "#/items/properties/function",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The function schema",
|
||||||
|
"description": "Function name in tools.ts which returns the script to setup the tool.",
|
||||||
|
"examples": [
|
||||||
|
"function_name"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"$id": "#/items/properties/repository",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The repository schema",
|
||||||
|
"description": "GitHub repository of the tool.",
|
||||||
|
"examples": [
|
||||||
|
"user/tool"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"packagist": {
|
||||||
|
"$id": "#/items/properties/packagist",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The repository schema",
|
||||||
|
"description": "Packagist repository of the tool in case different from repository.",
|
||||||
|
"examples": [
|
||||||
|
"user/tool"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"scope": {
|
||||||
|
"$id": "#/items/properties/scope",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The scope schema",
|
||||||
|
"description": "Scope of tool installation: global or scoped",
|
||||||
|
"enum": [
|
||||||
|
"global",
|
||||||
|
"scoped"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"$id": "#/items/properties/type",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The type schema",
|
||||||
|
"description": "Type of tool: phar, composer, custom-package or custom-function.",
|
||||||
|
"enum": [
|
||||||
|
"phar",
|
||||||
|
"composer",
|
||||||
|
"custom-package",
|
||||||
|
"custom-function"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"version_parameter": {
|
||||||
|
"$id": "#/items/properties/version_parameter",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The version_parameter schema",
|
||||||
|
"description": "Parameter to get the tool version.",
|
||||||
|
"examples": [
|
||||||
|
"--version"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"version_prefix": {
|
||||||
|
"$id": "#/items/properties/version_prefix",
|
||||||
|
"type": "string",
|
||||||
|
"title": "The version_prefix schema",
|
||||||
|
"description": "Prefix of the version in the download URL.",
|
||||||
|
"examples": [
|
||||||
|
"v"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
|
}
|
||||||
2
src/configs/windows_extensions
Normal file
2
src/configs/windows_extensions
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
xdebug
|
||||||
|
pcov
|
||||||
112
src/core.ts
Normal file
112
src/core.ts
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
import {EOL} from 'os';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commands
|
||||||
|
*
|
||||||
|
* Command Format:
|
||||||
|
* ::name key=value,key=value::message
|
||||||
|
*
|
||||||
|
* @see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface CommandProperties {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sanitizes the message for use in a workflow command.
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
|
function toCommandValue(message: string | Error): string {
|
||||||
|
if (message instanceof Error) {
|
||||||
|
return message.toString();
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Escapes data for safe use in workflow command messages.
|
||||||
|
* @param s
|
||||||
|
*/
|
||||||
|
function escapeData(s: string | Error): string {
|
||||||
|
return toCommandValue(s)
|
||||||
|
.replace(/%/g, '%25')
|
||||||
|
.replace(/\r/g, '%0D')
|
||||||
|
.replace(/\n/g, '%0A');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Escapes property values for safe use in workflow command properties.
|
||||||
|
* @param s
|
||||||
|
*/
|
||||||
|
function escapeProperty(s: string): string {
|
||||||
|
return s
|
||||||
|
.replace(/%/g, '%25')
|
||||||
|
.replace(/\r/g, '%0D')
|
||||||
|
.replace(/\n/g, '%0A')
|
||||||
|
.replace(/:/g, '%3A')
|
||||||
|
.replace(/,/g, '%2C');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Issues a command to the GitHub Actions runner.
|
||||||
|
*
|
||||||
|
* @param command - The command name to issue
|
||||||
|
* @param properties - Additional properties for the command (key-value pairs)
|
||||||
|
* @param message - The message to include with the command
|
||||||
|
*/
|
||||||
|
export function issueCommand(
|
||||||
|
command: string,
|
||||||
|
properties: CommandProperties,
|
||||||
|
message: string | Error
|
||||||
|
): void {
|
||||||
|
let cmdStr = `::${command}`;
|
||||||
|
|
||||||
|
if (properties && Object.keys(properties).length > 0) {
|
||||||
|
cmdStr += ' ';
|
||||||
|
const props = Object.entries(properties)
|
||||||
|
.filter(([, val]) => val)
|
||||||
|
.map(([key, val]) => `${key}=${escapeProperty(val)}`)
|
||||||
|
.join(',');
|
||||||
|
cmdStr += props;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdStr += `::${escapeData(message)}`;
|
||||||
|
process.stdout.write(cmdStr + EOL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds an error issue.
|
||||||
|
* @param message - error issue message
|
||||||
|
*/
|
||||||
|
export function error(message: string | Error): void {
|
||||||
|
issueCommand('error', {}, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the action status to failed.
|
||||||
|
* When the action exits it will be with an exit code of 1.
|
||||||
|
* @param message - add error issue message
|
||||||
|
*/
|
||||||
|
export function setFailed(message: string | Error): void {
|
||||||
|
process.exitCode = 1;
|
||||||
|
error(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the value of an input.
|
||||||
|
* The value is trimmed.
|
||||||
|
* Returns an empty string if the value is not defined.
|
||||||
|
*
|
||||||
|
* @param name - name of the input to get
|
||||||
|
* @param required - whether the input is required
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export function getInput(name: string, required = false): string {
|
||||||
|
const val: string =
|
||||||
|
process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
||||||
|
if (required && !val) {
|
||||||
|
throw new Error(`Input required and not supplied: ${name}`);
|
||||||
|
}
|
||||||
|
return val.trim();
|
||||||
|
}
|
||||||
173
src/coverage.ts
173
src/coverage.ts
@ -2,94 +2,92 @@ import * as utils from './utils';
|
|||||||
import * as extensions from './extensions';
|
import * as extensions from './extensions';
|
||||||
import * as config from './config';
|
import * as config from './config';
|
||||||
|
|
||||||
/**
|
export async function checkXdebugError(
|
||||||
* Function to setup Xdebug
|
extension: string,
|
||||||
*
|
version: string
|
||||||
* @param version
|
|
||||||
* @param os_version
|
|
||||||
* @param pipe
|
|
||||||
*/
|
|
||||||
export async function addCoverageXdebug(
|
|
||||||
version: string,
|
|
||||||
os_version: string,
|
|
||||||
pipe: string
|
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
switch (version) {
|
if (
|
||||||
case '8.0':
|
(/^5\.[3-6]$|^7\.[0-1]$/.test(version) && extension == 'xdebug3') ||
|
||||||
return (
|
(/^8\.[0-9]$/.test(version) && extension == 'xdebug2')
|
||||||
'\n' +
|
) {
|
||||||
(await utils.addLog(
|
return extension + ' is not supported on PHP ' + version;
|
||||||
'$cross',
|
|
||||||
'xdebug',
|
|
||||||
'Xdebug currently only supports PHP 7.4 or lower',
|
|
||||||
os_version
|
|
||||||
))
|
|
||||||
);
|
|
||||||
case '7.4':
|
|
||||||
default:
|
|
||||||
return (
|
|
||||||
(await extensions.addExtension('xdebug', version, os_version, true)) +
|
|
||||||
pipe +
|
|
||||||
'\n' +
|
|
||||||
(await utils.addLog(
|
|
||||||
'$tick',
|
|
||||||
'xdebug',
|
|
||||||
'Xdebug enabled as coverage driver',
|
|
||||||
os_version
|
|
||||||
))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to setup PCOV
|
* Function to set up Xdebug
|
||||||
|
*
|
||||||
|
* @param extension
|
||||||
|
* @param version
|
||||||
|
* @param os
|
||||||
|
* @param pipe
|
||||||
|
*/
|
||||||
|
export async function addCoverageXdebug(
|
||||||
|
extension: string,
|
||||||
|
version: string,
|
||||||
|
os: string,
|
||||||
|
pipe: string
|
||||||
|
): Promise<string> {
|
||||||
|
let script = '\n';
|
||||||
|
const error: string = await checkXdebugError(extension, version);
|
||||||
|
if (!error) {
|
||||||
|
script +=
|
||||||
|
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
|
||||||
|
extension = extension == 'xdebug3' ? 'xdebug' : extension;
|
||||||
|
script +=
|
||||||
|
(await extensions.addExtension(extension, version, os, true)) + pipe;
|
||||||
|
script += await utils.setVariable(
|
||||||
|
'xdebug_version',
|
||||||
|
'php -r "echo phpversion(\'xdebug\');"',
|
||||||
|
os
|
||||||
|
);
|
||||||
|
script +=
|
||||||
|
(await utils.getCommand(os, 'extension_log')) +
|
||||||
|
'xdebug "Xdebug $xdebug_version enabled as coverage driver"';
|
||||||
|
} else {
|
||||||
|
script += await utils.addLog('$cross', extension, error, os);
|
||||||
|
}
|
||||||
|
return script;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to set up PCOV
|
||||||
*
|
*
|
||||||
* @param version
|
* @param version
|
||||||
* @param os_version
|
* @param os
|
||||||
* @param pipe
|
* @param pipe
|
||||||
*/
|
*/
|
||||||
export async function addCoveragePCOV(
|
export async function addCoveragePCOV(
|
||||||
version: string,
|
version: string,
|
||||||
os_version: string,
|
os: string,
|
||||||
pipe: string
|
pipe: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (version) {
|
switch (true) {
|
||||||
default:
|
default:
|
||||||
script +=
|
script +=
|
||||||
(await extensions.addExtension('pcov', version, os_version, true)) +
|
(await extensions.addExtension(':xdebug:false', version, os, true)) +
|
||||||
pipe +
|
pipe;
|
||||||
'\n';
|
|
||||||
script +=
|
script +=
|
||||||
(await config.addINIValues('pcov.enabled=1', os_version, true)) + '\n';
|
(await extensions.addExtension('pcov', version, os, true)) + pipe;
|
||||||
|
script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n';
|
||||||
// add command to disable xdebug and enable pcov
|
script += await utils.setVariable(
|
||||||
switch (os_version) {
|
'pcov_version',
|
||||||
case 'linux':
|
'php -r "echo phpversion(\'pcov\');"',
|
||||||
case 'darwin':
|
os
|
||||||
script += 'remove_extension xdebug' + pipe + '\n';
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
script += 'Remove-Extension xdebug' + pipe + '\n';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// success
|
|
||||||
script += await utils.addLog(
|
|
||||||
'$tick',
|
|
||||||
'coverage: pcov',
|
|
||||||
'PCOV enabled as coverage driver',
|
|
||||||
os_version
|
|
||||||
);
|
);
|
||||||
// version is not supported
|
script +=
|
||||||
|
(await utils.getCommand(os, 'extension_log')) +
|
||||||
|
'pcov "PCOV $pcov_version enabled as coverage driver"';
|
||||||
break;
|
break;
|
||||||
case '5.6':
|
|
||||||
case '7.0':
|
case /5\.[3-6]|7\.0/.test(version):
|
||||||
script += await utils.addLog(
|
script += await utils.addLog(
|
||||||
'$cross',
|
'$cross',
|
||||||
'pcov',
|
'pcov',
|
||||||
'PHP 7.1 or newer is required',
|
'PHP 7.1 or newer is required',
|
||||||
os_version
|
os
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -101,32 +99,20 @@ export async function addCoveragePCOV(
|
|||||||
* Function to disable Xdebug and PCOV
|
* Function to disable Xdebug and PCOV
|
||||||
*
|
*
|
||||||
* @param version
|
* @param version
|
||||||
* @param os_version
|
* @param os
|
||||||
* @param pipe
|
* @param pipe
|
||||||
*/
|
*/
|
||||||
export async function disableCoverage(
|
export async function disableCoverage(
|
||||||
version: string,
|
version: string,
|
||||||
os_version: string,
|
os: string,
|
||||||
pipe: string
|
pipe: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (os_version) {
|
script +=
|
||||||
case 'linux':
|
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
|
||||||
case 'darwin':
|
script +=
|
||||||
script += 'remove_extension xdebug' + pipe + '\n';
|
(await extensions.addExtension(':xdebug:false', version, os, true)) + pipe;
|
||||||
script += 'remove_extension pcov' + pipe + '\n';
|
script += await utils.addLog('$tick', 'none', 'Disabled Xdebug and PCOV', os);
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
script += 'Remove-Extension xdebug' + pipe + '\n';
|
|
||||||
script += 'Remove-Extension pcov' + pipe + '\n';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
script += await utils.addLog(
|
|
||||||
'$tick',
|
|
||||||
'none',
|
|
||||||
'Disabled Xdebug and PCOV',
|
|
||||||
os_version
|
|
||||||
);
|
|
||||||
|
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
@ -136,24 +122,27 @@ export async function disableCoverage(
|
|||||||
*
|
*
|
||||||
* @param coverage_driver
|
* @param coverage_driver
|
||||||
* @param version
|
* @param version
|
||||||
* @param os_version
|
* @param os
|
||||||
*/
|
*/
|
||||||
export async function addCoverage(
|
export async function addCoverage(
|
||||||
coverage_driver: string,
|
coverage_driver: string,
|
||||||
version: string,
|
version: string,
|
||||||
os_version: string
|
os: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
coverage_driver = coverage_driver.toLowerCase();
|
coverage_driver = coverage_driver.toLowerCase();
|
||||||
const script: string =
|
const script: string = '\n' + (await utils.stepLog('Setup Coverage', os));
|
||||||
'\n' + (await utils.stepLog('Setup Coverage', os_version));
|
const pipe: string = (await utils.suppressOutput(os)) + '\n';
|
||||||
const pipe: string = await utils.suppressOutput(os_version);
|
|
||||||
switch (coverage_driver) {
|
switch (coverage_driver) {
|
||||||
case 'pcov':
|
case 'pcov':
|
||||||
return script + (await addCoveragePCOV(version, os_version, pipe));
|
return script + (await addCoveragePCOV(version, os, pipe));
|
||||||
case 'xdebug':
|
case 'xdebug':
|
||||||
return script + (await addCoverageXdebug(version, os_version, pipe));
|
case 'xdebug2':
|
||||||
|
case 'xdebug3':
|
||||||
|
return (
|
||||||
|
script + (await addCoverageXdebug(coverage_driver, version, os, pipe))
|
||||||
|
);
|
||||||
case 'none':
|
case 'none':
|
||||||
return script + (await disableCoverage(version, os_version, pipe));
|
return script + (await disableCoverage(version, os, pipe));
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
import * as path from 'path';
|
|
||||||
import * as utils from './utils';
|
import * as utils from './utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -6,71 +5,110 @@ import * as utils from './utils';
|
|||||||
*
|
*
|
||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param version
|
* @param version
|
||||||
* @param pipe
|
|
||||||
*/
|
*/
|
||||||
export async function addExtensionDarwin(
|
export async function addExtensionDarwin(
|
||||||
extension_csv: string,
|
extension_csv: string,
|
||||||
version: string,
|
version: string
|
||||||
pipe: string
|
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||||
let script = '\n';
|
let add_script = '\n';
|
||||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
let remove_script = '';
|
||||||
extension = extension.toLowerCase();
|
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
const [extension_name, stability]: string[] = extension.split('-');
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||||
const prefix = await utils.getExtensionPrefix(extension_name);
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
||||||
let install_command = '';
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// match pre-release versions
|
// match :extension
|
||||||
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
case /^:/.test(ext_name):
|
||||||
script +=
|
remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
|
||||||
'\nadd_unstable_extension ' +
|
|
||||||
extension_name +
|
|
||||||
' ' +
|
|
||||||
stability +
|
|
||||||
' ' +
|
|
||||||
prefix;
|
|
||||||
return;
|
return;
|
||||||
case /5\.6xdebug/.test(version_extension):
|
// Match none
|
||||||
install_command = 'sudo pecl install -f xdebug-2.5.5' + pipe;
|
case /^none$/.test(ext_name):
|
||||||
break;
|
add_script += '\ndisable_all_shared';
|
||||||
case /7\.0xdebug/.test(version_extension):
|
return;
|
||||||
install_command = 'sudo pecl install -f xdebug-2.9.0' + pipe;
|
// match extensions for compiling from source
|
||||||
break;
|
case /.+-.+\/.+@.+/.test(extension):
|
||||||
case /5\.6redis/.test(version_extension):
|
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||||
install_command = 'sudo pecl install -f redis-2.2.8' + pipe;
|
return;
|
||||||
break;
|
// match 7.4relay...8.5relay
|
||||||
case /[5-9]\.\dimagick/.test(version_extension):
|
// match 5.3blackfire...8.5blackfire
|
||||||
install_command =
|
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
||||||
'brew install pkg-config imagemagick' +
|
// match couchbase, event, geos, ibm_db2, pdo_ibm, pdo_oci, oci8, http, pecl_http
|
||||||
pipe +
|
// match 5.3ioncube...8.4ioncube
|
||||||
' && sudo pecl install -f imagick' +
|
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.4phalcon5
|
||||||
pipe;
|
// match 7.0zephir_parser...8.4zephir_parser
|
||||||
break;
|
case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+|-nightly)?$/.test(
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
version_extension
|
||||||
install_command =
|
):
|
||||||
'sh ' +
|
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||||
path.join(__dirname, '../src/scripts/ext/phalcon_darwin.sh') +
|
version_extension
|
||||||
' ' +
|
):
|
||||||
extension +
|
case /^couchbase|^event|^gearman$|^geos$|^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||||
' ' +
|
extension
|
||||||
version +
|
):
|
||||||
pipe;
|
case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])ioncube$/.test(version_extension):
|
||||||
|
case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4|(7\.4|8\.[0-4])phalcon5?/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
|
||||||
|
case /^(7\.[0-4]|8\.[0-4])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
add_script += await utils.customPackage(
|
||||||
|
ext_name,
|
||||||
|
'extensions',
|
||||||
|
extension,
|
||||||
|
'darwin'
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match pre-release versions. For example - xdebug-beta
|
||||||
|
case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nadd_unstable_extension',
|
||||||
|
ext_name,
|
||||||
|
ext_version,
|
||||||
|
ext_prefix
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match semver
|
||||||
|
case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nadd_pecl_extension',
|
||||||
|
ext_name,
|
||||||
|
ext_version,
|
||||||
|
ext_prefix
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match 5.3pcov to 7.0pcov
|
||||||
|
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
|
add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
|
||||||
|
return;
|
||||||
|
// match brew extensions
|
||||||
|
case /(?<!5\.[3-5])(amqp|apcu|brotli|excimer|expect|gmagick|gnupg|grpc|igbinary|imagick|imap|interbase|mailparse|maxminddb|mcrypt|memcache|memcached|mongodb|mongodb1|msgpack|newrelic|oauth|opentelemetry|pdo_firebird|pinba|protobuf|psr|raphf|rdkafka|redis|scalar_objects|seaslog|snmp|spx|ssh2|swoole|uopz|uploadprogress|uuid|vld|xdebug|xdebug2|xhprof|yaml|zmq|zstd)/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /(?<!5\.[3-6])(ds|v8js)/.test(version_extension):
|
||||||
|
case /(5\.6|7\.[0-4])(propro|lua)/.test(version_extension):
|
||||||
|
case /(?<!5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
|
case /(?<!5\.[3-6])(ast|vips|xlswriter)/.test(version_extension):
|
||||||
|
case /^(8\.[0-5])swow$/.test(version_extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nadd_brew_extension',
|
||||||
|
ext_name,
|
||||||
|
ext_prefix
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match sqlite
|
||||||
|
case /^sqlite$/.test(extension):
|
||||||
|
extension = 'sqlite3';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
install_command = 'sudo pecl install -f ' + extension + pipe;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
script +=
|
add_script += await utils.joins('\nadd_extension', extension, ext_prefix);
|
||||||
'\nadd_extension ' +
|
|
||||||
extension +
|
|
||||||
' "' +
|
|
||||||
install_command +
|
|
||||||
'" ' +
|
|
||||||
(await utils.getExtensionPrefix(extension));
|
|
||||||
});
|
});
|
||||||
return script;
|
return add_script + remove_script;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,41 +116,123 @@ export async function addExtensionDarwin(
|
|||||||
*
|
*
|
||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param version
|
* @param version
|
||||||
* @param pipe
|
|
||||||
*/
|
*/
|
||||||
export async function addExtensionWindows(
|
export async function addExtensionWindows(
|
||||||
extension_csv: string,
|
extension_csv: string,
|
||||||
version: string,
|
version: string
|
||||||
pipe: string
|
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||||
let script = '\n';
|
let add_script = '\n';
|
||||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
let remove_script = '';
|
||||||
extension = extension.toLowerCase();
|
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||||
const [extension_name, stability]: string[] = extension.split('-');
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
|
let matches: RegExpExecArray;
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// match pre-release versions
|
// Match :extension
|
||||||
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
case /^:/.test(ext_name):
|
||||||
script += '\nAdd-Extension ' + extension_name + ' ' + stability;
|
remove_script += '\nDisable-Extension' + ext_name.replace(/:/g, ' ');
|
||||||
break;
|
break;
|
||||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
// Match none
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
case /^none$/.test(ext_name):
|
||||||
script +=
|
add_script += '\nDisable-AllShared';
|
||||||
'\n& ' +
|
break;
|
||||||
path.join(__dirname, '../src/scripts/ext/phalcon.ps1') +
|
// match 5.3blackfire...8.5blackfire
|
||||||
' ' +
|
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
||||||
extension +
|
// match ibm_db2, pdo_ibm, pdo_oci and oci8
|
||||||
' ' +
|
// match 5.3ioncube...8.4ioncube
|
||||||
version +
|
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.4phalcon5
|
||||||
'\n';
|
// match 7.1pecl_http...8.1pecl_http and 7.1http...8.1http
|
||||||
|
// match 7.0zephir_parser...8.4zephir_parser
|
||||||
|
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^pdo_firebird$/.test(
|
||||||
|
extension
|
||||||
|
):
|
||||||
|
case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])ioncube$/.test(version_extension):
|
||||||
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-4])phalcon5?$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /^(7\.[1-4]|8\.1)(pecl_)?http/.test(version_extension):
|
||||||
|
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
|
||||||
|
case /^(7\.[0-4]|8\.[0-4])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
add_script += await utils.customPackage(
|
||||||
|
ext_name,
|
||||||
|
'extensions',
|
||||||
|
extension,
|
||||||
|
'win32'
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match pre-release versions. For example - xdebug-beta
|
||||||
|
case /.+-(stable|beta|alpha|devel|snapshot)/.test(extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nAdd-Extension',
|
||||||
|
ext_name,
|
||||||
|
ext_version.replace('stable', '')
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
// match extensions for compiling from source
|
||||||
|
case /.+-.+\/.+@.+/.test(extension):
|
||||||
|
add_script += await utils.getUnsupportedLog(
|
||||||
|
extension,
|
||||||
|
version,
|
||||||
|
'win32'
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
// match semver with state
|
||||||
|
case /.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(extension):
|
||||||
|
matches = /.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec(
|
||||||
|
version_extension
|
||||||
|
) as RegExpExecArray;
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nAdd-Extension',
|
||||||
|
ext_name,
|
||||||
|
matches[2].replace('preview', 'devel'),
|
||||||
|
matches[1]
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
// match semver without state
|
||||||
|
case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nAdd-Extension',
|
||||||
|
ext_name,
|
||||||
|
'stable',
|
||||||
|
ext_version
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
// match 7.2xdebug2 to 7.4xdebug2
|
||||||
|
case /7\.[2-4]xdebug2/.test(version_extension):
|
||||||
|
add_script += '\nAdd-Extension xdebug stable 2.9.8';
|
||||||
|
break;
|
||||||
|
// match 5.3pcov to 7.0pcov
|
||||||
|
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
|
add_script += await utils.getUnsupportedLog('pcov', version, 'win32');
|
||||||
|
break;
|
||||||
|
// match 5.3 to 5.6 - mysql, mysqli, mysqlnd
|
||||||
|
case /^5\.[3-6](?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(version_extension):
|
||||||
|
add_script +=
|
||||||
|
'\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
||||||
|
break;
|
||||||
|
// match 7.0 and newer mysql, mysqli and mysqlnd
|
||||||
|
case /(?<!5\.[3-6])(?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
add_script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
|
||||||
|
break;
|
||||||
|
// match sqlite
|
||||||
|
case /^sqlite$/.test(extension):
|
||||||
|
extension = 'sqlite3';
|
||||||
|
add_script += await utils.joins('\nAdd-Extension', extension);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
script += '\nAdd-Extension ' + extension;
|
add_script += '\nAdd-Extension ' + extension;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return script;
|
return add_script + remove_script;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -120,72 +240,116 @@ export async function addExtensionWindows(
|
|||||||
*
|
*
|
||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param version
|
* @param version
|
||||||
* @param pipe
|
|
||||||
*/
|
*/
|
||||||
export async function addExtensionLinux(
|
export async function addExtensionLinux(
|
||||||
extension_csv: string,
|
extension_csv: string,
|
||||||
version: string,
|
version: string
|
||||||
pipe: string
|
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
const extensions: Array<string> = await utils.extensionArray(extension_csv);
|
||||||
let script = '\n';
|
let add_script = '\n';
|
||||||
await utils.asyncForEach(extensions, async function(extension: string) {
|
let remove_script = '';
|
||||||
extension = extension.toLowerCase();
|
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||||
const version_extension: string = version + extension;
|
const version_extension: string = version + extension;
|
||||||
const [extension_name, stability]: string[] = extension.split('-');
|
const [ext_name, ext_version]: string[] = extension
|
||||||
const prefix = await utils.getExtensionPrefix(extension_name);
|
.split(/-(.+)/)
|
||||||
let install_command = '';
|
.filter(Boolean);
|
||||||
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
||||||
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
// match pre-release versions
|
// Match :extension
|
||||||
case /.*-(beta|alpha|devel|snapshot)/.test(version_extension):
|
case /^:/.test(ext_name):
|
||||||
script +=
|
remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
|
||||||
'\nadd_unstable_extension ' +
|
|
||||||
extension_name +
|
|
||||||
' ' +
|
|
||||||
stability +
|
|
||||||
' ' +
|
|
||||||
prefix;
|
|
||||||
return;
|
return;
|
||||||
// match 5.6gearman..7.4gearman
|
// Match none
|
||||||
case /^((5\.6)|(7\.[0-4]))gearman$/.test(version_extension):
|
case /^none$/.test(ext_name):
|
||||||
install_command =
|
add_script += '\ndisable_all_shared';
|
||||||
'sh ' +
|
return;
|
||||||
path.join(__dirname, '../src/scripts/ext/gearman.sh') +
|
// match extensions for compiling from source
|
||||||
' ' +
|
case /.+-.+\/.+@.+/.test(extension):
|
||||||
version +
|
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||||
pipe;
|
return;
|
||||||
|
// match 7.4relay...8.5relay
|
||||||
|
// match 5.3blackfire...8.5blackfire
|
||||||
|
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
||||||
|
// match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
|
||||||
|
// match couchbase, geos, ibm_db2, pdo_ibm, pdo_oci, oci8, http, pecl_http
|
||||||
|
// match 5.3ioncube...8.4ioncube
|
||||||
|
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, 7.4phalcon5...8.4phalcon5
|
||||||
|
// match 7.0zephir_parser...8.4zephir_parser
|
||||||
|
case /^(7\.4|8\.[0-5])relay(-v?\d+\.\d+\.\d+|-nightly)?$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /^couchbase|^event|^gearman$|^geos$|^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||||
|
extension
|
||||||
|
):
|
||||||
|
case /(?<!5\.[3-5])intl-\d+\.\d+$/.test(version_extension):
|
||||||
|
case /^(5\.[3-6]|7\.[0-4]|8\.[0-4])ioncube$/.test(version_extension):
|
||||||
|
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-4])phalcon5?$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
|
||||||
|
case /^(7\.[0-4]|8\.[0-4])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
|
||||||
|
version_extension
|
||||||
|
):
|
||||||
|
add_script += await utils.customPackage(
|
||||||
|
ext_name,
|
||||||
|
'extensions',
|
||||||
|
extension,
|
||||||
|
'linux'
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match pre-release versions. For example - xdebug-beta
|
||||||
|
case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nadd_unstable_extension',
|
||||||
|
ext_name,
|
||||||
|
ext_version,
|
||||||
|
ext_prefix
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match semver versions
|
||||||
|
case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nadd_pecl_extension',
|
||||||
|
ext_name,
|
||||||
|
ext_version,
|
||||||
|
ext_prefix
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match 5.3pcov to 7.0pcov
|
||||||
|
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||||
|
add_script += await utils.getUnsupportedLog('pcov', version, 'linux');
|
||||||
|
return;
|
||||||
|
// match 7.2xdebug2...7.4xdebug2
|
||||||
|
case /^7\.[2-4]xdebug2$/.test(version_extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nadd_pecl_extension',
|
||||||
|
'xdebug',
|
||||||
|
'2.9.8',
|
||||||
|
ext_prefix
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match pdo extensions
|
||||||
|
case /^pdo[_-].+/.test(extension):
|
||||||
|
extension = extension.replace(/pdo[_-]|3/, '');
|
||||||
|
add_script += '\nadd_pdo_extension ' + extension;
|
||||||
|
return;
|
||||||
|
// match sqlite
|
||||||
|
case /^sqlite$/.test(extension):
|
||||||
|
extension = 'sqlite3';
|
||||||
break;
|
break;
|
||||||
// match 7.0phalcon3...7.3phalcon3 or 7.2phalcon4...7.4phalcon4
|
|
||||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
|
||||||
script +=
|
|
||||||
'\nsh ' +
|
|
||||||
path.join(__dirname, '../src/scripts/ext/phalcon.sh') +
|
|
||||||
' ' +
|
|
||||||
extension +
|
|
||||||
' ' +
|
|
||||||
version;
|
|
||||||
return;
|
|
||||||
// match 7.0xdebug..7.4xdebug
|
|
||||||
case /^7\.[0-4]xdebug$/.test(version_extension):
|
|
||||||
script +=
|
|
||||||
'\nupdate_extension xdebug 2.9.0' +
|
|
||||||
pipe +
|
|
||||||
'\n' +
|
|
||||||
(await utils.addLog('$tick', 'xdebug', 'Enabled', 'linux'));
|
|
||||||
return;
|
|
||||||
default:
|
default:
|
||||||
install_command =
|
|
||||||
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php' +
|
|
||||||
version +
|
|
||||||
'-' +
|
|
||||||
extension.replace('pdo_', '').replace('pdo-', '') +
|
|
||||||
pipe;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
script +=
|
add_script += await utils.joins('\nadd_extension', extension, ext_prefix);
|
||||||
'\nadd_extension ' + extension + ' "' + install_command + '" ' + prefix;
|
|
||||||
});
|
});
|
||||||
return script;
|
return add_script + remove_script;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -193,38 +357,38 @@ export async function addExtensionLinux(
|
|||||||
*
|
*
|
||||||
* @param extension_csv
|
* @param extension_csv
|
||||||
* @param version
|
* @param version
|
||||||
* @param os_version
|
* @param os
|
||||||
* @param log_prefix
|
* @param no_step
|
||||||
*/
|
*/
|
||||||
export async function addExtension(
|
export async function addExtension(
|
||||||
extension_csv: string,
|
extension_csv: string,
|
||||||
version: string,
|
version: string,
|
||||||
os_version: string,
|
os: string,
|
||||||
no_step = false
|
no_step = false
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const pipe: string = await utils.suppressOutput(os_version);
|
const log: string = await utils.stepLog('Setup Extensions', os);
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (no_step) {
|
switch (no_step) {
|
||||||
case true:
|
case true:
|
||||||
script += (await utils.stepLog('Setup Extensions', os_version)) + pipe;
|
script += log + (await utils.suppressOutput(os));
|
||||||
break;
|
break;
|
||||||
case false:
|
case false:
|
||||||
default:
|
default:
|
||||||
script += await utils.stepLog('Setup Extensions', os_version);
|
script += log;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (os_version) {
|
switch (os) {
|
||||||
case 'win32':
|
case 'win32':
|
||||||
return script + (await addExtensionWindows(extension_csv, version, pipe));
|
return script + (await addExtensionWindows(extension_csv, version));
|
||||||
case 'darwin':
|
case 'darwin':
|
||||||
return script + (await addExtensionDarwin(extension_csv, version, pipe));
|
return script + (await addExtensionDarwin(extension_csv, version));
|
||||||
case 'linux':
|
case 'linux':
|
||||||
return script + (await addExtensionLinux(extension_csv, version, pipe));
|
return script + (await addExtensionLinux(extension_csv, version));
|
||||||
default:
|
default:
|
||||||
return await utils.log(
|
return await utils.log(
|
||||||
'Platform ' + os_version + ' is not supported',
|
'Platform ' + os + ' is not supported',
|
||||||
os_version,
|
os,
|
||||||
'error'
|
'error'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
42
src/fetch.ts
Normal file
42
src/fetch.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/**
|
||||||
|
* Redirect status codes set for O(1) lookup
|
||||||
|
*/
|
||||||
|
const REDIRECT_CODES = new Set([301, 302, 303, 307, 308]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to fetch a URL using native fetch API (Node 24+)
|
||||||
|
*
|
||||||
|
* @param input_url
|
||||||
|
* @param auth_token
|
||||||
|
* @param redirect_count
|
||||||
|
*/
|
||||||
|
export async function fetch(
|
||||||
|
input_url: string,
|
||||||
|
auth_token?: string,
|
||||||
|
redirect_count = 5
|
||||||
|
): Promise<Record<string, string>> {
|
||||||
|
const headers: Record<string, string> = {
|
||||||
|
'User-Agent': `Mozilla/5.0 (${process.platform} ${process.arch}) setup-php`
|
||||||
|
};
|
||||||
|
if (auth_token) {
|
||||||
|
headers['Authorization'] = 'Bearer ' + auth_token;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await globalThis.fetch(input_url, {
|
||||||
|
headers,
|
||||||
|
redirect: redirect_count > 0 ? 'follow' : 'manual'
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.ok) {
|
||||||
|
const data = await response.text();
|
||||||
|
return {data};
|
||||||
|
} else if (REDIRECT_CODES.has(response.status) && redirect_count <= 0) {
|
||||||
|
return {error: `${response.status}: Redirect error`};
|
||||||
|
} else {
|
||||||
|
return {error: `${response.status}: ${response.statusText}`};
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
return {error: `Fetch error: ${(error as Error).message}`};
|
||||||
|
}
|
||||||
|
}
|
||||||
108
src/install.ts
108
src/install.ts
@ -1,84 +1,74 @@
|
|||||||
import {exec} from '@actions/exec/lib/exec';
|
import path from 'path';
|
||||||
import * as core from '@actions/core';
|
import fs from 'fs';
|
||||||
|
import {exec} from '@actions/exec';
|
||||||
import * as config from './config';
|
import * as config from './config';
|
||||||
|
import * as core from './core';
|
||||||
import * as coverage from './coverage';
|
import * as coverage from './coverage';
|
||||||
import * as extensions from './extensions';
|
import * as extensions from './extensions';
|
||||||
import * as tools from './tools';
|
import * as tools from './tools';
|
||||||
import * as utils from './utils';
|
import * as utils from './utils';
|
||||||
import * as matchers from './matchers';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build the script
|
* Build the script
|
||||||
*
|
*
|
||||||
* @param filename
|
* @param os
|
||||||
* @param version
|
|
||||||
* @param os_version
|
|
||||||
*/
|
*/
|
||||||
export async function build(
|
export async function getScript(os: string): Promise<string> {
|
||||||
filename: string,
|
const url = 'https://setup-php.com/sponsor';
|
||||||
version: string,
|
const filename = os + (await utils.scriptExtension(os));
|
||||||
os_version: string
|
const script_path = path.join(__dirname, '../src/scripts', filename);
|
||||||
): Promise<string> {
|
const run_path = script_path.replace(os, 'run');
|
||||||
// taking inputs
|
const extension_csv: string = await utils.getInput('extensions', false);
|
||||||
const extension_csv: string =
|
const ini_values_csv: string = await utils.getInput('ini-values', false);
|
||||||
(await utils.getInput('extensions', false)) ||
|
|
||||||
(await utils.getInput('extension', false)) ||
|
|
||||||
(await utils.getInput('extension-csv', false));
|
|
||||||
const ini_values_csv: string =
|
|
||||||
(await utils.getInput('ini-values', false)) ||
|
|
||||||
(await utils.getInput('ini-values-csv', false));
|
|
||||||
const coverage_driver: string = await utils.getInput('coverage', false);
|
const coverage_driver: string = await utils.getInput('coverage', false);
|
||||||
const pecl: string = await utils.getInput('pecl', false);
|
const tools_csv: string = await utils.getInput('tools', false);
|
||||||
let tools_csv: string = await utils.getInput('tools', false);
|
const version: string = await utils.parseVersion(
|
||||||
if (
|
await utils.readPHPVersion()
|
||||||
pecl == 'true' ||
|
);
|
||||||
/.*-(beta|alpha|devel|snapshot).*/.test(extension_csv)
|
const ini_file: string = await utils.parseIniFile(
|
||||||
) {
|
await utils.getInput('ini-file', false)
|
||||||
tools_csv = 'pecl, ' + tools_csv;
|
);
|
||||||
}
|
let script = await utils.joins('.', script_path, version, ini_file);
|
||||||
|
|
||||||
let script: string = await utils.readScript(filename, version, os_version);
|
|
||||||
script += await tools.addTools(tools_csv, version, os_version);
|
|
||||||
|
|
||||||
if (extension_csv) {
|
if (extension_csv) {
|
||||||
script += await extensions.addExtension(extension_csv, version, os_version);
|
script += await extensions.addExtension(extension_csv, version, os);
|
||||||
|
}
|
||||||
|
script += await tools.addTools(tools_csv, version, os);
|
||||||
|
if (coverage_driver) {
|
||||||
|
script += await coverage.addCoverage(coverage_driver, version, os);
|
||||||
}
|
}
|
||||||
if (ini_values_csv) {
|
if (ini_values_csv) {
|
||||||
script += await config.addINIValues(ini_values_csv, os_version);
|
script += await config.addINIValues(ini_values_csv, os);
|
||||||
}
|
|
||||||
if (coverage_driver) {
|
|
||||||
script += await coverage.addCoverage(coverage_driver, version, os_version);
|
|
||||||
}
|
}
|
||||||
|
script += '\n' + (await utils.stepLog(`Sponsor setup-php`, os));
|
||||||
|
script += '\n' + (await utils.addLog('$tick', 'setup-php', url, os));
|
||||||
|
|
||||||
return await utils.writeScript(filename, script);
|
fs.writeFileSync(run_path, script, {mode: 0o755});
|
||||||
|
|
||||||
|
return run_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to set environment variables based on inputs.
|
||||||
|
*/
|
||||||
|
export async function setEnv(): Promise<void> {
|
||||||
|
process.env['fail_fast'] = await utils.getInput('fail-fast', false);
|
||||||
|
process.env['GITHUB_TOKEN'] ??= await utils.getInput('github-token', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run the script
|
* Run the script
|
||||||
*/
|
*/
|
||||||
export async function run(): Promise<void> {
|
export async function run(): Promise<void> {
|
||||||
try {
|
await setEnv();
|
||||||
const os_version: string = process.platform;
|
const os: string = process.platform;
|
||||||
let version: string = await utils.getInput('php-version', true);
|
const tool = await utils.scriptTool(os);
|
||||||
version = version.length > 1 ? version.slice(0, 3) : version + '.0';
|
const run_path = await getScript(os);
|
||||||
// check the os version and run the respective script
|
await exec(tool + run_path);
|
||||||
let script_path = '';
|
|
||||||
switch (os_version) {
|
|
||||||
case 'darwin':
|
|
||||||
case 'linux':
|
|
||||||
script_path = await build(os_version + '.sh', version, os_version);
|
|
||||||
await exec('sh ' + script_path + ' ' + version + ' ' + __dirname);
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
script_path = await build('win32.ps1', version, os_version);
|
|
||||||
await exec('pwsh ' + script_path + ' ' + version + ' ' + __dirname);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
await matchers.addMatchers();
|
|
||||||
} catch (error) {
|
|
||||||
core.setFailed(error.message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the run function
|
// call the run function
|
||||||
run();
|
(async () => {
|
||||||
|
await run();
|
||||||
|
})().catch(error => {
|
||||||
|
core.setFailed(error.message);
|
||||||
|
});
|
||||||
|
|||||||
@ -1,18 +0,0 @@
|
|||||||
import * as path from 'path';
|
|
||||||
import * as utils from './utils';
|
|
||||||
import * as io from '@actions/io';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cache json files for problem matchers
|
|
||||||
*/
|
|
||||||
export async function addMatchers(): Promise<void> {
|
|
||||||
const config_path = path.join(
|
|
||||||
__dirname,
|
|
||||||
'..',
|
|
||||||
'src',
|
|
||||||
'configs',
|
|
||||||
'phpunit.json'
|
|
||||||
);
|
|
||||||
const runner_dir: string = await utils.getInput('RUNNER_TOOL_CACHE', false);
|
|
||||||
await io.cp(config_path, runner_dir);
|
|
||||||
}
|
|
||||||
37
src/packagist.ts
Normal file
37
src/packagist.ts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import * as cv from 'compare-versions';
|
||||||
|
import * as fetch from './fetch';
|
||||||
|
|
||||||
|
type RS = Record<string, string>;
|
||||||
|
type RSRS = Record<string, RS>;
|
||||||
|
|
||||||
|
export async function search(
|
||||||
|
package_name: string,
|
||||||
|
php_version: string
|
||||||
|
): Promise<string | null> {
|
||||||
|
const response = await fetch.fetch(
|
||||||
|
`https://repo.packagist.org/p2/${package_name}.json`
|
||||||
|
);
|
||||||
|
if (response.error || response.data === '[]') {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = JSON.parse(response['data']);
|
||||||
|
if (data && data.packages) {
|
||||||
|
const versions = data.packages[package_name];
|
||||||
|
versions.sort((a: RS, b: RS) => cv.compareVersions(b.version, a.version));
|
||||||
|
|
||||||
|
const result = versions.find((versionData: RSRS) => {
|
||||||
|
if (versionData?.require?.php) {
|
||||||
|
return versionData?.require?.php
|
||||||
|
.split('|')
|
||||||
|
.some(
|
||||||
|
require => require && cv.satisfies(php_version + '.0', require)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
return result ? result.version : null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
@ -1,162 +1,311 @@
|
|||||||
# Function to log start of a operation
|
# Handle dependency extensions
|
||||||
step_log() {
|
handle_dependency_extensions() {
|
||||||
message=$1
|
local formula=$1
|
||||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
local extension=$2
|
||||||
|
formula_file="${tap_dir:?}/$ext_tap/Formula/$extension@${version:?}.rb"
|
||||||
|
[ -e "$formula_file" ] || formula_file="$tap_dir/$ext_tap/Formula/$formula@$version.rb"
|
||||||
|
if [ -e "$formula_file" ]; then
|
||||||
|
IFS=" " read -r -a dependency_extensions <<< "$(grep -Eo "shivammathur.*@" "$formula_file" | xargs -I {} -n 1 basename '{}' | cut -d '@' -f 1 | tr '\n' ' ')"
|
||||||
|
for dependency_extension in "${dependency_extensions[@]}"; do
|
||||||
|
sudo sed -Ei '' "/=(.*\/)?\"?$dependency_extension(.so)?$/d" "${ini_file:?}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
suffix="$(get_php_formula_suffix)"
|
||||||
|
if [[ -n "$suffix" ]]; then
|
||||||
|
brew_opts=(-sf)
|
||||||
|
patch_abstract_file >/dev/null 2>&1
|
||||||
|
for dependency_extension in "${dependency_extensions[@]}"; do
|
||||||
|
safe_brew install --skip-link "${brew_opts[@]}" "$ext_tap/$dependency_extension@$version" >/dev/null 2>&1 &&
|
||||||
|
brew link --overwrite --force "$dependency_extension@$version" >/dev/null 2>&1 &&
|
||||||
|
copy_brew_extensions "$dependency_extension"
|
||||||
|
done
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to log result of a operation
|
# Helper function to disable an extension.
|
||||||
add_log() {
|
disable_extension_helper() {
|
||||||
mark=$1
|
local extension=$1
|
||||||
subject=$2
|
local disable_dependents=${2:-false}
|
||||||
message=$3
|
get_extension_map
|
||||||
if [ "$mark" = "$tick" ]; then
|
if [ "$disable_dependents" = "true" ]; then
|
||||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
disable_extension_dependents "$extension"
|
||||||
|
fi
|
||||||
|
sudo sed -Ei '' "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file:?}"
|
||||||
|
sudo rm -rf "$scan_dir"/*"$extension"* /tmp/php"$version"_extensions
|
||||||
|
mkdir -p /tmp/extdisabled/"$version"
|
||||||
|
echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get extension name from brew formula.
|
||||||
|
get_extension_from_formula() {
|
||||||
|
local formula=$1
|
||||||
|
local extension
|
||||||
|
extension=$(grep -E "^$formula=" "$src"/configs/brew_extensions | cut -d '=' -f 2)
|
||||||
|
[[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|php|[0-9]//g")"
|
||||||
|
echo "$extension"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get renamed formula.
|
||||||
|
get_renamed_formula() {
|
||||||
|
local formula=$1
|
||||||
|
formula_renames_json="$tap_dir/$ext_tap/formula_renames.json"
|
||||||
|
if [ -e "$formula_renames_json" ] && grep -q "$formula@$version\":" "$formula_renames_json"; then
|
||||||
|
grep "$formula@$version\":" "$formula_renames_json" | cut -d ':' -f 2 | tr -d ' ",' | cut -d '@' -f 1
|
||||||
else
|
else
|
||||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
echo "$formula"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to remove extensions
|
# Function to copy extension binaries to the extension directory.
|
||||||
remove_extension() {
|
copy_brew_extensions() {
|
||||||
extension=$1
|
local formula=$1
|
||||||
sudo sed -i '' "/$extension/d" "$ini_file"
|
formula_file="$tap_dir/$ext_tap/Formula/$formula@$version.rb"
|
||||||
sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1
|
deps="$(grep -Eo 'depends_on "shivammathur[^"]+' "$formula_file" | cut -d '/' -f 3 | tr '\n' ' ')"
|
||||||
}
|
IFS=' ' read -r -a deps <<< "$formula@$version $deps"
|
||||||
|
for dependency in "${deps[@]}"; do
|
||||||
# Function to setup extensions
|
extension_file="${brew_prefix:?}/opt/$dependency/$(get_extension_from_formula "${dependency%@*}").so"
|
||||||
add_extension() {
|
[ -e "$extension_file" ] && sudo cp "$extension_file" "$ext_dir"
|
||||||
extension=$1
|
|
||||||
install_command=$2
|
|
||||||
prefix=$3
|
|
||||||
if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
|
||||||
echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
|
||||||
elif php -m | grep -i -q -w "$extension"; then
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
elif ! php -m | grep -i -q -w "$extension"; then
|
|
||||||
(eval "$install_command" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") ||
|
|
||||||
add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Fuction to get the PECL version
|
|
||||||
get_pecl_version() {
|
|
||||||
extension=$1
|
|
||||||
stability=$2
|
|
||||||
pecl_rest='https://pecl.php.net/rest/r/'
|
|
||||||
response=$(curl -q -sSL "$pecl_rest$extension"/allreleases.xml)
|
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "(\d*\.\d*\.\d*$stability\d*)")
|
|
||||||
if [ ! "$pecl_version" ]; then
|
|
||||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "(\d*\.\d*\.\d*)")
|
|
||||||
fi
|
|
||||||
echo "$pecl_version"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to pre-release extensions using PECL
|
|
||||||
add_unstable_extension() {
|
|
||||||
extension=$1
|
|
||||||
stability=$2
|
|
||||||
prefix=$3
|
|
||||||
pecl_version=$(get_pecl_version "$extension" "$stability")
|
|
||||||
if ! php -m | grep -i -q -w "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
|
||||||
extension_version=$(php -d="$prefix=$extension" -r "echo phpversion('$extension');")
|
|
||||||
if [ "$extension_version" = "$pecl_version" ]; then
|
|
||||||
echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
|
||||||
else
|
|
||||||
remove_extension "$extension"
|
|
||||||
add_extension "$extension" "sudo pecl install -f $extension-$pecl_version" "$prefix"
|
|
||||||
fi
|
|
||||||
elif php -m | grep -i -q -w "$extension"; then
|
|
||||||
extension_version=$(php -r "echo phpversion('$extension');")
|
|
||||||
if [ "$extension_version" = "$pecl_version" ]; then
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
else
|
|
||||||
remove_extension "$extension"
|
|
||||||
add_extension "$extension" "sudo pecl install -f $extension-$pecl_version" "$prefix"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
add_extension "$extension" "sudo pecl install -f $extension-$pecl_version" "$prefix"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to setup a remote tool
|
|
||||||
add_tool() {
|
|
||||||
url=$1
|
|
||||||
tool=$2
|
|
||||||
if [ "$tool" = "composer" ]; then
|
|
||||||
brew install composer >/dev/null 2>&1
|
|
||||||
composer -q global config process-timeout 0
|
|
||||||
add_log "$tick" "$tool" "Added"
|
|
||||||
else
|
|
||||||
tool_path=/usr/local/bin/"$tool"
|
|
||||||
if [ ! -e "$tool_path" ]; then
|
|
||||||
rm -rf "$tool_path"
|
|
||||||
fi
|
|
||||||
|
|
||||||
status_code=$(sudo curl -s -w "%{http_code}" -o "$tool_path" -L "$url")
|
|
||||||
if [ "$status_code" = "200" ]; then
|
|
||||||
sudo chmod a+x "$tool_path"
|
|
||||||
if [ "$tool" = "phive" ]; then
|
|
||||||
add_extension curl >/dev/null 2>&1
|
|
||||||
add_extension mbstring >/dev/null 2>&1
|
|
||||||
add_extension xml >/dev/null 2>&1
|
|
||||||
elif [ "$tool" = "cs2pr" ]; then
|
|
||||||
sudo sed -i '' 's/exit(9)/exit(0)/' "$tool_path"
|
|
||||||
tr -d '\r' < "$tool_path" | sudo tee "$tool_path" >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
add_log "$tick" "$tool" "Added"
|
|
||||||
else
|
|
||||||
add_log "$cross" "$tool" "Could not setup $tool"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to add a tool using composer
|
|
||||||
add_composer_tool() {
|
|
||||||
tool=$1
|
|
||||||
release=$2
|
|
||||||
prefix=$3
|
|
||||||
(
|
|
||||||
composer global require "$prefix$release" >/dev/null 2>&1 &&
|
|
||||||
sudo ln -sf "$(composer -q global config home)"/vendor/bin/"$tool" /usr/local/bin/"$tool" &&
|
|
||||||
add_log "$tick" "$tool" "Added"
|
|
||||||
) || add_log "$cross" "$tool" "Could not setup $tool"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to configure PECL
|
|
||||||
configure_pecl() {
|
|
||||||
for tool in pear pecl; do
|
|
||||||
sudo "$tool" config-set php_ini "$ini_file" >/dev/null 2>&1
|
|
||||||
sudo "$tool" config-set auto_discover 1 >/dev/null 2>&1
|
|
||||||
sudo "$tool" channel-update "$tool".php.net >/dev/null 2>&1
|
|
||||||
done
|
done
|
||||||
|
if [ -d "$brew_prefix"/Cellar/"$formula"@"$version" ]; then
|
||||||
|
sudo find -- "$brew_prefix"/Cellar/"$formula"@"$version" -name "*.dylib" -exec cp {} "$ext_dir" \;
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to log PECL, it is installed along with PHP
|
# Function to install a php extension from shivammathur/extensions tap.
|
||||||
|
add_brew_extension() {
|
||||||
|
formula=$1
|
||||||
|
prefix=$2
|
||||||
|
extension="$(get_extension_from_formula "$formula")"
|
||||||
|
enable_extension "$extension" "$prefix"
|
||||||
|
if check_extension "$extension"; then
|
||||||
|
add_log "${tick:?}" "$extension" "Enabled"
|
||||||
|
else
|
||||||
|
add_brew_tap "$php_tap"
|
||||||
|
add_brew_tap "$ext_tap"
|
||||||
|
formula="$(get_renamed_formula "$formula")"
|
||||||
|
update_dependencies >/dev/null 2>&1
|
||||||
|
handle_dependency_extensions "$formula" "$extension" >/dev/null 2>&1
|
||||||
|
(
|
||||||
|
safe_brew install --skip-link "${brew_opts[@]}" "$ext_tap/$formula@$version" >/dev/null 2>&1 &&
|
||||||
|
brew link --overwrite --force "$formula@$version" >/dev/null 2>&1 &&
|
||||||
|
copy_brew_extensions "$formula"
|
||||||
|
) || pecl_install "$extension" >/dev/null 2>&1
|
||||||
|
add_extension_log "$extension" "Installed and enabled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to patch the abstract file in the extensions tap.
|
||||||
|
patch_abstract_file() {
|
||||||
|
abstract_path="$tap_dir"/"$ext_tap"/Abstract/abstract-php-extension.rb
|
||||||
|
if [[ -e "$abstract_path" && ! -e /tmp/abstract_patch ]]; then
|
||||||
|
echo '' | sudo tee /tmp/abstract_patch >/dev/null 2>&1
|
||||||
|
sudo sed -i '' -e "s|php@#{\(.*\)}|php@#{\1}$suffix|g" -e "s|php_version /|\"#{php_version}$suffix\" /|g" "$abstract_path"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to add an extension.
|
||||||
|
add_extension_helper() {
|
||||||
|
local extension=$1
|
||||||
|
prefix=$2
|
||||||
|
if [[ "$version" =~ ${old_versions:?} ]] && [ "$extension" = "imagick" ]; then
|
||||||
|
run_script "php5-darwin" "${version/./}" "$extension" >/dev/null 2>&1
|
||||||
|
else
|
||||||
|
pecl_install "$extension" >/dev/null 2>&1 &&
|
||||||
|
if [[ "$version" =~ ${old_versions:?} ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
|
||||||
|
fi
|
||||||
|
add_extension_log "$extension" "Installed and enabled"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to handle request to add phpize and php-config.
|
||||||
|
add_devtools() {
|
||||||
|
tool=$1
|
||||||
|
add_log "${tick:?}" "$tool" "Added $tool $semver"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to handle request to add PECL.
|
||||||
add_pecl() {
|
add_pecl() {
|
||||||
add_log "$tick" "PECL" "Added"
|
enable_extension xml extension >/dev/null 2>&1
|
||||||
|
configure_pecl >/dev/null 2>&1
|
||||||
|
pear_version=$(get_tool_version "pecl" "version")
|
||||||
|
add_log "${tick:?}" "PECL" "Found PECL $pear_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to setup PHP and composer
|
# Link opcache extension to extensions directory.
|
||||||
setup_php_and_composer() {
|
link_opcache() {
|
||||||
export HOMEBREW_NO_INSTALL_CLEANUP=TRUE
|
opcache_ini="$brew_prefix"/etc/php/"$version"/conf.d/ext-opcache.ini
|
||||||
brew tap shivammathur/homebrew-php >/dev/null 2>&1
|
if [ -e "$opcache_ini" ]; then
|
||||||
brew install shivammathur/php/php@"$version" >/dev/null 2>&1
|
opcache_ext=$(grep -Eo "zend_extension.*opcache.*\.so" "$opcache_ini" | cut -d '"' -f 2)
|
||||||
brew link --force --overwrite php@"$version" >/dev/null 2>&1
|
sudo ln -sf "$opcache_ext" "$ext_dir"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Patch brew to overwrite packages.
|
||||||
|
patch_brew() {
|
||||||
|
formula_installer="${brew_repo:?}"/Library/Homebrew/formula_installer.rb
|
||||||
|
code=" keg.link\(verbose: verbose\?"
|
||||||
|
sudo sed -Ei '' "s/$code.*/$code, overwrite: true\)/" "$formula_installer"
|
||||||
|
# shellcheck disable=SC2064
|
||||||
|
trap "sudo sed -Ei '' 's/$code.*/$code, overwrite: overwrite?\)/' $formula_installer" exit
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to update dependencies.
|
||||||
|
update_dependencies() {
|
||||||
|
patch_brew
|
||||||
|
if ! [ -e /tmp/update_dependencies ]; then
|
||||||
|
for repo in "$brew_repo" "${core_repo:?}"; do
|
||||||
|
if [ -e "$repo" ]; then
|
||||||
|
git_retry -C "$repo" fetch origin main && git -C "$repo" reset --hard origin/main
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get PHP version if it is already installed using Homebrew.
|
||||||
|
get_brewed_php() {
|
||||||
|
cellar="$brew_prefix"/Cellar
|
||||||
|
php_cellar="$cellar"/php
|
||||||
|
if [ -d "$cellar" ] && ! [[ "$(find "$cellar" -maxdepth 1 -name "php@$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
|
||||||
|
php_semver
|
||||||
|
elif [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
|
||||||
|
php_semver
|
||||||
|
else
|
||||||
|
echo 'false';
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup PHP 5.6 and newer using Homebrew.
|
||||||
|
add_php() {
|
||||||
|
action=$1
|
||||||
|
existing_version=$2
|
||||||
|
suffix="$(get_php_formula_suffix)"
|
||||||
|
php_keg="php@$version$suffix"
|
||||||
|
php_formula="shivammathur/php/$php_keg"
|
||||||
|
if [[ "$existing_version" = "false" || -n "$suffix" || "$action" = "upgrade" ]]; then
|
||||||
|
update_dependencies
|
||||||
|
add_brew_tap "$php_tap"
|
||||||
|
fi
|
||||||
|
if [[ "$existing_version" != "false" && -z "$suffix" ]]; then
|
||||||
|
if [ "$action" = "upgrade" ]; then
|
||||||
|
safe_brew install --only-dependencies "$php_formula"
|
||||||
|
safe_brew upgrade -f --overwrite "$php_formula"
|
||||||
|
else
|
||||||
|
brew unlink "$php_keg"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
safe_brew install --only-dependencies "$php_formula"
|
||||||
|
safe_brew install --skip-link -f --overwrite "$php_formula" 2>/dev/null || safe_brew upgrade -f --overwrite "$php_formula"
|
||||||
|
fi
|
||||||
|
brew link --force --overwrite "$php_keg" || (sudo chown -R "$(id -un)":"$(id -gn)" "$brew_prefix" && brew link --force --overwrite "$php_keg")
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get formula suffix
|
||||||
|
get_php_formula_suffix() {
|
||||||
|
local suffix
|
||||||
|
[ "${debug:?}" = "debug" ] && suffix="-debug"
|
||||||
|
[ "${ts:?}" = "zts" ] && suffix="$suffix-zts"
|
||||||
|
echo "$suffix"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get extra version.
|
||||||
|
php_extra_version() {
|
||||||
|
php_formula_file="$tap_dir"/"$php_tap"/Formula/php@"$version".rb
|
||||||
|
if [ -e "$php_formula_file" ] && ! grep -q "deprecate!" "$php_formula_file" && grep -Eq "archive/[0-9a-zA-Z]+" "$php_formula_file"; then
|
||||||
|
echo " ($(grep -Eo "archive/[0-9a-zA-Z]+" "$php_formula_file" | cut -d'/' -f 2))"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to set php.ini
|
||||||
|
add_php_config() {
|
||||||
|
if ! [ -e "$ini_dir"/php.ini-development ]; then
|
||||||
|
sudo cp "$ini_dir"/php.ini "$ini_dir"/php.ini-development
|
||||||
|
fi
|
||||||
|
if [[ "$ini" = "production" || "$ini" = "development" ]]; then
|
||||||
|
sudo cp "$ini_dir"/php.ini-"$ini" "$ini_dir"/php.ini
|
||||||
|
elif [ "$ini" = "none" ]; then
|
||||||
|
echo '' | sudo tee "${ini_file[@]}" >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get scan directory.
|
||||||
|
get_scan_dir() {
|
||||||
|
if [[ "$version" =~ ${old_versions:?} ]]; then
|
||||||
|
php --ini | grep additional | sed -e "s|.*: s*||"
|
||||||
|
else
|
||||||
|
echo "$ini_dir"/conf.d
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to handle self-hosted runner setup.
|
||||||
|
self_hosted_helper() {
|
||||||
|
sudo mkdir -p /opt/hostedtoolcache >/dev/null 2>&1 || true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to Setup PHP.
|
||||||
|
setup_php() {
|
||||||
|
step_log "Setup PHP"
|
||||||
|
php_config="$(command -v php-config 2>/dev/null)"
|
||||||
|
update=true
|
||||||
|
check_pre_installed
|
||||||
|
existing_version=$(get_brewed_php)
|
||||||
|
status="Found"
|
||||||
|
if [[ "$version" =~ ${old_versions:?} ]]; then
|
||||||
|
run_script "php5-darwin" "${version/./}" >/dev/null 2>&1
|
||||||
|
status="Installed"
|
||||||
|
elif [ "${existing_version:0:3}" != "$version" ]; then
|
||||||
|
add_php "install" "$existing_version" >/dev/null 2>&1
|
||||||
|
status="Installed"
|
||||||
|
elif [[ "${existing_version:0:3}" = "$version" && "${update:?}" = "true" ]]; then
|
||||||
|
brew_php_version="$(brew info --json "php@$version" 2>/dev/null | jq -r '.[].versions.stable')"
|
||||||
|
if [ "$brew_php_version" != "$existing_version" ]; then
|
||||||
|
add_php "upgrade" "$existing_version" >/dev/null 2>&1
|
||||||
|
status="Upgraded"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
php_config="$(command -v php-config)"
|
||||||
|
ext_dir="$(sed -n "s/.*extension_dir=['\"]\(.*\)['\"].*/\1/p" "$php_config")"
|
||||||
|
ini_dir="$(php_ini_path)"
|
||||||
|
scan_dir="$(get_scan_dir)"
|
||||||
|
ini_file="$ini_dir"/php.ini
|
||||||
|
sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer"
|
||||||
|
sudo chmod 777 "$ini_file" "${tool_path_dir:?}"
|
||||||
|
semver="$(php_semver)"
|
||||||
|
extra_version="$(php_extra_version)"
|
||||||
|
configure_php
|
||||||
|
link_opcache
|
||||||
|
set_output "php-version" "$semver"
|
||||||
|
if [ "${semver%.*}" != "$version" ]; then
|
||||||
|
add_log "${cross:?}" "PHP" "Could not setup PHP $version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo cp "$src"/configs/pm/*.json "$RUNNER_TOOL_CACHE/"
|
||||||
|
add_log "$tick" "PHP" "$status PHP $semver$extra_version"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
tick="✓"
|
version=${1:-'8.5'}
|
||||||
cross="✗"
|
ini=${2:-'production'}
|
||||||
version=$1
|
src=${0%/*}/..
|
||||||
|
php_formula=shivammathur/php/php@"$version"
|
||||||
|
scripts="$src"/scripts
|
||||||
|
ext_tap=shivammathur/homebrew-extensions
|
||||||
|
php_tap=shivammathur/homebrew-php
|
||||||
|
export HOMEBREW_CHANGE_ARCH_TO_ARM=1
|
||||||
|
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||||
|
export HOMEBREW_NO_ENV_HINTS=1
|
||||||
|
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||||
|
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||||
|
export HOMEBREW_NO_INSTALL_FROM_API=1
|
||||||
|
|
||||||
# Setup PHP and composer
|
# shellcheck source=.
|
||||||
step_log "Setup PHP"
|
. "${scripts:?}"/unix.sh
|
||||||
setup_php_and_composer
|
. "${scripts:?}"/tools/brew.sh
|
||||||
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
. "${scripts:?}"/tools/retry.sh
|
||||||
echo "date.timezone=UTC" >>"$ini_file"
|
. "${scripts:?}"/tools/add_tools.sh
|
||||||
ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
. "${scripts:?}"/extensions/source.sh
|
||||||
sudo chmod 777 "$ini_file"
|
. "${scripts:?}"/extensions/add_extensions.sh
|
||||||
mkdir -p "$(pecl config-get ext_dir)"
|
configure_brew
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ')
|
read_env
|
||||||
add_log "$tick" "PHP" "Installed PHP $semver"
|
self_hosted_setup
|
||||||
configure_pecl
|
setup_php
|
||||||
|
|||||||
@ -1,15 +0,0 @@
|
|||||||
php_h="https://raw.githubusercontent.com/php/php-src/PHP-$2/main/php.h"
|
|
||||||
os=$(uname -s)
|
|
||||||
if [ "$os" = "Linux" ]; then
|
|
||||||
apiv=$(curl -sSL --retry 5 "$php_h" | grep "PHP_API_VERSION" | cut -d' ' -f 3)
|
|
||||||
dir="/usr/lib/php/$apiv"
|
|
||||||
sudo mkdir -p "$dir" && sudo chown -R "$USER":"$(id -g -n)" /usr/lib/php
|
|
||||||
elif [ "$os" = "Darwin" ]; then
|
|
||||||
apiv=$(curl -sSL --retry 5 "$php_h" | grep "PHP_API_VERSION" | cut -d' ' -f 3)
|
|
||||||
dir="/usr/local/lib/php/pecl/$apiv"
|
|
||||||
else
|
|
||||||
dir='C:\\tools\\php\\ext'
|
|
||||||
fi
|
|
||||||
hash=$(echo -n "$1" | openssl dgst -sha256 | cut -d ' ' -f 2)
|
|
||||||
echo "::set-output name=ext_dir::$dir"
|
|
||||||
echo "::set-output name=ext_hash::$hash"
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
release_version=$(lsb_release -s -r)
|
|
||||||
sudo DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:ondrej/pkg-gearman -y
|
|
||||||
sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
|
|
||||||
|
|
||||||
if [ "$release_version" = "18.04" ]; then
|
|
||||||
sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y libgearman-dev php"$1"-gearman
|
|
||||||
elif [ "$release_version" = "16.04" ]; then
|
|
||||||
sudo DEBIAN_FRONTEND=noninteractive apt-fast install -y php"$1"-gearman
|
|
||||||
fi
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
cd ~ && git clone --depth=1 https://github.com/krakjoe/pcov.git
|
|
||||||
cd pcov && phpize
|
|
||||||
./configure --enable-pcov
|
|
||||||
make
|
|
||||||
sudo make install
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
Param (
|
|
||||||
[Parameter(Position = 0, Mandatory = $true)]
|
|
||||||
[ValidateNotNull()]
|
|
||||||
[ValidateSet('phalcon3', 'phalcon4')]
|
|
||||||
[string]
|
|
||||||
$extension,
|
|
||||||
[Parameter(Position = 1, Mandatory = $true)]
|
|
||||||
[ValidateNotNull()]
|
|
||||||
[ValidateLength(1, [int]::MaxValue)]
|
|
||||||
[string]
|
|
||||||
$version
|
|
||||||
)
|
|
||||||
|
|
||||||
# Function to install phalcon
|
|
||||||
Function Install-Phalcon() {
|
|
||||||
if ($extension_version -eq '4') {
|
|
||||||
Install-Phpextension phalcon -MinimumStability stable -Path $php_dir
|
|
||||||
} else {
|
|
||||||
$installed = Get-Php -Path $php_dir
|
|
||||||
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
|
||||||
$match = Invoke-WebRequest -UseBasicParsing -Uri $domain/phalcon/cphalcon/releases | Select-String -Pattern "href=`"(.*phalcon_x64_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)`""
|
|
||||||
$zip_file = $match.Matches[0].Groups[1].Value
|
|
||||||
Invoke-WebRequest -UseBasicParsing -Uri $domain/$zip_file -OutFile $ENV:RUNNER_TOOL_CACHE\phalcon.zip > $null 2>&1
|
|
||||||
Expand-Archive -Path $ENV:RUNNER_TOOL_CACHE\phalcon.zip -DestinationPath $ENV:RUNNER_TOOL_CACHE\phalcon -Force > $null 2>&1
|
|
||||||
Copy-Item -Path "$ENV:RUNNER_TOOL_CACHE\phalcon\php_phalcon.dll" -Destination "$ext_dir\php_phalcon.dll"
|
|
||||||
Enable-PhpExtension -Extension phalcon -Path $php_dir
|
|
||||||
}
|
|
||||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "32" $tick $extension "Installed and enabled"
|
|
||||||
}
|
|
||||||
|
|
||||||
$tick = ([char]8730)
|
|
||||||
$domain = 'https://github.com'
|
|
||||||
$php_dir = 'C:\tools\php'
|
|
||||||
$ext_dir = $php_dir + '\ext'
|
|
||||||
$extension_version = $extension.substring($extension.Length - 1)
|
|
||||||
|
|
||||||
if($extension_version -eq '4') {
|
|
||||||
if (Test-Path $ext_dir\php_psr.dll) {
|
|
||||||
Enable-PhpExtension -Extension psr -Path $php_dir
|
|
||||||
} else {
|
|
||||||
Install-Phpextension psr -MinimumStability stable -Path $php_dir
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(Test-Path $ext_dir\php_phalcon.dll) {
|
|
||||||
$phalcon = Get-PhpExtension $ext_dir\php_phalcon.dll
|
|
||||||
if($phalcon.Version[0] -eq $extension_version) {
|
|
||||||
Enable-PhpExtension -Extension phalcon -Path $php_dir
|
|
||||||
printf "\033[%s;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "32" $tick $extension "Enabled"
|
|
||||||
} else {
|
|
||||||
Remove-Item $ext_dir\php_phalcon.dll
|
|
||||||
Install-Phalcon
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Install-Phalcon
|
|
||||||
}
|
|
||||||
@ -1,72 +0,0 @@
|
|||||||
# Function to log result of a operation
|
|
||||||
add_log() {
|
|
||||||
mark=$1
|
|
||||||
subject=$2
|
|
||||||
message=$3
|
|
||||||
if [ "$mark" = "$tick" ]; then
|
|
||||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
else
|
|
||||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to update php ppa
|
|
||||||
update_ppa() {
|
|
||||||
if [ "$ppa_updated" = "false" ]; then
|
|
||||||
find /etc/apt/sources.list.d -type f -name 'ondrej-ubuntu-php*.list' -exec sudo DEBIAN_FRONTEND=noninteractive apt-get update -o Dir::Etc::sourcelist="{}" ';' >/dev/null 2>&1
|
|
||||||
ppa_updated="true"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to install phalcon
|
|
||||||
install_phalcon() {
|
|
||||||
extension=$1
|
|
||||||
version=$2
|
|
||||||
(sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "php$version-$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") ||
|
|
||||||
(update_ppa && sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "php$version-$extension" >/dev/null 2>&1 && add_log "$tick" "$extension" "Installed and enabled") ||
|
|
||||||
add_log "$cross" "$extension" "Could not install $extension on PHP $semver"
|
|
||||||
}
|
|
||||||
|
|
||||||
ini_file="/etc/php/$2/cli/conf.d/50-phalcon.ini"
|
|
||||||
ext_dir=$(php -i | grep "extension_dir => /usr" | sed -e "s|.*=> s*||")
|
|
||||||
semver=$(php -v | head -n 1 | cut -f 2 -d ' ' | cut -f 1 -d '-')
|
|
||||||
extension_major_version=$(echo "$1" | grep -i -Po '\d')
|
|
||||||
ppa_updated="false"
|
|
||||||
tick="✓"
|
|
||||||
cross="✗"
|
|
||||||
|
|
||||||
if [ "$extension_major_version" = "4" ]; then
|
|
||||||
if [ -e "$ext_dir/psr.so" ]; then
|
|
||||||
echo "extension=psr.so" | sudo tee -a "$ini_file" >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -e "$ext_dir/phalcon.so" ]; then
|
|
||||||
if php -m | grep -i -q -w psr; then
|
|
||||||
phalcon_version=$(php -d="extension=phalcon" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
|
||||||
if [ "$phalcon_version" != "$extension_major_version" ]; then
|
|
||||||
install_phalcon "$1" "$2"
|
|
||||||
else
|
|
||||||
echo "extension=phalcon.so" | sudo tee -a "$ini_file" >/dev/null 2>&1
|
|
||||||
add_log "$tick" "$1" "Enabled"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
install_phalcon "$1" "$2"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
install_phalcon "$1" "$2"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$extension_major_version" = "3" ]; then
|
|
||||||
if [ -e "$ext_dir/phalcon.so" ]; then
|
|
||||||
phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
|
||||||
if [ "$phalcon_version" != "$extension_major_version" ]; then
|
|
||||||
install_phalcon "$1" "$2"
|
|
||||||
else
|
|
||||||
echo "extension=phalcon.so" | sudo tee -a "$ini_file" >/dev/null 2>&1
|
|
||||||
add_log "$tick" "$1" "Enabled"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
install_phalcon "$1" "$2"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user