Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52fea29a50 | ||
|
|
1d62418c5a | ||
|
|
e4c0f64cb6 | ||
|
|
4de6f6f4a5 | ||
|
|
c482204203 | ||
|
|
02e8f2dc92 | ||
|
|
14d457bbef | ||
|
|
9fe8278c96 | ||
|
|
b8123f29e1 | ||
|
|
3cd644eeae | ||
|
|
047d693cbc | ||
|
|
084a79c9b8 | ||
|
|
159772ba0f | ||
|
|
c9e91c1e82 | ||
|
|
12cc6a507b | ||
|
|
33139dbaea | ||
|
|
1adbee900f | ||
|
|
7d04f5ee7e | ||
|
|
19bc37cbe5 | ||
|
|
b52e51b078 | ||
|
|
a6c520081f | ||
|
|
ced9161b13 | ||
|
|
858ddd7182 | ||
|
|
2608ba9a1a | ||
|
|
7d83587834 | ||
|
|
a75416c329 | ||
|
|
0c0c27b4cb | ||
|
|
5a9d09b8e0 | ||
|
|
8e6e5267e7 | ||
|
|
8ca9579834 | ||
|
|
b9ef68088b | ||
|
|
fffd6b1db6 | ||
|
|
d64d1a1275 | ||
|
|
add91f08e1 | ||
|
|
93f351c169 | ||
|
|
529ee057c4 | ||
|
|
3fa88f2494 | ||
|
|
0c10338998 | ||
|
|
805dfa40c1 | ||
|
|
1b1cce8c66 | ||
|
|
95edd72557 | ||
|
|
f3e473d116 | ||
|
|
8be473cdc3 | ||
|
|
083d5237d9 | ||
|
|
a919ff576a | ||
|
|
deb2299a77 | ||
|
|
5825be4b77 | ||
|
|
8d45593ff3 | ||
|
|
ba8d1631c1 | ||
|
|
7c071dfe9d | ||
|
|
eeef37e059 | ||
|
|
0dc33069a3 | ||
|
|
680a983990 | ||
|
|
694649a4a3 | ||
|
|
46a991b6aa | ||
|
|
7748c24380 | ||
|
|
ac9c953234 | ||
|
|
7729e411ec | ||
|
|
af2322b95c | ||
|
|
45e37a5311 | ||
|
|
690cb7c9d8 | ||
|
|
b2cf73f5fa | ||
|
|
64e2975255 | ||
|
|
106fd0866c | ||
|
|
44724c9282 | ||
|
|
2fa35d2e4e | ||
|
|
29e04e0a1d | ||
|
|
ea13793c13 | ||
|
|
fd580061e0 | ||
|
|
90d81e2adc | ||
|
|
93cb3149d2 | ||
|
|
accd6127cb | ||
|
|
a5c2146f3f | ||
|
|
6a1d559c57 | ||
|
|
076a5e3f0d | ||
|
|
00c8f84a71 | ||
|
|
c033e31e7c | ||
|
|
bc6f40a11a | ||
|
|
fe26b509d7 | ||
|
|
e67ff94e49 | ||
|
|
4e89813b4b | ||
|
|
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 | ||
|
|
d9cf6f5ad6 | ||
|
|
ea50c7c0a2 | ||
|
|
6ca549dcaa | ||
|
|
d3760be2cc | ||
|
|
3454287b87 | ||
|
|
88c7757dc8 | ||
|
|
48cfea3f3e | ||
|
|
43cfa2b1a8 | ||
|
|
76cecacc5e | ||
|
|
d6e173ffc6 | ||
|
|
26701f2ec8 | ||
|
|
e934fe28b8 | ||
|
|
d384d9fe7e | ||
|
|
4eeaf5f99e | ||
|
|
fd2392db56 | ||
|
|
494dde7189 | ||
|
|
706dfca1e6 | ||
|
|
d613c975f6 | ||
|
|
fbe1419ce4 | ||
|
|
c844c7b6e4 | ||
|
|
8e5cc09df9 | ||
|
|
f4f8aec1f2 | ||
|
|
b44b7344e0 | ||
|
|
e01b2f0bf7 | ||
|
|
f7f8ecb931 | ||
|
|
4f0d810cbc | ||
|
|
47335179aa | ||
|
|
63c4aea452 | ||
|
|
898b6fa1f9 | ||
|
|
747c8838bc | ||
|
|
9d6b61c5af | ||
|
|
5108c81610 | ||
|
|
e58c704985 | ||
|
|
e9c783eef0 | ||
|
|
b44e5e009f | ||
|
|
8489dbf4de | ||
|
|
f23ae2e6f7 | ||
|
|
d2b233e45f | ||
|
|
320474a245 | ||
|
|
65ccfb36dc | ||
|
|
88fb99b592 | ||
|
|
9e7bc5c91f | ||
|
|
ca2f547a35 | ||
|
|
9f21c80d24 | ||
|
|
c4317135df | ||
|
|
a2dd688679 | ||
|
|
bd214a2dca | ||
|
|
2ee4653d1c | ||
|
|
0b3e0f451d | ||
|
|
0bfa897634 | ||
|
|
71db1e2cf1 | ||
|
|
16d1cd4766 | ||
|
|
1193cd100b | ||
|
|
e839a77d8c | ||
|
|
552df3f2b0 | ||
|
|
3109c941eb | ||
|
|
aa8706a5bf | ||
|
|
9afdee42e8 | ||
|
|
aa0e9403d8 | ||
|
|
5b00f068f3 | ||
|
|
8f39d3eddd | ||
|
|
9d87d1fd14 | ||
|
|
07ae2343d0 | ||
|
|
7b8bf7af6a | ||
|
|
0ac6f76d36 | ||
|
|
6c6203b683 | ||
|
|
0c9f8a8e7e | ||
|
|
1705daea72 | ||
|
|
58fbc33c3a | ||
|
|
3f42b7d5fb | ||
|
|
dd4f0db7bf | ||
|
|
7d026bfa6b | ||
|
|
6a70f864ec | ||
|
|
8e1cde2d0a | ||
|
|
de32d8b95f | ||
|
|
273096b82f | ||
|
|
4c045616f4 | ||
|
|
935e74fb40 | ||
|
|
a507be73b5 | ||
|
|
673dcaff6d | ||
|
|
2cbfd4fb41 | ||
|
|
0969980399 | ||
|
|
1fa2905bc6 | ||
|
|
790a48c30d | ||
|
|
4b69160eff | ||
|
|
7f805f22af | ||
|
|
f2972dcf18 | ||
|
|
2d488f53fd | ||
|
|
421187c870 | ||
|
|
1798f4d615 | ||
|
|
8039546df3 | ||
|
|
c6ad3d1a70 | ||
|
|
922f1e27b8 | ||
|
|
2d3750b36e | ||
|
|
51c7527bd8 | ||
|
|
2bf7ab0207 | ||
|
|
b3a84fc51e | ||
|
|
1330950cd5 | ||
|
|
afb57fca4e | ||
|
|
50344f4883 | ||
|
|
2b027bd9bc | ||
|
|
8f8207a1ca | ||
|
|
87e6c70743 | ||
|
|
e3d18718a9 | ||
|
|
cfa7bc51cd | ||
|
|
ade633f0da | ||
|
|
2cabcf2941 | ||
|
|
9ce4bd6f1b | ||
|
|
190ae49ac1 | ||
|
|
032bc86056 | ||
|
|
704c5180a4 | ||
|
|
e4fc767f9c | ||
|
|
1cf6a369bb | ||
|
|
14acb26bdc | ||
|
|
3ff7f9cedc | ||
|
|
98e937751c | ||
|
|
31b338b199 | ||
|
|
9e32964a24 | ||
|
|
4dcf2b117f | ||
|
|
6d8250310d | ||
|
|
3164116a42 | ||
|
|
747d45cb52 | ||
|
|
4b7ad1ca81 | ||
|
|
31ef16e586 | ||
|
|
dd1def7620 | ||
|
|
693a73d8da | ||
|
|
965eb91efd | ||
|
|
db9f610623 | ||
|
|
24fb306a50 | ||
|
|
919fe77b43 | ||
|
|
914c51cfb6 | ||
|
|
8d8c2bd524 | ||
|
|
7ef437ee9d | ||
|
|
0871fbb11b | ||
|
|
3039a720ed | ||
|
|
7f32ab318e | ||
|
|
ddcacf4760 | ||
|
|
2f951ef5cd | ||
|
|
5a081357b4 | ||
|
|
c4a64dff61 | ||
|
|
aad33a8e35 | ||
|
|
eae890b1b2 | ||
|
|
8fbd2ea6bb | ||
|
|
46161660dc | ||
|
|
de68427afb | ||
|
|
4ba36c5432 | ||
|
|
99e2d8d309 | ||
|
|
929f9cd52d | ||
|
|
4dba50d3af | ||
|
|
1c258f399f | ||
|
|
e05bc317ec | ||
|
|
44815f1f73 | ||
|
|
22f5ad47d2 | ||
|
|
a29956826a | ||
|
|
c11d023c03 | ||
|
|
03f36220f4 |
@@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
* @shivammathur
|
||||||
+51
-31
@@ -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:
|
||||||
|
|
||||||
|
* [Discussions](https://github.com/shivammathur/setup-php/discussions)
|
||||||
* [Issues](https://github.com/shivammathur/setup-php/issues)
|
* [Issues](https://github.com/shivammathur/setup-php/issues)
|
||||||
+1
-5
@@ -1,8 +1,4 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github: shivammathur
|
github: shivammathur
|
||||||
community_bridge: setup-php
|
open_collective: setup-php
|
||||||
issuehunt: shivammathur
|
|
||||||
patreon: shivammathur
|
|
||||||
liberapay: shivammathur
|
|
||||||
custom: https://www.paypal.me/shivammathur
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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.
|
|
||||||
@@ -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
|
||||||
@@ -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.
|
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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.
|
|
||||||
-->
|
|
||||||
@@ -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.
|
|
||||||
-->
|
|
||||||
@@ -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.
|
|
||||||
-->
|
|
||||||
@@ -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.2 | :white_check_mark: |
|
||||||
|
| 8.3 | :white_check_mark: |
|
||||||
|
| 8.4 | :white_check_mark: |
|
||||||
|
| 8.5 | :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.
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
name : CodeQL Configuration
|
||||||
|
|
||||||
|
paths:
|
||||||
|
- './src'
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: 'github-actions'
|
||||||
|
directory: '/'
|
||||||
|
target-branch: 'develop'
|
||||||
|
schedule:
|
||||||
|
interval: 'weekly'
|
||||||
|
groups:
|
||||||
|
github-actions:
|
||||||
|
patterns:
|
||||||
|
- '*'
|
||||||
|
cooldown:
|
||||||
|
default-days: 7
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
name: CodeQL Workflow
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 15 * * 6'
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
codeql:
|
||||||
|
name: CodeQL Analysis
|
||||||
|
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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
|
||||||
|
with:
|
||||||
|
config-file: ./.github/codeql/codeql-configuration.yml
|
||||||
|
languages: javascript
|
||||||
|
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
name: Docs workflow
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 15 * * 6'
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
create:
|
||||||
|
if: github.event.repository.fork == false
|
||||||
|
permissions:
|
||||||
|
contents: none # this job only prepares artifacts and uploads them, no repository writes
|
||||||
|
name: Create
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15]
|
||||||
|
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@f3e473d116dcccaddc5834248c87452386958240 # 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@f3e473d116dcccaddc5834248c87452386958240 # 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 $env:version`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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
repository: ${{ github.repository }}.wiki
|
||||||
|
persist-credentials: false
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}/lists
|
||||||
|
pattern: lists-*
|
||||||
|
merge-multiple: true
|
||||||
|
- name: Configure Git
|
||||||
|
env:
|
||||||
|
GIT_USER_EMAIL: 41898282+github-actions[bot]@users.noreply.github.com
|
||||||
|
GIT_USER_NAME: github-actions[bot]
|
||||||
|
run : |
|
||||||
|
git config --local user.email "$GIT_USER_EMAIL"
|
||||||
|
git config --local user.name "$GIT_USER_NAME"
|
||||||
|
- 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.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
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
WIKI_REPOSITORY: ${{ github.repository }}
|
||||||
|
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://x-access-token:${GITHUB_TOKEN}@github.com/${WIKI_REPOSITORY}.wiki.git master || true
|
||||||
|
fi
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
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
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
name: Run
|
||||||
|
environment: codecov
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
fetch-depth: 2
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup Node.js 24.x
|
||||||
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # 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@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v6
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
files: coverage/lcov.info
|
||||||
|
name: github-actions-codecov-${{ matrix.operating-system }}
|
||||||
|
fail_ci_if_error: false
|
||||||
|
verbose: true
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
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
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
env:
|
||||||
|
default-php-version: '8.5'
|
||||||
|
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]
|
||||||
|
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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup cache environment
|
||||||
|
id: cache-env
|
||||||
|
uses: shivammathur/cache-extensions@de3c642a5fce0ef91581a1c9831e229f525196d6 # v1
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions || env.default-php-version }}
|
||||||
|
extensions: ${{ env.extensions }}
|
||||||
|
key: ${{ env.key }}
|
||||||
|
|
||||||
|
- name: Cache extensions
|
||||||
|
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # 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' }}
|
||||||
|
env:
|
||||||
|
DEFAULT_PHP_VERSION: ${{ env.default-php-version }}
|
||||||
|
run: |
|
||||||
|
echo "$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
|
||||||
|
env:
|
||||||
|
EXPECTED_PHP_VERSION: ${{ matrix.php-versions || env.default-php-version }}
|
||||||
|
run: |
|
||||||
|
php -v
|
||||||
|
php -r '$expected = getenv("EXPECTED_PHP_VERSION"); if(strpos(phpversion(), $expected) === 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');}"
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
name: Publish Package
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [created]
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
skip:
|
||||||
|
description: Skip release to repository
|
||||||
|
required: false
|
||||||
|
tag:
|
||||||
|
description: Tag name
|
||||||
|
required: true
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: false
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build and Publish
|
||||||
|
permissions:
|
||||||
|
contents: read # for actions/checkout
|
||||||
|
packages: write # For publishing to GitHub Packages
|
||||||
|
id-token: write # For authentication with npm registry
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout release
|
||||||
|
if: github.event_name != 'workflow_dispatch'
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Checkout tag
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
if: github.event_name == 'workflow_dispatch'
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.inputs.tag }}
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
|
||||||
|
with:
|
||||||
|
node-version: '24.x'
|
||||||
|
registry-url: https://registry.npmjs.org
|
||||||
|
package-manager-cache: false
|
||||||
|
|
||||||
|
- 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
|
||||||
|
|
||||||
|
- name: Change to GitHub Packages registry
|
||||||
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
|
||||||
|
with:
|
||||||
|
registry-url: https://npm.pkg.github.com
|
||||||
|
package-manager-cache: false
|
||||||
|
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 }}
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
name: Main workflow
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- verbose
|
|
||||||
paths-ignore:
|
|
||||||
- '**.md'
|
|
||||||
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']
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@master
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
|
|
||||||
- name: Setup Node.js 12.x
|
|
||||||
uses: actions/setup-node@master
|
|
||||||
with:
|
|
||||||
node-version: 12.x
|
|
||||||
|
|
||||||
- name: Get npm cache directory
|
|
||||||
id: npm-cache
|
|
||||||
run: echo "::set-output name=dir::$(npm config get cache)"
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
uses: actions/cache@v1
|
|
||||||
with:
|
|
||||||
path: ${{ steps.npm-cache.outputs.dir }}
|
|
||||||
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-node-
|
|
||||||
|
|
||||||
- name: Installing NPM packages
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
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 }}
|
|
||||||
extension-csv: mbstring, xdebug, pcov #optional
|
|
||||||
ini-values-csv: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata #optional
|
|
||||||
|
|
||||||
- name: Testing PHP version
|
|
||||||
run: php -v
|
|
||||||
- name: Testing Composer version
|
|
||||||
run: composer -V
|
|
||||||
- name: Testing Extensions
|
|
||||||
run: php -m
|
|
||||||
- name: Testing ini values
|
|
||||||
run: |
|
|
||||||
printf "post_max_size: %s\n" $(php -r "echo ini_get('post_max_size');")
|
|
||||||
printf "short_open_tag: %s\n" $(php -r "echo ini_get('short_open_tag');")
|
|
||||||
printf "date.timezone: %s\n" $(php -r "echo ini_get('date.timezone');")
|
|
||||||
+1
-1
@@ -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
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
20
|
||||||
+7
-6
@@ -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"
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2019 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
|
||||||
|
|||||||
+15
-47
@@ -1,52 +1,20 @@
|
|||||||
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"'}
|
||||||
|
${'disable_functions="exec,system"'} | ${'linux'} | ${'echo "disable_functions=exec,system" | sudo tee -a'}
|
||||||
win32 = await config.addINIValues(
|
${'disable_functions="exec,system"'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "disable_functions=exec,system"'}
|
||||||
'post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata',
|
${'a=$(id)'} | ${'linux'} | ${'echo "a=\'\\$(id)\'"'}
|
||||||
'fedora'
|
${'a=$(id)'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'`$(id)\'"'}
|
||||||
);
|
${'a=b, c=d'} | ${'openbsd'} | ${'Platform openbsd is not supported'}
|
||||||
expect(win32).toContain('Platform fedora is not supported');
|
`('checking addINIValues on $os', async ({ini_values, os, output}) => {
|
||||||
});
|
expect(await config.addINIValues(ini_values, os)).toContain(output);
|
||||||
|
|
||||||
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');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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');
|
||||||
|
});
|
||||||
|
});
|
||||||
+39
-77
@@ -1,82 +1,44 @@
|
|||||||
import * as coverage from '../src/coverage';
|
import * as coverage from '../src/coverage';
|
||||||
|
|
||||||
jest.mock('../src/extensions', () => ({
|
|
||||||
addExtension: jest.fn().mockImplementation(extension => {
|
|
||||||
return 'addExtension ' + 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('addExtension pcov');
|
${'PCOV'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
||||||
expect(win32).toContain(
|
${'pcov'} | ${'7.4'} | ${'win32'} | ${'$pcov_version = php -r "echo phpversion(\'pcov\');"'}
|
||||||
'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php'
|
${'pcov'} | ${'7.4'} | ${'win32'} | ${'PCOV $pcov_version enabled as coverage driver'}
|
||||||
|
${'pcov'} | ${'7.0'} | ${'win32'} | ${'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'}
|
||||||
|
${'pcov'} | ${'7.4'} | ${'linux'} | ${'add_extension pcov,disable_extension xdebug false'}
|
||||||
|
${'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'}
|
||||||
|
${'xdebug2'} | ${'7.4'} | ${'win32'} | ${'Add-Extension xdebug stable 2.9.8'}
|
||||||
|
${'xdebug'} | ${'8.0'} | ${'linux'} | ${'add_extension xdebug'}
|
||||||
|
${'xdebug3'} | ${'8.0'} | ${'linux'} | ${'add_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'}
|
||||||
|
${'xdebug'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug'}
|
||||||
|
${'xdebug3'} | ${'7.1'} | ${'darwin'} | ${'xdebug3 is not supported on PHP 7.1'}
|
||||||
|
${'xdebug2'} | ${'7.4'} | ${'darwin'} | ${'add_brew_extension xdebug2 zend_extension 2.9.8'}
|
||||||
|
${'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'}
|
||||||
|
${'none'} | ${'7.4'} | ${'darwin'} | ${'disable_extension xdebug false,disable_extension pcov false'}
|
||||||
|
${'nocov'} | ${'7.x'} | ${'any'} | ${''}
|
||||||
|
${''} | ${'7.x'} | ${'any'} | ${''}
|
||||||
|
`(
|
||||||
|
'checking addCoverage with $driver on $os',
|
||||||
|
async ({driver, php, os, output}) => {
|
||||||
|
const script: string = await coverage.addCoverage(driver, php, os);
|
||||||
|
if (output) {
|
||||||
|
output.split(',').forEach((command: string) => {
|
||||||
|
expect(script).toContain(command);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
expect(script).toEqual(output);
|
||||||
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
win32 = await coverage.addCoverage('pcov', '7.0', 'win32');
|
|
||||||
expect(win32).toContain('PHP 7.1 or newer is required');
|
|
||||||
|
|
||||||
win32 = await coverage.addCoverage('pcov', '5.6', 'win32');
|
|
||||||
expect(win32).toContain('PHP 7.1 or newer is required');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with PCOV on linux', async () => {
|
|
||||||
const linux: string = await coverage.addCoverage('pcov', '7.4', 'linux');
|
|
||||||
expect(linux).toContain('addExtension pcov');
|
|
||||||
expect(linux).toContain('sudo sed -i "/xdebug/d" $ini_file');
|
|
||||||
expect(linux).toContain('sudo phpdismod -v 7.4 xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with PCOV on darwin', async () => {
|
|
||||||
const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin');
|
|
||||||
expect(darwin).toContain('addExtension pcov');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on windows', async () => {
|
|
||||||
const win32: string = await coverage.addCoverage('xdebug', '7.3', 'win32');
|
|
||||||
expect(win32).toContain('addExtension xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on linux', async () => {
|
|
||||||
const linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux');
|
|
||||||
expect(linux).toContain('addExtension xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addCoverage with Xdebug on darwin', async () => {
|
|
||||||
const darwin: string = await coverage.addCoverage(
|
|
||||||
'xdebug',
|
|
||||||
'7.4',
|
|
||||||
'darwin'
|
|
||||||
);
|
|
||||||
expect(darwin).toContain('addExtension xdebug');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking disableCoverage windows', async () => {
|
|
||||||
const win32 = await coverage.addCoverage('none', '7.4', 'win32');
|
|
||||||
expect(win32).toContain('Disable-PhpExtension xdebug');
|
|
||||||
expect(win32).toContain('Disable-PhpExtension pcov');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking disableCoverage on linux', async () => {
|
|
||||||
const linux: string = await coverage.addCoverage('none', '7.4', 'linux');
|
|
||||||
expect(linux).toContain('sudo phpdismod -v 7.4 xdebug');
|
|
||||||
expect(linux).toContain('sudo phpdismod -v 7.4 pcov');
|
|
||||||
expect(linux).toContain('sudo sed -i "/xdebug/d" $ini_file');
|
|
||||||
expect(linux).toContain('sudo sed -i "/pcov/d" $ini_file');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking disableCoverage on darwin', async () => {
|
|
||||||
const darwin: string = await coverage.addCoverage('none', '7.4', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo sed -i \'\' "/xdebug/d" $ini_file');
|
|
||||||
expect(darwin).toContain('sudo sed -i \'\' "/pcov/d" $ini_file');
|
|
||||||
});
|
|
||||||
|
|
||||||
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('');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
+151
-74
@@ -1,86 +1,163 @@
|
|||||||
|
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',
|
${'none'} | ${'7.4'} | ${'Disable-AllShared'}
|
||||||
'7.2',
|
${':intl'} | ${'7.4'} | ${'Disable-Extension intl'}
|
||||||
'win32'
|
${'ast-beta'} | ${'7.4'} | ${'Add-Extension ast beta'}
|
||||||
|
${'blackfire'} | ${'7.3'} | ${'Add-Blackfire blackfire'}
|
||||||
|
${'blackfire-1.31.0'} | ${'7.3'} | ${'Add-Blackfire blackfire-1.31.0'}
|
||||||
|
${'grpc-1.2.3'} | ${'7.4'} | ${'Add-Extension grpc stable 1.2.3'}
|
||||||
|
${'inotify-1.2.3alpha2'} | ${'7.4'} | ${'Add-Extension inotify alpha 1.2.3'}
|
||||||
|
${'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'}
|
||||||
|
${'http'} | ${'8.5'} | ${'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);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
expect(win32).toContain('Add-Extension xdebug');
|
|
||||||
expect(win32).toContain('Add-Extension pcov');
|
|
||||||
win32 = await extensions.addExtension('xdebug, pcov', '7.4', 'win32');
|
|
||||||
expect(win32).toContain('Add-Extension xdebug');
|
|
||||||
|
|
||||||
win32 = await extensions.addExtension(
|
it.each`
|
||||||
'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'}
|
||||||
|
${'blackfire-1.31.0'} | ${'7.3'} | ${'add_blackfire blackfire-1.31.0'}
|
||||||
|
${'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);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
expect(win32).toContain('Add-Extension does_not_exist');
|
|
||||||
|
|
||||||
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'}
|
||||||
|
${'xdebug2'} | ${'7.4'} | ${'add_brew_extension xdebug2 zend_extension 2.9.8'}
|
||||||
|
${'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);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const data: string[][] = fs
|
||||||
|
.readFileSync('src/configs/brew_extensions')
|
||||||
|
.toString()
|
||||||
|
.split(/\r?\n/)
|
||||||
|
.filter(Boolean)
|
||||||
|
.map(line => {
|
||||||
|
const [formula, extension]: string[] = line.split('=');
|
||||||
|
const prefix: string =
|
||||||
|
extension == 'xdebug' ? 'zend_extension' : 'extension';
|
||||||
|
const ext_name = extension.replace(/\d+|(pdo|pecl)[_-]/, '');
|
||||||
|
const output: string = fs.existsSync(
|
||||||
|
`src/scripts/extensions/${ext_name}.sh`
|
||||||
|
)
|
||||||
|
? `add_${ext_name}`
|
||||||
|
: `add_brew_extension ${formula} ${prefix}`;
|
||||||
|
return [
|
||||||
|
formula,
|
||||||
|
formula.match(/phalcon3|lua|propro/) ? '7.3' : '8.1',
|
||||||
|
output
|
||||||
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking addExtensionOnLinux', async () => {
|
it.each(data)(
|
||||||
let linux: string = await extensions.addExtension(
|
'checking addExtensionOnDarwin for brew extension %s',
|
||||||
'xdebug, pcov',
|
async (extension, version, output) => {
|
||||||
'7.2',
|
expect(
|
||||||
'linux'
|
await extensions.addExtension(extension, version, 'darwin')
|
||||||
|
).toContain(output);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
expect(linux).toContain(
|
|
||||||
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php7.2-xdebug'
|
it.each`
|
||||||
|
extension | version | output
|
||||||
|
${'xdebug'} | ${'7.2'} | ${'Platform openbsd is not supported'}
|
||||||
|
`(
|
||||||
|
'checking addExtension on openbsd for extension $extension on version $version',
|
||||||
|
async ({extension, version, output}) => {
|
||||||
|
expect(
|
||||||
|
await extensions.addExtension(extension, version, 'openbsd')
|
||||||
|
).toContain(output);
|
||||||
|
}
|
||||||
);
|
);
|
||||||
expect(linux).toContain('pecl install xdebug');
|
|
||||||
expect(linux).toContain(
|
|
||||||
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php7.2-pcov'
|
|
||||||
);
|
|
||||||
expect(linux).toContain('pecl install pcov');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('phalcon3, phalcon4', '7.2', 'linux');
|
|
||||||
expect(linux).toContain('phalcon.sh master 7.2');
|
|
||||||
expect(linux).toContain('phalcon.sh 4.0.x 7.2');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('phalcon3, phalcon4', '7.3', 'linux');
|
|
||||||
expect(linux).toContain('phalcon.sh master 7.3');
|
|
||||||
expect(linux).toContain('phalcon.sh 4.0.x 7.3');
|
|
||||||
|
|
||||||
linux = await extensions.addExtension('xdebug', '7.2', 'fedora');
|
|
||||||
expect(linux).toContain('Platform fedora is not supported');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('checking addExtensionOnDarwin', async () => {
|
|
||||||
let darwin: string = await extensions.addExtension(
|
|
||||||
'xdebug, pcov',
|
|
||||||
'7.2',
|
|
||||||
'darwin'
|
|
||||||
);
|
|
||||||
expect(darwin).toContain('sudo pecl install xdebug');
|
|
||||||
expect(darwin).toContain('sudo pecl install pcov');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('pcov', '5.6', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install pcov');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('pcov', '7.2', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install pcov');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '5.6', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install xdebug-2.5.5');
|
|
||||||
|
|
||||||
darwin = await extensions.addExtension('xdebug', '7.2', 'darwin');
|
|
||||||
expect(darwin).toContain('sudo pecl install xdebug');
|
|
||||||
|
|
||||||
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');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
|
});
|
||||||
+72
-131
@@ -1,146 +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 extension_csv: string = process.env['extension-csv'] || '';
|
);
|
||||||
const ini_values_csv: string = process.env['ini-values-csv'] || '';
|
const ini_file: string = await utils.parseIniFile(
|
||||||
|
await utils.getInput('ini-file', false)
|
||||||
|
);
|
||||||
|
const extension_csv: string = process.env['extensions'] || '';
|
||||||
|
const ini_values_csv: string = process.env['ini-values'] || '';
|
||||||
const coverage_driver: string = process.env['coverage'] || '';
|
const coverage_driver: string = process.env['coverage'] || '';
|
||||||
|
const tools_csv: string = process.env['tools'] || '';
|
||||||
let script = 'initial script ' + filename + version + os_version;
|
let script = await utils.joins(filename, version, ini_file);
|
||||||
if (extension_csv) {
|
script += extension_csv ? ' install extensions' : '';
|
||||||
script += 'install extensions';
|
script += tools_csv ? ' add_tool' : '';
|
||||||
}
|
script += coverage_driver ? ' set coverage driver' : '';
|
||||||
if (ini_values_csv) {
|
script += ini_values_csv ? ' edit php.ini' : '';
|
||||||
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));
|
||||||
const version: string = process.env['php-version'] || '';
|
})
|
||||||
let script = '';
|
|
||||||
switch (os_version) {
|
|
||||||
case 'darwin':
|
|
||||||
script = await install.build(os_version + '.sh', version, os_version);
|
|
||||||
script += 'sh script.sh ' + version + ' ' + __dirname;
|
|
||||||
break;
|
|
||||||
case 'linux': {
|
|
||||||
const pecl: string = process.env['pecl'] || '';
|
|
||||||
script = await install.build(os_version + '.sh', version, os_version);
|
|
||||||
script += 'sh script.sh ' + version + ' ' + pecl + ' ' + __dirname;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'win32':
|
|
||||||
script = await install.build(os_version + '.sh', version, os_version);
|
|
||||||
script +=
|
|
||||||
'pwsh script.ps1 -version ' + version + ' -dir ' + __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,
|
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,
|
})
|
||||||
pecl: string
|
}));
|
||||||
): void {
|
|
||||||
process.env['php-version'] = version;
|
|
||||||
process.env['RUNNER_OS'] = os;
|
|
||||||
process.env['extension-csv'] = extension_csv;
|
|
||||||
process.env['ini-values-csv'] = ini_values_csv;
|
|
||||||
process.env['coverage'] = coverage_driver;
|
|
||||||
process.env['pecl'] = pecl;
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('Install', () => {
|
describe('Install', () => {
|
||||||
it('Test install on windows', async () => {
|
it.each`
|
||||||
setEnv('7.3', '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 -version 7.3 -dir ' + __dirname);
|
${'8'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 production'}
|
||||||
|
${'8.0'} | ${'darwin'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 development'}
|
||||||
setEnv('7.3', 'win32', 'a, b', 'a=b', 'x', '');
|
${'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('install extensions');
|
${'lowest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.1 none'}
|
||||||
expect(script).toContain('edit php.ini');
|
${'highest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.3 none'}
|
||||||
expect(script).toContain('set coverage driver');
|
${'nightly'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.4 none'}
|
||||||
expect(script).toContain('pwsh script.ps1 -version 7.3 -dir ' + __dirname);
|
${'7.0'} | ${'win32'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.0 production'}
|
||||||
});
|
${'7.3'} | ${'win32'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'pwsh win32.ps1 7.3 development'}
|
||||||
|
${'7.3'} | ${'win32'} | ${'a, b'} | ${'none'} | ${'a=b'} | ${'x'} | ${''} | ${'pwsh win32.ps1 7.3 none install extensions set coverage driver edit php.ini'}
|
||||||
it('Test install on linux', async () => {
|
`(
|
||||||
setEnv('7.3', 'linux', '', '', '', '');
|
'Test install on $os for $version with extensions=$extension_csv, ini_values=$ini_values_csv, coverage_driver=$coverage_driver, tools=$tools',
|
||||||
// @ts-ignore
|
async ({
|
||||||
let script: string = await install.run();
|
version,
|
||||||
expect(script).toContain('initial script');
|
os,
|
||||||
expect(script).toContain('sh script.sh 7.3 ');
|
extension_csv,
|
||||||
|
ini_file,
|
||||||
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'true');
|
ini_values_csv,
|
||||||
// @ts-ignore
|
coverage_driver,
|
||||||
script = await install.run();
|
tools,
|
||||||
expect(script).toContain('initial script');
|
output
|
||||||
expect(script).toContain('install extensions');
|
}) => {
|
||||||
expect(script).toContain('edit php.ini');
|
process.env['php-version'] = version.toString();
|
||||||
expect(script).toContain('set coverage driver');
|
process.env['RUNNER_OS'] = os;
|
||||||
expect(script).toContain('sh script.sh 7.3 true');
|
process.env['extensions'] = extension_csv;
|
||||||
|
process.env['ini-file'] = ini_file;
|
||||||
setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'true');
|
process.env['ini-values'] = ini_values_csv;
|
||||||
// @ts-ignore
|
process.env['coverage'] = coverage_driver;
|
||||||
script = await install.run();
|
process.env['tools'] = tools;
|
||||||
expect(script).toContain('initial script');
|
expect(await install.run()).toBe(output);
|
||||||
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 true');
|
|
||||||
});
|
|
||||||
|
|
||||||
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);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,936 @@
|
|||||||
|
import * as fs from 'fs';
|
||||||
|
import * as tools from '../src/tools';
|
||||||
|
import {ToolData, ToolInput} from '../src/tools';
|
||||||
|
|
||||||
|
function getData(data: Partial<ToolData>): ToolData {
|
||||||
|
const tool = data.tool || 'tool';
|
||||||
|
const version = data.version || '';
|
||||||
|
return {
|
||||||
|
tool,
|
||||||
|
version,
|
||||||
|
url: data.url || '',
|
||||||
|
domain: data.domain || 'https://example.com',
|
||||||
|
extension: data.extension || '.phar',
|
||||||
|
os: data.os || 'linux',
|
||||||
|
php_version: data.php_version || '7.4',
|
||||||
|
release: data.release || [tool, version].join(':'),
|
||||||
|
repository: data.repository || '',
|
||||||
|
scope: data.scope || 'global',
|
||||||
|
type: data.type || 'phar',
|
||||||
|
fetch_latest: data.fetch_latest || 'false',
|
||||||
|
version_parameter: data.version_parameter || '-V',
|
||||||
|
version_prefix: data.version_prefix || '',
|
||||||
|
github: data.github || 'https://github.com',
|
||||||
|
prefix: data.prefix || 'releases',
|
||||||
|
verb: data.verb || 'download',
|
||||||
|
packagist: data.packagist || data.repository || '',
|
||||||
|
function: data.function,
|
||||||
|
alias: data.alias,
|
||||||
|
uri: data.uri,
|
||||||
|
error: data.error
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function unsetComposerAuthEnv(): void {
|
||||||
|
delete process.env['GITHUB_TOKEN'];
|
||||||
|
delete process.env['COMPOSER_TOKEN'];
|
||||||
|
delete process.env['COMPOSER_AUTH_JSON'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mock fetch.ts
|
||||||
|
*/
|
||||||
|
jest.mock('../src/fetch', () => ({
|
||||||
|
fetch: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(
|
||||||
|
async (url: string, token?: string): Promise<Record<string, string>> => {
|
||||||
|
if (url.includes('deployer')) {
|
||||||
|
return {
|
||||||
|
data: '[{"version": "1.2.3", "url": "https://deployer.org/releases/v1.2.3/deployer.phar"}]'
|
||||||
|
};
|
||||||
|
} else if (url.includes('atom') && !url.includes('no-')) {
|
||||||
|
return {
|
||||||
|
data: '"releases/tag/1.2.3", "releases/tag/3.2.1", "releases/tag/2.3.1"'
|
||||||
|
};
|
||||||
|
} else if (url.includes('no-data')) {
|
||||||
|
return {};
|
||||||
|
} else if (url.includes('no-release')) {
|
||||||
|
return {data: 'no-release'};
|
||||||
|
} else if (!token || token === 'valid_token') {
|
||||||
|
return {data: `[{"ref": "refs/tags/1.2.3", "url": "${url}"}]`};
|
||||||
|
} else if (token === 'beta_token') {
|
||||||
|
return {data: `[{"ref": "refs/tags/1.2.3beta1", "url": "${url}"}]`};
|
||||||
|
} else if (token === 'rc_token') {
|
||||||
|
return {
|
||||||
|
data: `[{"ref":"refs/tags/3.0.0RC1"},{"ref":"refs/tags/3.0.0RC2"}]`
|
||||||
|
};
|
||||||
|
} else if (token === 'non_semver_tags') {
|
||||||
|
return {
|
||||||
|
data: `[{"ref":"refs/tags/release-2025-09-18"},{"ref":"refs/tags/release-2025-09-17"}]`
|
||||||
|
};
|
||||||
|
} else if (token === 'undefined_ref') {
|
||||||
|
return {
|
||||||
|
data: `[{"url":"${url}"},{"ref":"refs/tags/v1.2.4","url":"${url}"}]`
|
||||||
|
};
|
||||||
|
} else if (token === 'multi_refs') {
|
||||||
|
return {
|
||||||
|
data: `[{"ref":"refs/tags/v1.2.3","url":"${url}"},{"ref":"refs/tags/1.2.4","url":"${url}"}]`
|
||||||
|
};
|
||||||
|
} else if (token === 'no_data') {
|
||||||
|
return {data: '[]'};
|
||||||
|
} else {
|
||||||
|
return {error: 'Invalid token'};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}));
|
||||||
|
|
||||||
|
jest.mock('../src/packagist', () => ({
|
||||||
|
search: jest
|
||||||
|
.fn()
|
||||||
|
.mockImplementation(
|
||||||
|
async (
|
||||||
|
package_name: string,
|
||||||
|
php_version: string
|
||||||
|
): Promise<string | null> => {
|
||||||
|
if (package_name === 'phpunit/phpunit') {
|
||||||
|
return php_version + '.0';
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('Tools tests', () => {
|
||||||
|
it.each`
|
||||||
|
token | version
|
||||||
|
${'invalid_token'} | ${'1.2'}
|
||||||
|
${'valid_token'} | ${'1.2.3'}
|
||||||
|
${'beta_token'} | ${'1.2.3beta1'}
|
||||||
|
${'undefined_ref'} | ${'1.2.4'}
|
||||||
|
${'multi_refs'} | ${'1.2.4'}
|
||||||
|
${'non_semver_tags'} | ${'release-2025-09-18'}
|
||||||
|
${''} | ${'1.2.3'}
|
||||||
|
`('checking getSemverVersion: $token', async ({token, version}) => {
|
||||||
|
process.env['GITHUB_TOKEN'] = token;
|
||||||
|
expect(
|
||||||
|
await tools.getSemverVersion(getData({tool: 'tool', version: '1.2'}))
|
||||||
|
).toBe(version);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking getSemverVersion triggers ?? fallback via Map#get mock', async () => {
|
||||||
|
process.env['GITHUB_TOKEN'] = 'rc_token';
|
||||||
|
const spy = jest
|
||||||
|
.spyOn(Map.prototype as Map<string, string>, 'get')
|
||||||
|
.mockImplementation(function (
|
||||||
|
this: Map<string, string>,
|
||||||
|
key: string
|
||||||
|
): string | undefined {
|
||||||
|
if (key === '3.0.0-RC2') {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return Map.prototype.get.call(this, key);
|
||||||
|
});
|
||||||
|
const result = await tools.getSemverVersion(
|
||||||
|
getData({tool: 'tool', version: '3.0.0'})
|
||||||
|
);
|
||||||
|
expect(result).toBe('3.0.0-RC2');
|
||||||
|
spy.mockRestore();
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
tool | fetch_latest | version
|
||||||
|
${'tool'} | ${'true'} | ${'3.2.1'}
|
||||||
|
${'tool-no-data'} | ${'true'} | ${'latest'}
|
||||||
|
${'tool-no-release'} | ${'true'} | ${'latest'}
|
||||||
|
${'tool'} | ${'false'} | ${'latest'}
|
||||||
|
`(
|
||||||
|
'checking getLatestVersion: $tool, $fetch_latest, $version',
|
||||||
|
async ({tool, fetch_latest, version}) => {
|
||||||
|
expect(
|
||||||
|
await tools.getLatestVersion(
|
||||||
|
getData({
|
||||||
|
tool: tool,
|
||||||
|
repository: 'user/' + tool,
|
||||||
|
fetch_latest: fetch_latest
|
||||||
|
})
|
||||||
|
)
|
||||||
|
).toBe(version);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it('checking getLatestVersion with fetch_latest=true but no repository', async () => {
|
||||||
|
expect(
|
||||||
|
await tools.getLatestVersion(
|
||||||
|
getData({
|
||||||
|
tool: 'tool',
|
||||||
|
repository: '',
|
||||||
|
fetch_latest: 'true'
|
||||||
|
})
|
||||||
|
)
|
||||||
|
).toBe('latest');
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | tool | type | expected
|
||||||
|
${'latest'} | ${'tool'} | ${'phar'} | ${'latest'}
|
||||||
|
${'1'} | ${'composer'} | ${'phar'} | ${'1'}
|
||||||
|
${'1.2'} | ${'tool'} | ${'composer'} | ${'1.2.*'}
|
||||||
|
${'^1.2.3'} | ${'tool'} | ${'phar'} | ${'1.2.3'}
|
||||||
|
${'>=1.2.3'} | ${'tool'} | ${'phar'} | ${'1.2.3'}
|
||||||
|
${'>1.2.3'} | ${'tool'} | ${'phar'} | ${'1.2.3'}
|
||||||
|
${'1.2.3-ALPHA'} | ${'tool'} | ${'phar'} | ${'1.2.3-ALPHA'}
|
||||||
|
${'1.2.3-alpha'} | ${'tool'} | ${'phar'} | ${'1.2.3-alpha'}
|
||||||
|
${'1.2.3-beta'} | ${'tool'} | ${'phar'} | ${'1.2.3-beta'}
|
||||||
|
${'1.2.3-rc'} | ${'tool'} | ${'phar'} | ${'1.2.3-rc'}
|
||||||
|
${'1.2.3-dev'} | ${'tool'} | ${'phar'} | ${'1.2.3-dev'}
|
||||||
|
${'1.2.3-alpha1'} | ${'tool'} | ${'phar'} | ${'1.2.3-alpha1'}
|
||||||
|
${'1.2.3-alpha.1'} | ${'tool'} | ${'phar'} | ${'1.2.3-alpha.1'}
|
||||||
|
${'1.>=0'} | ${'tool'} | ${'phar'} | ${'1.0'}
|
||||||
|
`(
|
||||||
|
'checking getVersion: $version, $tool, $type',
|
||||||
|
async ({version, tool, type, expected}) => {
|
||||||
|
expect(
|
||||||
|
await tools.getVersion(
|
||||||
|
version,
|
||||||
|
getData({tool: tool, version: version, type: type})
|
||||||
|
)
|
||||||
|
).toBe(expected);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
input | expected
|
||||||
|
${'tool'} | ${'tool'}
|
||||||
|
${'alias:1.2.3'} | ${'tool:1.2.3'}
|
||||||
|
${'tool:1.2.3'} | ${'tool:1.2.3'}
|
||||||
|
${'tool:^1.2.3'} | ${'tool:^1.2.3'}
|
||||||
|
${'tool:>=1.2.3'} | ${'tool:>=1.2.3'}
|
||||||
|
${'tool:>1.2.3'} | ${'tool:>1.2.3'}
|
||||||
|
${'tool:1.2.3-ALPHA'} | ${'tool:1.2.3-ALPHA'}
|
||||||
|
${'tool:1.2.3-beta'} | ${'tool:1.2.3-beta'}
|
||||||
|
${'tool:1.2.3-rc'} | ${'tool:1.2.3-rc'}
|
||||||
|
${'tool:1.2.3-dev'} | ${'tool:1.2.3-dev'}
|
||||||
|
${'tool:1.2.3-alpha1'} | ${'tool:1.2.3-alpha1'}
|
||||||
|
${'tool:1.2.3-alpha.1'} | ${'tool:1.2.3-alpha.1'}
|
||||||
|
${'user/tool:^1.2.3'} | ${'tool:^1.2.3'}
|
||||||
|
`('checking getRelease: $input', async ({input, expected}) => {
|
||||||
|
expect(
|
||||||
|
await tools.getRelease(input, getData({tool: 'tool', version: 'latest'}))
|
||||||
|
).toBe(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
release | expected_release | checksum | error
|
||||||
|
${'tool:1.2.3'} | ${'tool:1.2.3'} | ${undefined} | ${undefined}
|
||||||
|
${'tool:1.2.3@sha256:' + 'a'.repeat(64)} | ${'tool:1.2.3'} | ${'sha256:' + 'a'.repeat(64)} | ${undefined}
|
||||||
|
${'tool:1.2.3@sha256:' + 'A'.repeat(64)} | ${'tool:1.2.3'} | ${'sha256:' + 'a'.repeat(64)} | ${undefined}
|
||||||
|
${'tool:1.2.3@SHA256:' + 'a'.repeat(64)} | ${'tool:1.2.3'} | ${'sha256:' + 'a'.repeat(64)} | ${undefined}
|
||||||
|
${'tool:1.2.3@sha512:' + 'b'.repeat(128)} | ${'tool:1.2.3'} | ${'sha512:' + 'b'.repeat(128)} | ${undefined}
|
||||||
|
${'composer:2.9.8@sha256:' + 'c'.repeat(64)} | ${'composer:2.9.8'} | ${'sha256:' + 'c'.repeat(64)} | ${undefined}
|
||||||
|
${'tool:1.2.3@sha256:xyz'} | ${'tool:1.2.3'} | ${undefined} | ${'Invalid sha256 checksum, expected 64 hexadecimal characters'}
|
||||||
|
${'tool:1.2.3@sha256:' + 'a'.repeat(63)} | ${'tool:1.2.3'} | ${undefined} | ${'Invalid sha256 checksum, expected 64 hexadecimal characters'}
|
||||||
|
${'tool:1.2.3@sha512:' + 'b'.repeat(64)} | ${'tool:1.2.3'} | ${undefined} | ${'Invalid sha512 checksum, expected 128 hexadecimal characters'}
|
||||||
|
${'tool:1.2.3@sha384:' + 'b'.repeat(96)} | ${'tool:1.2.3'} | ${undefined} | ${'Unsupported checksum algorithm sha384, expected sha256 or sha512'}
|
||||||
|
${'tool:1.2.3@md5:' + 'b'.repeat(32)} | ${'tool:1.2.3'} | ${undefined} | ${'Unsupported checksum algorithm md5, expected sha256 or sha512'}
|
||||||
|
${'tool:1.2.3@sha256' + 'a'.repeat(64)} | ${'tool:1.2.3'} | ${undefined} | ${'Invalid checksum syntax, expected @sha256:<hash> or @sha512:<hash>'}
|
||||||
|
${'tool:1.0@dev'} | ${'tool:1.0@dev'} | ${undefined} | ${undefined}
|
||||||
|
`(
|
||||||
|
'checking extractChecksum: $release',
|
||||||
|
({release, expected_release, checksum, error}) => {
|
||||||
|
expect(tools.extractChecksum(release)).toStrictEqual({
|
||||||
|
release: expected_release,
|
||||||
|
...(checksum !== undefined && {checksum}),
|
||||||
|
...(error !== undefined && {error})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
input_list | filtered_list
|
||||||
|
${'a, b'} | ${'composer, a, b'}
|
||||||
|
${'a, b, composer'} | ${'composer, a, b'}
|
||||||
|
${'a, b, composer:1.2.3'} | ${'composer:1.2.3, a, b'}
|
||||||
|
${'a, b, composer:v1.2.3'} | ${'composer:1.2.3, a, b'}
|
||||||
|
${'a, b, composer:snapshot'} | ${'composer:snapshot, a, b'}
|
||||||
|
${'a, b, composer:preview'} | ${'composer:preview, a, b'}
|
||||||
|
${'a, b, composer:1'} | ${'composer:1, a, b'}
|
||||||
|
${'a, b, composer:2'} | ${'composer:2, a, b'}
|
||||||
|
${'a, b, composer:v1'} | ${'composer:1, a, b'}
|
||||||
|
${'a, b, composer:v2'} | ${'composer:2, a, b'}
|
||||||
|
${'a, b, composer:2.7.1@sha256:' + 'a'.repeat(64)} | ${'composer:2.7.1@sha256:' + 'a'.repeat(64) + ', a, b'}
|
||||||
|
${'a, b, composer:v2.7.1@sha256:' + 'a'.repeat(64)} | ${'composer:2.7.1@sha256:' + 'a'.repeat(64) + ', a, b'}
|
||||||
|
${'a, b, composer:2.7.1@SHA256:' + 'a'.repeat(64)} | ${'composer:2.7.1@SHA256:' + 'a'.repeat(64) + ', a, b'}
|
||||||
|
${'a, b, composer:2.7.1@sha384:' + 'a'.repeat(96)} | ${'composer:2.7.1@sha384:' + 'a'.repeat(96) + ', a, b'}
|
||||||
|
${'a, b, composer:2.7.1@md5:' + 'a'.repeat(32)} | ${'composer:2.7.1@md5:' + 'a'.repeat(32) + ', a, b'}
|
||||||
|
${'a, b, composer:2.7.1@sha256' + 'a'.repeat(64)} | ${'composer:2.7.1@sha256' + 'a'.repeat(64) + ', a, b'}
|
||||||
|
${'a, b, composer@sha256:' + 'a'.repeat(64)} | ${'composer@sha256:' + 'a'.repeat(64) + ', a, b'}
|
||||||
|
`('checking filterList $input_list', async ({input_list, filtered_list}) => {
|
||||||
|
expect(await tools.filterList(input_list.split(', '))).toStrictEqual(
|
||||||
|
filtered_list.split(', ')
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | version_prefix | url_suffix
|
||||||
|
${'latest'} | ${'v'} | ${'latest/download/tool.phar'}
|
||||||
|
${'1.2.3'} | ${'v'} | ${'download/v1.2.3/tool.phar'}
|
||||||
|
${'1.2.3'} | ${''} | ${'download/1.2.3/tool.phar'}
|
||||||
|
`(
|
||||||
|
'checking getUrl: $version_prefix$version',
|
||||||
|
async ({version, version_prefix, url_suffix}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'tool',
|
||||||
|
version: version,
|
||||||
|
version_prefix: version_prefix
|
||||||
|
});
|
||||||
|
expect(await tools.getUrl(data)).toContain(url_suffix);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it('checking getUrl handles undefined version without double slash', async () => {
|
||||||
|
const data: ToolInput = {
|
||||||
|
...getData({
|
||||||
|
tool: 'cs2pr',
|
||||||
|
repository: 'staabm/annotate-pull-request-from-checkstyle',
|
||||||
|
domain: 'https://github.com'
|
||||||
|
}),
|
||||||
|
version: undefined
|
||||||
|
};
|
||||||
|
data.extension = '';
|
||||||
|
expect(await tools.getUrl(data)).toBe(
|
||||||
|
'https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | version_prefix | url
|
||||||
|
${'latest'} | ${''} | ${'https://example.com/tool.phar'}
|
||||||
|
${'1.2.3'} | ${'v'} | ${'https://example.com/tool-v1.2.3.phar'}
|
||||||
|
`(
|
||||||
|
'checking getPharUrl: $version_prefix$version',
|
||||||
|
async ({version, version_prefix, url}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'tool',
|
||||||
|
version: version,
|
||||||
|
version_prefix: version_prefix
|
||||||
|
});
|
||||||
|
expect(await tools.getPharUrl(data)).toBe(url);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
os | script
|
||||||
|
${'linux'} | ${'add_tool https://example.com/tool.phar tool "-v"'}
|
||||||
|
${'darwin'} | ${'add_tool https://example.com/tool.phar tool "-v"'}
|
||||||
|
${'win32'} | ${'Add-Tool https://example.com/tool.phar tool "-v"'}
|
||||||
|
${'openbsd'} | ${'Platform openbsd is not supported'}
|
||||||
|
`('checking addArchive: $os', async ({os, script}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'tool',
|
||||||
|
version: 'latest',
|
||||||
|
version_parameter: JSON.stringify('-v'),
|
||||||
|
os: os,
|
||||||
|
url: 'https://example.com/tool.phar'
|
||||||
|
});
|
||||||
|
expect(await tools.addArchive(data)).toContain(script);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
os | script
|
||||||
|
${'linux'} | ${'add_tool https://example.com/tool.phar tool "-v" sha256:' + 'a'.repeat(64)}
|
||||||
|
${'darwin'} | ${'add_tool https://example.com/tool.phar tool "-v" sha256:' + 'a'.repeat(64)}
|
||||||
|
${'win32'} | ${'Add-Tool https://example.com/tool.phar tool "-v" sha256:' + 'a'.repeat(64)}
|
||||||
|
`('checking addArchive with checksum: $os', async ({os, script}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'tool',
|
||||||
|
version: '1.2.3',
|
||||||
|
version_parameter: JSON.stringify('-v'),
|
||||||
|
os: os,
|
||||||
|
url: 'https://example.com/tool.phar'
|
||||||
|
});
|
||||||
|
data.checksum = 'sha256:' + 'a'.repeat(64);
|
||||||
|
expect(await tools.addArchive(data)).toContain(script);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
os | release | scope | script
|
||||||
|
${'linux'} | ${'tool:1.2.3'} | ${'global'} | ${'add_composer_tool tool tool:1.2.3 user/ global'}
|
||||||
|
${'darwin'} | ${'tool:1.2.3'} | ${'scoped'} | ${'add_composer_tool tool tool:1.2.3 user/ scoped'}
|
||||||
|
${'win32'} | ${'tool:1.2.3'} | ${'scoped'} | ${'Add-ComposerTool tool tool:1.2.3 user/ scoped'}
|
||||||
|
${'linux'} | ${'tool:>=1.2'} | ${'global'} | ${'add_composer_tool tool "tool:>=1.2" user/ global'}
|
||||||
|
${'win32'} | ${'tool:>=1.2'} | ${'global'} | ${'Add-ComposerTool tool "tool:>=1.2" user/ global'}
|
||||||
|
${'linux'} | ${'tool:1.*'} | ${'global'} | ${'add_composer_tool tool "tool:1.*" user/ global'}
|
||||||
|
${'linux'} | ${'psalm:^5||^6'} | ${'global'} | ${'add_composer_tool tool "psalm:^5||^6" user/ global'}
|
||||||
|
${'linux'} | ${'psalm:>=5,<6'} | ${'global'} | ${'add_composer_tool tool "psalm:>=5,<6" user/ global'}
|
||||||
|
${'openbsd'} | ${'tool:1.2.3'} | ${'global'} | ${'Platform openbsd is not supported'}
|
||||||
|
`(
|
||||||
|
'checking addPackage: $os, $release',
|
||||||
|
async ({os, release, scope, script}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'tool',
|
||||||
|
version: '1.2.3',
|
||||||
|
repository: 'user/tool',
|
||||||
|
os,
|
||||||
|
scope
|
||||||
|
});
|
||||||
|
data['release'] = release;
|
||||||
|
expect(await tools.addPackage(data)).toContain(script);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | php_version | os | script
|
||||||
|
${'latest'} | ${'8.0'} | ${'linux'} | ${'add_tool https://github.com/phar-io/phive/releases/download/3.2.1/phive-3.2.1.phar phive'}
|
||||||
|
${'1.2.3'} | ${'8.0'} | ${'darwin'} | ${'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive'}
|
||||||
|
${'1.2.3'} | ${'7.4'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.15.3/phive-0.15.3.phar phive'}
|
||||||
|
${'1.2.3'} | ${'7.2'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.14.5/phive-0.14.5.phar phive'}
|
||||||
|
${'1.2.3'} | ${'7.1'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.5/phive-0.13.5.phar phive'}
|
||||||
|
${'latest'} | ${'5.6'} | ${'win32'} | ${'Add-Tool https://github.com/phar-io/phive/releases/download/0.12.1/phive-0.12.1.phar phive'}
|
||||||
|
${'latest'} | ${'5.5'} | ${'win32'} | ${'Phive is not supported on PHP 5.5'}
|
||||||
|
`(
|
||||||
|
'checking addPhive: $version, $php_version, $os',
|
||||||
|
async ({version, php_version, os, script}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'phive',
|
||||||
|
repository: 'phar-io/phive',
|
||||||
|
version_parameter: 'status',
|
||||||
|
version: version,
|
||||||
|
php_version: php_version,
|
||||||
|
os: os
|
||||||
|
});
|
||||||
|
script = await tools.addPhive(data);
|
||||||
|
expect(script).toContain(script);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
os | version | php_version | url
|
||||||
|
${'linux'} | ${'latest'} | ${'8.1'} | ${'https://get.blackfire.io/blackfire-player.phar'}
|
||||||
|
${'linux'} | ${'1.2.3'} | ${'7.4'} | ${'https://get.blackfire.io/blackfire-player-v1.2.3.phar'}
|
||||||
|
${'linux'} | ${'latest'} | ${'7.4'} | ${'https://get.blackfire.io/blackfire-player-v1.22.0.phar'}
|
||||||
|
${'linux'} | ${'latest'} | ${'5.5'} | ${'https://get.blackfire.io/blackfire-player-v1.9.3.phar'}
|
||||||
|
${'linux'} | ${'latest'} | ${'7.0'} | ${'https://get.blackfire.io/blackfire-player-v1.9.3.phar'}
|
||||||
|
${'win32'} | ${'latest'} | ${'7.0'} | ${'blackfire-player is not a windows tool'}
|
||||||
|
`(
|
||||||
|
'checking addBlackfirePlayer: $os, $version, $php_version',
|
||||||
|
async ({os, version, php_version, url}) => {
|
||||||
|
const data = getData({
|
||||||
|
os: os,
|
||||||
|
tool: 'blackfire-player',
|
||||||
|
domain: 'https://get.blackfire.io',
|
||||||
|
version_prefix: 'v',
|
||||||
|
version: version,
|
||||||
|
php_version: php_version
|
||||||
|
});
|
||||||
|
expect(await tools.addBlackfirePlayer(data)).toContain(url);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | url
|
||||||
|
${'latest'} | ${'https://deployer.org/deployer.phar'}
|
||||||
|
${'1.2.3'} | ${'https://deployer.org/releases/v1.2.3/deployer.phar'}
|
||||||
|
${'3.2.1'} | ${'Version missing in deployer manifest'}
|
||||||
|
`('checking addDeployer: $version', async ({version, url}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'deployer',
|
||||||
|
domain: 'https://deployer.org',
|
||||||
|
version: version
|
||||||
|
});
|
||||||
|
expect(await tools.addDeployer(data)).toContain(url);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | php_version | no_tool_cache | cache_url | source_url
|
||||||
|
${'latest'} | ${'7.4'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||||
|
${'stable'} | ${'7.4'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||||
|
${'snapshot'} | ${'7.4'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar'} | ${'https://getcomposer.org/composer.phar'}
|
||||||
|
${'preview'} | ${'7.4'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar'} | ${'https://getcomposer.org/composer-preview.phar'}
|
||||||
|
${'1'} | ${'7.4'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
|
||||||
|
${'2'} | ${'7.4'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-2.phar'} | ${'https://getcomposer.org/composer-2.phar'}
|
||||||
|
${'latest'} | ${'7.4'} | ${'true'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||||
|
${'stable'} | ${'7.4'} | ${'true'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||||
|
${'snapshot'} | ${'7.4'} | ${'true'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-snapshot.phar'} | ${'https://getcomposer.org/composer.phar'}
|
||||||
|
${'preview'} | ${'7.4'} | ${'true'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-preview.phar'} | ${'https://getcomposer.org/composer-preview.phar'}
|
||||||
|
${'1'} | ${'7.4'} | ${'false'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
|
||||||
|
${'2'} | ${'7.4'} | ${'false'} | ${'https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-2.phar'} | ${'https://getcomposer.org/composer-2.phar'}
|
||||||
|
${'latest'} | ${'7.4'} | ${'true'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||||
|
${'stable'} | ${'7.4'} | ${'true'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||||
|
${'snapshot'} | ${'7.4'} | ${'true'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-snapshot.phar'} | ${'https://getcomposer.org/composer.phar'}
|
||||||
|
${'preview'} | ${'7.4'} | ${'true'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-preview.phar'} | ${'https://getcomposer.org/composer-preview.phar'}
|
||||||
|
${'1'} | ${'7.4'} | ${'false'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
|
||||||
|
${'2'} | ${'7.4'} | ${'false'} | ${'https://artifacts.setup-php.com/composer/composer-7.4-2.phar'} | ${'https://getcomposer.org/composer-2.phar'}
|
||||||
|
${'latest'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-stable.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
|
||||||
|
${'stable'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-stable.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
|
||||||
|
${'snapshot'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-snapshot.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
|
||||||
|
${'preview'} | ${'7.1'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-preview.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
|
||||||
|
${'1'} | ${'7.1'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
|
||||||
|
${'2'} | ${'7.1'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.1-2.phar'} | ${'https://getcomposer.org/download/latest-2.2.x/composer.phar'}
|
||||||
|
${'1.2.3'} | ${'7.4'} | ${'false'} | ${'https://github.com/composer/composer/releases/download/1.2.3/composer.phar'} | ${'https://getcomposer.org/download/1.2.3/composer.phar'}
|
||||||
|
${'1.2.3-RC1'} | ${'7.4'} | ${'false'} | ${'https://github.com/composer/composer/releases/download/1.2.3-RC1/composer.phar'} | ${'https://getcomposer.org/download/1.2.3-RC1/composer.phar'}
|
||||||
|
`(
|
||||||
|
'checking addComposer: $version, $php_version, $no_tool_cache',
|
||||||
|
async ({version, php_version, no_tool_cache, cache_url, source_url}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'composer',
|
||||||
|
php_version: php_version,
|
||||||
|
domain: 'https://getcomposer.org',
|
||||||
|
repository: 'composer/composer',
|
||||||
|
version: version
|
||||||
|
});
|
||||||
|
process.env['no_tools_cache'] = no_tool_cache;
|
||||||
|
expect(await tools.addComposer(data)).toContain(source_url);
|
||||||
|
if (no_tool_cache !== 'true') {
|
||||||
|
expect(await tools.addComposer(data)).toContain(cache_url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | affected
|
||||||
|
${'1'} | ${false}
|
||||||
|
${'1.0.0-alpha1'} | ${true}
|
||||||
|
${'1.0.0-alpha2'} | ${true}
|
||||||
|
${'1.0.0-alpha3'} | ${true}
|
||||||
|
${'1.0.0-alpha4'} | ${true}
|
||||||
|
${'1.0.0-alpha5'} | ${true}
|
||||||
|
${'1.0.0-alpha6'} | ${true}
|
||||||
|
${'1.0.0-alpha7'} | ${true}
|
||||||
|
${'1.0.0-alpha8'} | ${true}
|
||||||
|
${'1.0.0-alpha9'} | ${true}
|
||||||
|
${'1.0.0-alpha10'} | ${true}
|
||||||
|
${'1.0.0-alpha11'} | ${true}
|
||||||
|
${'1.0.0-beta1'} | ${true}
|
||||||
|
${'1.0.0-beta2'} | ${true}
|
||||||
|
${'1.0.0'} | ${true}
|
||||||
|
${'1.10.27'} | ${true}
|
||||||
|
${'1.10.28'} | ${false}
|
||||||
|
${'2.0.0-alpha1'} | ${true}
|
||||||
|
${'2.0.0-alpha2'} | ${true}
|
||||||
|
${'2.0.0-alpha3'} | ${true}
|
||||||
|
${'2.0.0-RC1'} | ${true}
|
||||||
|
${'2.0.0-RC2'} | ${true}
|
||||||
|
${'2.2.27'} | ${true}
|
||||||
|
${'2.2.28'} | ${false}
|
||||||
|
${'2.3.0-RC1'} | ${true}
|
||||||
|
${'2.3.0-RC2'} | ${true}
|
||||||
|
${'2.9.7'} | ${true}
|
||||||
|
${'2.9.7-RC1'} | ${true}
|
||||||
|
${'2.9.8'} | ${false}
|
||||||
|
${'2.9.0RC1'} | ${false}
|
||||||
|
${'2.9.x-dev'} | ${false}
|
||||||
|
`('checking affected composer version: $version', ({version, affected}) => {
|
||||||
|
expect(tools.skipGitHubAuthForComposerVersion(version)).toBe(affected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking affected composer version with CRLF ranges', async () => {
|
||||||
|
let affected = false;
|
||||||
|
let fixed = true;
|
||||||
|
await jest.isolateModulesAsync(async () => {
|
||||||
|
jest.doMock('fs', () => ({
|
||||||
|
...jest.requireActual('fs'),
|
||||||
|
readFileSync: (
|
||||||
|
filePath: fs.PathOrFileDescriptor,
|
||||||
|
options?: unknown
|
||||||
|
) => {
|
||||||
|
if (String(filePath).includes('composer-gh-auth-no-op')) {
|
||||||
|
return '1.0.0-0 1.10.28\r\n2.0.0-0 2.2.28\r\n2.3.0-0 2.9.8';
|
||||||
|
}
|
||||||
|
return (jest.requireActual('fs') as typeof fs).readFileSync(
|
||||||
|
filePath,
|
||||||
|
options as fs.ObjectEncodingOptions & {flag?: string}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
const isolatedTools = jest.requireActual<typeof tools>('../src/tools');
|
||||||
|
affected = isolatedTools.skipGitHubAuthForComposerVersion('2.9.7');
|
||||||
|
fixed = isolatedTools.skipGitHubAuthForComposerVersion('2.9.8');
|
||||||
|
});
|
||||||
|
expect(affected).toBe(true);
|
||||||
|
expect(fixed).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
auth_json | expected
|
||||||
|
${'{"github-oauth":{"github.com":"ghs_new-token"},"http-basic":{"repo.example":{"username":"u","password":"p"}}}'} | ${'{"http-basic":{"repo.example":{"username":"u","password":"p"}}}'}
|
||||||
|
${'{"github-oauth":{"github.com":"ghs_new-token"}}'} | ${undefined}
|
||||||
|
${'{"http-basic":{"repo.example":{"username":"u","password":"p"}}}'} | ${'{"http-basic":{"repo.example":{"username":"u","password":"p"}}}'}
|
||||||
|
${'{"nested":{"github-oauth":{"github.com":"ghs_new-token"}}}'} | ${'{"nested":{"github-oauth":{"github.com":"ghs_new-token"}}}'}
|
||||||
|
${'{"github-oauth":'} | ${'{"github-oauth":'}
|
||||||
|
`('cleaning composer auth json', ({auth_json, expected}) => {
|
||||||
|
unsetComposerAuthEnv();
|
||||||
|
process.env['COMPOSER_AUTH_JSON'] = auth_json;
|
||||||
|
tools.cleanComposerAuthJson();
|
||||||
|
expect(process.env['COMPOSER_AUTH_JSON']).toBe(expected);
|
||||||
|
unsetComposerAuthEnv();
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | os | envs | skip_github_auth
|
||||||
|
${'latest'} | ${'linux'} | ${{GITHUB_TOKEN: 'ghs_token'}} | ${false}
|
||||||
|
${'1'} | ${'linux'} | ${{GITHUB_TOKEN: 'ghs_token'}} | ${false}
|
||||||
|
${'2'} | ${'linux'} | ${{GITHUB_TOKEN: 'ghs_token'}} | ${false}
|
||||||
|
${'2.9.7'} | ${'linux'} | ${{}} | ${true}
|
||||||
|
${'2.9.7'} | ${'linux'} | ${{GITHUB_TOKEN: 'ghs_token'}} | ${true}
|
||||||
|
${'2.9.7'} | ${'linux'} | ${{COMPOSER_TOKEN: 'ghs_token'}} | ${true}
|
||||||
|
${'2.9.7'} | ${'linux'} | ${{COMPOSER_AUTH_JSON: '{"github-oauth":{"github.com":"ghs_new-token"}}'}} | ${true}
|
||||||
|
${'2.9.7'} | ${'linux'} | ${{COMPOSER_AUTH_JSON: '{"http-basic":{"repo.example":{"username":"u","password":"p"}}}'}} | ${true}
|
||||||
|
${'2.9.8'} | ${'linux'} | ${{GITHUB_TOKEN: 'ghs_token'}} | ${false}
|
||||||
|
${'2.9.7'} | ${'win32'} | ${{GITHUB_TOKEN: 'ghs_token'}} | ${true}
|
||||||
|
`(
|
||||||
|
'checking composer github auth skip flag: $version, $os',
|
||||||
|
async ({version, os, envs, skip_github_auth}) => {
|
||||||
|
unsetComposerAuthEnv();
|
||||||
|
Object.assign(process.env, envs);
|
||||||
|
const data = getData({
|
||||||
|
tool: 'composer',
|
||||||
|
os: os,
|
||||||
|
php_version: '7.4',
|
||||||
|
domain: 'https://getcomposer.org',
|
||||||
|
repository: 'composer/composer',
|
||||||
|
version: version
|
||||||
|
});
|
||||||
|
const script = await tools.addComposer(data);
|
||||||
|
expect(script).toContain(
|
||||||
|
`composer ${version}${skip_github_auth ? ' true' : ''}`
|
||||||
|
);
|
||||||
|
unsetComposerAuthEnv();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | uri
|
||||||
|
${'latest'} | ${'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true'}
|
||||||
|
${'1.2.3'} | ${'wp-cli/wp-cli/releases/download/v1.2.3/wp-cli-1.2.3.phar'}
|
||||||
|
`('checking addWPCLI: $version', async ({version, uri}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'wp-cli',
|
||||||
|
repository: 'wp-cli/wp-cli',
|
||||||
|
php_version: '7.4',
|
||||||
|
version_prefix: 'v',
|
||||||
|
version: version
|
||||||
|
});
|
||||||
|
expect(await tools.addWPCLI(data)).toContain(uri);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
tool | os | script
|
||||||
|
${'phpize'} | ${'linux'} | ${'add_devtools phpize'}
|
||||||
|
${'php-config'} | ${'linux'} | ${'add_devtools php-config'}
|
||||||
|
${'phpize'} | ${'darwin'} | ${'add_devtools phpize'}
|
||||||
|
${'php-config'} | ${'darwin'} | ${'add_devtools php-config'}
|
||||||
|
${'phpize'} | ${'win32'} | ${'Add-Log "$tick" "phpize" "phpize is not a windows tool"'}
|
||||||
|
${'php-config'} | ${'win32'} | ${'Add-Log "$tick" "php-config" "php-config is not a windows tool"'}
|
||||||
|
${'phpize'} | ${'openbsd'} | ${'Platform openbsd is not supported'}
|
||||||
|
`('checking addDevTools: $tool, $os', async ({tool, os, script}) => {
|
||||||
|
const data = getData({
|
||||||
|
version: '7.4',
|
||||||
|
tool: tool,
|
||||||
|
os: os
|
||||||
|
});
|
||||||
|
expect(await tools.addDevTools(data)).toContain(script);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[
|
||||||
|
'blackfire, blackfire-player, box, churn, cloud-cli, cpx, cs2pr, flex, grpc_php_plugin, mago, name-collision-detector, parallel-lint, php-cs-fixer, php-scoper, phpDocumentor, phplint, phpstan, phpunit, pecl, phing, phinx, phinx:1.2.3, phive, phpunit-bridge, phpunit-polyfills, pint, php-config, phpize, protoc, symfony, vapor, wp, pie',
|
||||||
|
[
|
||||||
|
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://artifacts.setup-php.com/composer/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||||
|
'add_blackfire',
|
||||||
|
'add_tool https://get.blackfire.io/blackfire-player-v1.22.0.phar blackfire-player "-V"',
|
||||||
|
'add_tool https://github.com/box-project/box/releases/latest/download/box.phar box "--version"',
|
||||||
|
'add_tool https://github.com/bmitch/churn-php/releases/latest/download/churn.phar churn "-V"',
|
||||||
|
'add_composer_tool cloud-cli cloud-cli laravel/ scoped',
|
||||||
|
'add_tool https://github.com/laravel/cpx/releases/latest/download/cpx cpx "--version"',
|
||||||
|
'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"',
|
||||||
|
'add_composer_tool flex flex symfony/ global',
|
||||||
|
'add_grpc_php_plugin latest',
|
||||||
|
'add_mago',
|
||||||
|
'add_composer_tool name-collision-detector name-collision-detector shipmonk/ scoped',
|
||||||
|
'add_tool https://github.com/php-parallel-lint/PHP-Parallel-Lint/releases/latest/download/parallel-lint.phar parallel-lint "--version"',
|
||||||
|
'add_tool https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/releases/download/v3.2.1/php-cs-fixer.phar php-cs-fixer "-V"',
|
||||||
|
'add_tool https://github.com/humbug/php-scoper/releases/latest/download/php-scoper.phar php-scoper "--version"',
|
||||||
|
'add_tool https://github.com/phpDocumentor/phpDocumentor/releases/latest/download/phpDocumentor.phar phpDocumentor "--version"',
|
||||||
|
'add_composer_tool phplint phplint overtrue/',
|
||||||
|
'add_tool https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar phpstan "-V"',
|
||||||
|
'add_tool https://phar.phpunit.de/phpunit-7.4.0.phar,https://phar.phpunit.de/phpunit-7.phar phpunit "--version"',
|
||||||
|
'add_pecl',
|
||||||
|
'add_tool https://www.phing.info/get/phing-latest.phar phing "-v"',
|
||||||
|
'add_composer_tool phinx phinx robmorgan/ scoped',
|
||||||
|
'add_composer_tool phinx phinx:1.2.3 robmorgan/ scoped',
|
||||||
|
'add_tool https://github.com/phar-io/phive/releases/download/0.15.3/phive-0.15.3.phar phive "status"',
|
||||||
|
'add_composer_tool phpunit-bridge phpunit-bridge symfony/ global',
|
||||||
|
'add_composer_tool phpunit-polyfills phpunit-polyfills yoast/ global',
|
||||||
|
'add_tool https://github.com/laravel/pint/releases/latest/download/pint.phar pint "-V"',
|
||||||
|
'add_devtools php-config',
|
||||||
|
'add_devtools phpize',
|
||||||
|
'add_protoc latest',
|
||||||
|
'add_symfony latest',
|
||||||
|
'add_composer_tool vapor-cli vapor-cli laravel/ scoped',
|
||||||
|
'add_tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"',
|
||||||
|
'add_tool https://github.com/php/pie/releases/latest/download/pie.phar pie "-V"'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
])('checking addTools on linux', async (tools_csv, scripts) => {
|
||||||
|
const expected = await tools.addTools(tools_csv, '7.4', 'linux');
|
||||||
|
scripts.forEach(script => {
|
||||||
|
expect(expected).toContain(script);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[
|
||||||
|
'backward-compatibility-check, behat, blackfire, blackfire-player, churn, composer-dependency-analyser, composer-normalize, composer-require-checker, composer-unused, cpx:2.0.0, cs2pr:1.2.3, ecs, flex, grpc_php_plugin:1.2.3, infection, laravel-cloud, mago:0.26.1, name-collision-detector, phan, phan:1.2.3, phing:1.2.3, phinx, phive:1.2.3, php-config, phpcbf, phpcpd, phpcs, phpdoc, phpize, phpmd, phpspec, phpunit-bridge:5.6, phpunit-polyfills:1.0.1, protoc:v1.2.3, psalm, rector, symfony-cli, vapor-cli, wp-cli, pie',
|
||||||
|
[
|
||||||
|
'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://artifacts.setup-php.com/composer/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||||
|
'add_composer_tool behat behat behat/ scoped',
|
||||||
|
'add_blackfire',
|
||||||
|
'add_tool https://get.blackfire.io/blackfire-player-v1.22.0.phar blackfire-player "-V"',
|
||||||
|
'add_tool https://github.com/bmitch/churn-php/releases/latest/download/churn.phar churn "-V"',
|
||||||
|
'add_tool https://github.com/ergebnis/composer-normalize/releases/latest/download/composer-normalize.phar composer-normalize "diagnose"',
|
||||||
|
'add_composer_tool composer-dependency-analyser composer-dependency-analyser shipmonk/ scoped',
|
||||||
|
'add_composer_tool composer-require-checker composer-require-checker maglnet/ scoped',
|
||||||
|
'add_tool https://github.com/composer-unused/composer-unused/releases/latest/download/composer-unused.phar composer-unused "-V"',
|
||||||
|
'add_tool https://github.com/laravel/cpx/releases/download/v2.0.0/cpx cpx "--version"',
|
||||||
|
'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/download/1.2.3/cs2pr cs2pr "-V"',
|
||||||
|
'add_composer_tool flex flex symfony/ global',
|
||||||
|
'add_grpc_php_plugin 1.2.3',
|
||||||
|
'add_tool https://github.com/infection/infection/releases/latest/download/infection.phar infection "-V"',
|
||||||
|
'add_composer_tool cloud-cli cloud-cli laravel/ scoped',
|
||||||
|
'add_mago 0.26.1',
|
||||||
|
'add_composer_tool name-collision-detector name-collision-detector shipmonk/ scoped',
|
||||||
|
'add_tool https://github.com/phan/phan/releases/latest/download/phan.phar phan "-v"',
|
||||||
|
'add_tool https://github.com/phan/phan/releases/download/1.2.3/phan.phar phan "-v"',
|
||||||
|
'add_tool https://www.phing.info/get/phing-1.2.3.phar,https://github.com/phingofficial/phing/releases/download/1.2.3/phing-1.2.3.phar phing "-v"',
|
||||||
|
'add_composer_tool phinx phinx robmorgan/ scoped',
|
||||||
|
'add_tool https://github.com/phar-io/phive/releases/download/0.15.3/phive-0.15.3.phar phive',
|
||||||
|
'add_devtools php-config',
|
||||||
|
'add_tool https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/latest/download/phpcbf.phar phpcbf "--version"',
|
||||||
|
'add_tool https://phar.phpunit.de/phpcpd.phar phpcpd "--version"',
|
||||||
|
'add_tool https://github.com/PHPCSStandards/PHP_CodeSniffer/releases/latest/download/phpcs.phar phpcs "--version"',
|
||||||
|
'add_tool https://github.com/phpDocumentor/phpDocumentor/releases/latest/download/phpDocumentor.phar phpDocumentor "--version"',
|
||||||
|
'add_devtools phpize',
|
||||||
|
'add_tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd "--version"',
|
||||||
|
'add_tool https://github.com/phpspec/phpspec/releases/latest/download/phpspec.phar phpspec "-V"',
|
||||||
|
'add_composer_tool phpunit-bridge "phpunit-bridge:5.6.*" symfony/ global',
|
||||||
|
'add_composer_tool phpunit-polyfills phpunit-polyfills:1.0.1 yoast/ global',
|
||||||
|
'add_protoc 1.2.3',
|
||||||
|
'add_tool https://github.com/vimeo/psalm/releases/latest/download/psalm.phar psalm "-v"',
|
||||||
|
'add_composer_tool rector rector rector/ scoped',
|
||||||
|
'add_composer_tool backward-compatibility-check backward-compatibility-check roave/ scoped',
|
||||||
|
'add_symfony latest',
|
||||||
|
'add_composer_tool vapor-cli vapor-cli laravel/ scoped',
|
||||||
|
'add_tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"',
|
||||||
|
'add_composer_tool easy-coding-standard easy-coding-standard symplify/ scoped',
|
||||||
|
'add_tool https://github.com/php/pie/releases/latest/download/pie.phar pie "-V"'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
])('checking addTools on darwin', async (tools_csv, scripts) => {
|
||||||
|
const expected = await tools.addTools(tools_csv, '7.4', 'darwin');
|
||||||
|
scripts.forEach(script => {
|
||||||
|
expect(expected).toContain(script);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[
|
||||||
|
'blackfire, blackfire-player:1.2.3, cs2pr, churn, deployer, does_not_exist, flex, mago, name-collision-detector, phinx, phive:0.13.2, php-config, phpize, phpmd, simple-phpunit, symfony, wp, pie',
|
||||||
|
[
|
||||||
|
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://artifacts.setup-php.com/composer/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer',
|
||||||
|
'Add-Blackfire',
|
||||||
|
'blackfire-player is not a windows tool',
|
||||||
|
'Add-Tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"',
|
||||||
|
'Add-Tool https://github.com/bmitch/churn-php/releases/latest/download/churn.phar churn "-V"',
|
||||||
|
'Add-Tool https://deployer.org/deployer.phar deployer "-V"',
|
||||||
|
'Tool does_not_exist is not supported',
|
||||||
|
'Add-ComposerTool flex flex symfony/ global',
|
||||||
|
'Add-Mago',
|
||||||
|
'Add-ComposerTool name-collision-detector name-collision-detector shipmonk/ scoped',
|
||||||
|
'Add-ComposerTool phinx phinx robmorgan/ scoped',
|
||||||
|
'Add-Tool https://github.com/phar-io/phive/releases/download/0.15.3/phive-0.15.3.phar phive "status"',
|
||||||
|
'php-config is not a windows tool',
|
||||||
|
'phpize is not a windows tool',
|
||||||
|
'Add-Tool https://github.com/phpmd/phpmd/releases/latest/download/phpmd.phar phpmd "--version"',
|
||||||
|
'Add-ComposerTool phpunit-bridge phpunit-bridge symfony/ global',
|
||||||
|
'Add-Symfony',
|
||||||
|
'Add-Tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--version"',
|
||||||
|
'Add-Tool https://github.com/php/pie/releases/latest/download/pie.phar pie "-V"'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
])('checking addTools on Windows', async (tools_csv, scripts) => {
|
||||||
|
const expected = await tools.addTools(tools_csv, '7.4', 'win32');
|
||||||
|
scripts.forEach(script => {
|
||||||
|
expect(expected).toContain(script);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[
|
||||||
|
'composer:v1, codeception/codeception, prestissimo, hirak/prestissimo, composer-prefetcher, narrowspark/automatic-composer-prefetcher, phinx: 1.2, robmorgan/phinx: ^1.2, user/tool:1.2.3, user/tool:~1.2',
|
||||||
|
[
|
||||||
|
'Add-Tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://artifacts.setup-php.com/composer/composer-7.4-1.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer',
|
||||||
|
'Add-ComposerTool codeception codeception codeception/ global',
|
||||||
|
'Add-ComposerTool prestissimo prestissimo hirak/ global',
|
||||||
|
'Add-ComposerTool automatic-composer-prefetcher automatic-composer-prefetcher narrowspark/ global',
|
||||||
|
'Add-ComposerTool phinx "phinx:1.2.*" robmorgan/ scoped',
|
||||||
|
'Add-ComposerTool phinx phinx:^1.2 robmorgan/ global',
|
||||||
|
'Add-ComposerTool tool tool:1.2.3 user/ global',
|
||||||
|
'Add-ComposerTool tool tool:~1.2 user/ global'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
])(
|
||||||
|
'checking addTools with composer tool using user/tool as input',
|
||||||
|
async (tools_csv, scripts) => {
|
||||||
|
const expected = await tools.addTools(tools_csv, '7.4', 'win32');
|
||||||
|
scripts.forEach(script => {
|
||||||
|
expect(expected).toContain(script);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
version | os | uri
|
||||||
|
${'latest'} | ${'linux'} | ${'releases/latest/download/castor.linux-amd64.phar'}
|
||||||
|
${'0.5.1'} | ${'linux'} | ${'releases/download/v0.5.1/castor.linux-amd64.phar'}
|
||||||
|
${'latest'} | ${'darwin'} | ${'releases/latest/download/castor.darwin-amd64.phar'}
|
||||||
|
${'0.5.1'} | ${'darwin'} | ${'releases/download/v0.5.1/castor.darwin-amd64.phar'}
|
||||||
|
${'latest'} | ${'win32'} | ${'releases/latest/download/castor.windows-amd64.phar'}
|
||||||
|
${'0.5.1'} | ${'win32'} | ${'releases/download/v0.5.1/castor.windows-amd64.phar castor -V'}
|
||||||
|
${'latest'} | ${'openbsd'} | ${'Platform openbsd is not supported'}
|
||||||
|
`('checking addCastor: $version, $os', async ({version, os, uri}) => {
|
||||||
|
const data = getData({
|
||||||
|
tool: 'castor',
|
||||||
|
php_version: '8.1',
|
||||||
|
version_prefix: 'v',
|
||||||
|
version: version,
|
||||||
|
os: os
|
||||||
|
});
|
||||||
|
if (os === 'win32' && version === '0.5.1') {
|
||||||
|
fs.writeFileSync('castor.php', '');
|
||||||
|
expect(await tools.addCastor(data)).toContain(uri);
|
||||||
|
fs.unlinkSync('castor.php');
|
||||||
|
} else {
|
||||||
|
expect(await tools.addCastor(data)).toContain(uri);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
tools_csv | script
|
||||||
|
${'none'} | ${''}
|
||||||
|
${'none, phpunit'} | ${'\nstep_log "Setup Tools"\nadd_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar,https://artifacts.setup-php.com/composer/composer-7.4-stable.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-stable.phar,https://getcomposer.org/composer-stable.phar composer latest\n\nadd_tool https://phar.phpunit.de/phpunit-7.4.0.phar,https://phar.phpunit.de/phpunit-7.phar phpunit "--version"'}
|
||||||
|
${'composer:preview'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar,https://artifacts.setup-php.com/composer/composer-7.4-preview.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-preview.phar,https://getcomposer.org/composer-preview.phar composer preview'}
|
||||||
|
${'composer, composer:v1'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar,https://artifacts.setup-php.com/composer/composer-7.4-1.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-1.phar,https://getcomposer.org/composer-1.phar composer'}
|
||||||
|
${'composer:v1, composer:preview, composer:snapshot'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar,https://artifacts.setup-php.com/composer/composer-7.4-snapshot.phar,https://dl.cloudsmith.io/public/shivammathur/composer-cache/raw/files/composer-7.4-snapshot.phar,https://getcomposer.org/composer.phar composer snapshot'}
|
||||||
|
${'composer:2.9.7'} | ${'add_tool https://github.com/composer/composer/releases/download/2.9.7/composer.phar,https://getcomposer.org/download/2.9.7/composer.phar composer 2.9.7 true'}
|
||||||
|
`('checking composer setup: $tools_csv', async ({tools_csv, script}) => {
|
||||||
|
expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
tools_csv | os | script
|
||||||
|
${'phpunit:9.5.0@sha256:' + 'a'.repeat(64)} | ${'linux'} | ${'add_tool https://phar.phpunit.de/phpunit-9.5.0.phar,https://phar.phpunit.de/phpunit-9.phar phpunit "--version" sha256:' + 'a'.repeat(64)}
|
||||||
|
${'phpunit:9.5.0@sha256:' + 'a'.repeat(64)} | ${'win32'} | ${'Add-Tool https://phar.phpunit.de/phpunit-9.5.0.phar,https://phar.phpunit.de/phpunit-9.phar phpunit "--version" sha256:' + 'a'.repeat(64)}
|
||||||
|
${'composer:2.9.8@sha256:' + 'b'.repeat(64)} | ${'linux'} | ${'composer 2.9.8 sha256:' + 'b'.repeat(64)}
|
||||||
|
${'cs2pr:1.2.3@sha256:' + 'd'.repeat(64)} | ${'linux'} | ${'add_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/download/1.2.3/cs2pr cs2pr "-V" sha256:' + 'd'.repeat(64)}
|
||||||
|
${'phive:0.15.3@sha512:' + 'c'.repeat(128)} | ${'darwin'} | ${'add_tool https://github.com/phar-io/phive/releases/download/0.15.3/phive-0.15.3.phar phive "status" sha512:' + 'c'.repeat(128)}
|
||||||
|
${'phinx:1.2.3@sha256:' + 'a'.repeat(64)} | ${'linux'} | ${'add_log "$cross" "phinx" "Checksum verification is not supported for phinx"'}
|
||||||
|
${'pecl@sha256:' + 'a'.repeat(64)} | ${'linux'} | ${'add_log "$cross" "pecl" "Checksum verification is not supported for pecl"'}
|
||||||
|
${'phpunit:9.5.0@sha256:invalid'} | ${'linux'} | ${'add_log "$cross" "phpunit" "Invalid sha256 checksum, expected 64 hexadecimal characters"'}
|
||||||
|
${'composer:2.9.8@SHA256:' + 'b'.repeat(64)} | ${'linux'} | ${'composer 2.9.8 sha256:' + 'b'.repeat(64)}
|
||||||
|
${'composer:2.9.8@sha384:' + 'b'.repeat(96)} | ${'linux'} | ${'add_log "$cross" "composer" "Unsupported checksum algorithm sha384, expected sha256 or sha512"'}
|
||||||
|
${'composer:2.9.8@md5:' + 'b'.repeat(32)} | ${'linux'} | ${'add_log "$cross" "composer" "Unsupported checksum algorithm md5, expected sha256 or sha512"'}
|
||||||
|
${'composer:2.9.8@sha256' + 'b'.repeat(64)} | ${'linux'} | ${'add_log "$cross" "composer" "Invalid checksum syntax, expected @sha256:<hash> or @sha512:<hash>"'}
|
||||||
|
`(
|
||||||
|
'checking addTools with checksum: $tools_csv, $os',
|
||||||
|
async ({tools_csv, os, script}) => {
|
||||||
|
expect(await tools.addTools(tools_csv, '7.4', os)).toContain(script);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
type | tool_function | supported
|
||||||
|
${'phar'} | ${undefined} | ${true}
|
||||||
|
${'custom-function'} | ${undefined} | ${true}
|
||||||
|
${'custom-function'} | ${'composer'} | ${true}
|
||||||
|
${'custom-function'} | ${'pecl'} | ${false}
|
||||||
|
${'custom-function'} | ${'dev_tools'} | ${false}
|
||||||
|
${'composer'} | ${undefined} | ${false}
|
||||||
|
${'custom-package'} | ${undefined} | ${false}
|
||||||
|
`(
|
||||||
|
'checking supportsChecksum: $type, $tool_function',
|
||||||
|
async ({type, tool_function, supported}) => {
|
||||||
|
const data = getData({tool: 'tool', type: type});
|
||||||
|
data.function = tool_function;
|
||||||
|
expect(await tools.supportsChecksum(data)).toBe(supported);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
tools_csv | token | script
|
||||||
|
${'cs2pr:1.2'} | ${'invalid_token'} | ${'add_log "$cross" "cs2pr" "Invalid token"'}
|
||||||
|
${'phpunit:1.2'} | ${'invalid_token'} | ${'add_log "$cross" "phpunit" "Invalid token"'}
|
||||||
|
${'phpunit:0.1'} | ${'no_data'} | ${'add_log "$cross" "phpunit" "No version found with prefix 0.1."'}
|
||||||
|
`('checking error: $tools_csv', async ({tools_csv, token, script}) => {
|
||||||
|
process.env['GITHUB_TOKEN'] = token;
|
||||||
|
expect(await tools.addTools(tools_csv, '7.4', 'linux')).toContain(script);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking error when custom-function tool is missing function field', async () => {
|
||||||
|
const brokenToolsJson = JSON.stringify({
|
||||||
|
composer: {
|
||||||
|
type: 'custom-function',
|
||||||
|
domain: 'https://getcomposer.org',
|
||||||
|
repository: 'composer/composer',
|
||||||
|
function: 'composer'
|
||||||
|
},
|
||||||
|
'broken-tool': {
|
||||||
|
type: 'custom-function'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let result: string = '';
|
||||||
|
await jest.isolateModulesAsync(async () => {
|
||||||
|
jest.doMock('fs', () => ({
|
||||||
|
...jest.requireActual('fs'),
|
||||||
|
readFileSync: (
|
||||||
|
filePath: fs.PathOrFileDescriptor,
|
||||||
|
options?: unknown
|
||||||
|
) => {
|
||||||
|
if (String(filePath).includes('tools.json')) {
|
||||||
|
return brokenToolsJson;
|
||||||
|
}
|
||||||
|
return (jest.requireActual('fs') as typeof fs).readFileSync(
|
||||||
|
filePath,
|
||||||
|
options as fs.ObjectEncodingOptions & {flag?: string}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
const isolatedTools = jest.requireActual<typeof tools>('../src/tools');
|
||||||
|
result = await isolatedTools.addTools('broken-tool', '7.4', 'linux');
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(result).toContain(
|
||||||
|
'add_log "$cross" "broken-tool" "broken-tool has no function defined. Please report this issue."'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
tools_csv | php_version | resolved
|
||||||
|
${'phpunit'} | ${'8.2'} | ${'/phpunit-8.2.0.phar'}
|
||||||
|
${'phpunit'} | ${'8.1'} | ${'/phpunit-8.1.0.phar'}
|
||||||
|
${'phpunit'} | ${'8.0'} | ${'/phpunit-8.0.0.phar'}
|
||||||
|
${'phpunit'} | ${'7.3'} | ${'/phpunit-7.3.0.phar'}
|
||||||
|
${'phpunit'} | ${'7.2'} | ${'/phpunit-7.2.0.phar'}
|
||||||
|
${'phpunit'} | ${'7.1'} | ${'/phpunit-7.1.0.phar'}
|
||||||
|
${'phpunit'} | ${'7.0'} | ${'/phpunit-7.0.0.phar'}
|
||||||
|
`(
|
||||||
|
'checking error: $tools_csv',
|
||||||
|
async ({tools_csv, php_version, resolved}) => {
|
||||||
|
expect(await tools.addTools(tools_csv, php_version, 'linux')).toContain(
|
||||||
|
resolved
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
+301
-92
@@ -1,54 +1,97 @@
|
|||||||
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 getInput', async () => {
|
it('checking readEnv', async () => {
|
||||||
process.env['test'] = 'setup-php';
|
process.env['test'] = 'setup-php';
|
||||||
process.env['undefined'] = '';
|
process.env['test-hyphen'] = 'setup-php';
|
||||||
expect(await utils.getInput('test', false)).toBe('setup-php');
|
expect(await utils.readEnv('test')).toBe('setup-php');
|
||||||
expect(await utils.getInput('undefined', false)).toBe('');
|
expect(await utils.readEnv('TEST')).toBe('setup-php');
|
||||||
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
expect(await utils.readEnv('test_hyphen')).toBe('setup-php');
|
||||||
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
expect(await utils.readEnv('TEST_HYPHEN')).toBe('setup-php');
|
||||||
|
expect(await utils.readEnv('test invalid')).toBe('');
|
||||||
|
process.env['conflict_hyphen'] = 'setup-php';
|
||||||
|
process.env['conflict-hyphen'] = 'wrong';
|
||||||
|
expect(await utils.readEnv('conflict_hyphen')).toBe('setup-php');
|
||||||
|
delete process.env['conflict_hyphen'];
|
||||||
|
delete process.env['conflict-hyphen'];
|
||||||
|
expect(await utils.readEnv('undefined')).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking getVersion', async () => {
|
it('checking getInput', async () => {
|
||||||
process.env['php-version'] = '7.3';
|
process.env['test'] = 'setup-php';
|
||||||
expect(await utils.getVersion()).toBe('7.3');
|
process.env['INPUT_SETUP-PHP'] = 'setup-php';
|
||||||
process.env['php-version'] = '7.4';
|
expect(await utils.getInput('test', false)).toBe('setup-php');
|
||||||
expect(await utils.getVersion()).toBe('7.4');
|
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
||||||
process.env['php-version'] = '8.0';
|
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
||||||
expect(await utils.getVersion()).toBe('7.4');
|
await expect(async () => {
|
||||||
process.env['php-version'] = '8.0-dev';
|
await utils.getInput('DoesNotExist', true);
|
||||||
expect(await utils.getVersion()).toBe('7.4');
|
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
||||||
process.env['php-version'] = '7.4nightly';
|
delete process.env['INPUT_SETUP-PHP'];
|
||||||
expect(await utils.getVersion()).toBe('7.4');
|
});
|
||||||
process.env['php-version'] = '7.4snapshot';
|
|
||||||
expect(await utils.getVersion()).toBe('7.4');
|
it('checking getManifestURL', async () => {
|
||||||
process.env['php-version'] = 'nightly';
|
for (const url of await utils.getManifestURLS()) {
|
||||||
expect(await utils.getVersion()).toBe('7.4');
|
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('pre')).toBe('pre');
|
||||||
|
expect(await utils.parseVersion('pre-installed')).toBe('pre');
|
||||||
|
await expect(utils.parseVersion('4.x')).rejects.toThrow(
|
||||||
|
'Invalid PHP version: 4.x'
|
||||||
|
);
|
||||||
|
await expect(utils.parseVersion('foo')).rejects.toThrow(
|
||||||
|
'Invalid PHP version:'
|
||||||
|
);
|
||||||
|
|
||||||
|
fetchSpy.mockResolvedValue({data: '{ "latest": "8.1.0" }'});
|
||||||
|
await expect(utils.parseVersion('latest')).rejects.toThrow(
|
||||||
|
'Invalid PHP version in manifest:'
|
||||||
|
);
|
||||||
|
|
||||||
|
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('/etc/php.ini-production')).toBe(
|
||||||
|
'production'
|
||||||
|
);
|
||||||
|
expect(await utils.parseIniFile('/a-b/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(
|
||||||
|
array,
|
||||||
|
async function (str: string): Promise<void> {
|
||||||
concat += str;
|
concat += str;
|
||||||
});
|
}
|
||||||
|
);
|
||||||
expect(concat).toBe('abc');
|
expect(concat).toBe('abc');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -59,65 +102,60 @@ describe('Utils tests', () => {
|
|||||||
expect(await utils.color('warning')).toBe('33');
|
expect(await utils.color('warning')).toBe('33');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking readScripts', async () => {
|
|
||||||
const rc: string = fs.readFileSync(
|
|
||||||
path.join(__dirname, '../src/scripts/7.4.sh'),
|
|
||||||
'utf8'
|
|
||||||
);
|
|
||||||
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(rc);
|
|
||||||
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);
|
|
||||||
expect(await utils.readScript('fedora.sh', '7.3', 'fedora')).toContain(
|
|
||||||
'Platform fedora is not supported'
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
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([]);
|
||||||
|
|
||||||
|
expect(
|
||||||
|
await utils.extensionArray('apcu, mbstring, \\ pdo_pgsql, posix, session')
|
||||||
|
).toEqual(['apcu', 'mbstring', 'pdo_pgsql', 'posix', 'session']);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('checking shell helpers', () => {
|
||||||
|
expect(utils.escapeForShell('a$b`c\\d"e', 'linux')).toBe(
|
||||||
|
'a\\$b\\`c\\\\d\\"e'
|
||||||
|
);
|
||||||
|
expect(utils.escapeForShell('a$b`c"d', 'win32')).toBe('a`$b``c`"d');
|
||||||
|
expect(utils.safeArg('vendor-pkg/repo@v1.0.0', 'linux')).toBe(
|
||||||
|
'vendor-pkg/repo@v1.0.0'
|
||||||
|
);
|
||||||
|
expect(utils.safeArg('phpcs:>=3.0', 'linux')).toBe('"phpcs:>=3.0"');
|
||||||
|
expect(utils.safeArg('foo$bar', 'win32')).toBe('"foo`$bar"');
|
||||||
|
expect(utils.sanitizeShellInput('foo;$(`ls`)bar')).toBe('foolsbar');
|
||||||
|
expect(utils.sanitizeShellInput('vendor/foo:1.*', true)).toBe(
|
||||||
|
'vendor/foo:1.'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking INIArray', async () => {
|
it('checking INIArray', async () => {
|
||||||
expect(await utils.INIArray('a=1, b=2, c=3')).toEqual([
|
expect(await utils.CSVArray('a=1, b=2, c=3')).toEqual([
|
||||||
'a=1',
|
'a=1',
|
||||||
'b=2',
|
'b=2',
|
||||||
'c=3'
|
'c=3'
|
||||||
]);
|
]);
|
||||||
expect(await utils.INIArray('')).toEqual([]);
|
expect(await utils.CSVArray('\'a=1,2\', "b=3, 4", c=5, d=~e~')).toEqual([
|
||||||
expect(await utils.INIArray(' ')).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([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('checking log', async () => {
|
it('checking log', async () => {
|
||||||
@@ -150,8 +188,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',
|
||||||
@@ -164,8 +202,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 () => {
|
||||||
@@ -174,6 +212,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');
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -181,8 +220,178 @@ 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');
|
||||||
|
|
||||||
|
process.env['php-version'] = 'pre-installed';
|
||||||
|
expect(await utils.readPHPVersion()).toBe('pre-installed');
|
||||||
|
|
||||||
|
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');
|
||||||
|
await expect(utils.readPHPVersion()).rejects.toThrow('Invalid PHP version');
|
||||||
|
|
||||||
|
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('readPHPVersion rejects unsupported values from each source', async () => {
|
||||||
|
const existsSync = jest.spyOn(fs, 'existsSync').mockImplementation();
|
||||||
|
const readFileSync = jest.spyOn(fs, 'readFileSync').mockImplementation();
|
||||||
|
|
||||||
|
process.env['php-version'] = 'bogus';
|
||||||
|
await expect(utils.readPHPVersion()).rejects.toThrow('php-version input');
|
||||||
|
delete process.env['php-version'];
|
||||||
|
|
||||||
|
existsSync.mockReturnValue(true);
|
||||||
|
readFileSync.mockReturnValue('bogus');
|
||||||
|
await expect(utils.readPHPVersion()).rejects.toThrow('.php-version');
|
||||||
|
|
||||||
|
existsSync.mockReturnValueOnce(false).mockReturnValueOnce(true);
|
||||||
|
readFileSync.mockReturnValue('{"platform-overrides":{"php":"bogus"}}');
|
||||||
|
await expect(utils.readPHPVersion()).rejects.toThrow(
|
||||||
|
'composer.lock platform-overrides.php'
|
||||||
|
);
|
||||||
|
|
||||||
|
existsSync
|
||||||
|
.mockReturnValueOnce(false)
|
||||||
|
.mockReturnValueOnce(false)
|
||||||
|
.mockReturnValueOnce(true);
|
||||||
|
readFileSync.mockReturnValue('{"config":{"platform":{"php":"bogus"}}}');
|
||||||
|
await expect(utils.readPHPVersion()).rejects.toThrow(
|
||||||
|
'composer.json config.platform.php'
|
||||||
|
);
|
||||||
|
|
||||||
|
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');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
+25
-11
@@ -1,24 +1,38 @@
|
|||||||
name: 'Setup PHP Action'
|
name: 'Setup PHP Action'
|
||||||
author: shivammathur
|
author: shivammathur
|
||||||
description: 'GitHub action to setup PHP with required extensions, php.ini configuration, code-coverage support and composer'
|
description: 'GitHub Action for PHP'
|
||||||
branding:
|
branding:
|
||||||
color: 'purple'
|
color: 'purple'
|
||||||
|
icon: 'play-circle'
|
||||||
inputs:
|
inputs:
|
||||||
php-version:
|
php-version:
|
||||||
description: 'PHP version you want to install.'
|
description: 'Setup PHP version.'
|
||||||
required: true
|
|
||||||
extension-csv:
|
|
||||||
description: '(Optional) PHP extensions you want to install.'
|
|
||||||
required: false
|
required: false
|
||||||
ini-values-csv:
|
php-version-file:
|
||||||
description: '(Optional) Custom values you want to set in php.ini.'
|
description: 'Setup PHP version from a file.'
|
||||||
|
required: false
|
||||||
|
extensions:
|
||||||
|
description: 'Setup PHP extensions.'
|
||||||
|
required: false
|
||||||
|
ini-file:
|
||||||
|
description: 'Set base ini file.'
|
||||||
|
required: false
|
||||||
|
default: 'production'
|
||||||
|
ini-values:
|
||||||
|
description: 'Add values to php.ini.'
|
||||||
required: false
|
required: false
|
||||||
coverage:
|
coverage:
|
||||||
description: '(Optional) Code coverage driver you want to install. (Accepts: xdebug, pcov and none)'
|
description: 'Setup code coverage driver.'
|
||||||
required: false
|
required: false
|
||||||
pecl:
|
tools:
|
||||||
description: '(Optional) Setup PECL on ubuntu'
|
description: 'Setup popular tools globally.'
|
||||||
required: false
|
required: false
|
||||||
|
github-token:
|
||||||
|
description: 'GitHub token to use for authentication.'
|
||||||
|
default: ${{ github.token }}
|
||||||
|
outputs:
|
||||||
|
php-version:
|
||||||
|
description: 'PHP version in semver format'
|
||||||
runs:
|
runs:
|
||||||
using: 'node12'
|
using: 'node24'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
|
|||||||
Vendored
+1
-1801
File diff suppressed because one or more lines are too long
@@ -0,0 +1,49 @@
|
|||||||
|
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
||||||
|
import {importX} from 'eslint-plugin-import-x';
|
||||||
|
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'],
|
||||||
|
importX.flatConfigs.errors,
|
||||||
|
importX.flatConfigs.warnings,
|
||||||
|
importX.flatConfigs.typescript,
|
||||||
|
prettierRecommended,
|
||||||
|
eslintConfigPrettier,
|
||||||
|
{
|
||||||
|
plugins: {
|
||||||
|
jest
|
||||||
|
},
|
||||||
|
|
||||||
|
languageOptions: {
|
||||||
|
globals: {
|
||||||
|
...globals.node,
|
||||||
|
...globals.jest
|
||||||
|
},
|
||||||
|
|
||||||
|
parser: tsParser,
|
||||||
|
ecmaVersion: 2021,
|
||||||
|
sourceType: 'module'
|
||||||
|
},
|
||||||
|
|
||||||
|
settings: {
|
||||||
|
'import-x/resolver': {
|
||||||
|
typescript: {
|
||||||
|
alwaysTryTypes: true,
|
||||||
|
project: './tsconfig.json'
|
||||||
|
},
|
||||||
|
node: {
|
||||||
|
extensions: ['.js', '.ts']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'import-x/parsers': {
|
||||||
|
'@typescript-eslint/parser': ['.ts']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# GitHub Action for roots/bedrock
|
||||||
|
name: Testing Bedrock
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
bedrock:
|
||||||
|
name: Bedrock (PHP ${{ matrix.php-versions }})
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: ['8.3', '8.4', '8.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 }}
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: PHP test
|
||||||
|
run: composer test
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# GitHub Action for Blackfire Player
|
||||||
|
name: Play a Blackfire Scenario
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
blackfire-player:
|
||||||
|
name: Blackfire (PHP ${{ matrix.php-versions }})
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
# 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, macos-latest]
|
||||||
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
|
# Blackfire Player supports PHP 8.5 and is available on Ubuntu and macOS.
|
||||||
|
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
|
||||||
|
|
||||||
|
- name: Start local endpoint
|
||||||
|
run: |
|
||||||
|
php -S 127.0.0.1:8080 > "$RUNNER_TEMP/blackfire-player.log" 2>&1 &
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
- name: Validate scenario
|
||||||
|
run: blackfire-player validate scenario.bkf
|
||||||
|
|
||||||
|
# Refer to https://docs.blackfire.io/builds-cookbooks/player
|
||||||
|
- name: Play the scenario
|
||||||
|
run: blackfire-player run scenario.bkf --endpoint=http://127.0.0.1:8080
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
# 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: ['8.3', '8.4', '8.5']
|
||||||
|
# Blackfire supports the current PHP releases on Ubuntu, macOS, and 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, :xdebug
|
||||||
|
tools: blackfire
|
||||||
|
# Disable Xdebug and PCOV coverage drivers
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
# Refer to https://blackfire.io/docs/cookbooks/profiling-cli
|
||||||
|
- name: Profile
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set +e
|
||||||
|
output=$(blackfire run php my-script.php 2>&1)
|
||||||
|
exit_code=$?
|
||||||
|
printf '%s\n' "$output"
|
||||||
|
if [ "$exit_code" -ne 0 ]; then
|
||||||
|
if printf '%s' "$output" | grep -q "upgrade your subscription"; then
|
||||||
|
echo "Blackfire profiling reached the repository quota limit; treating this as a known non-fatal condition."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
exit "$exit_code"
|
||||||
|
fi
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
# GitHub Action for CakePHP with MySQL and Redis
|
||||||
|
# Tested with https://github.com/cakephp/app
|
||||||
|
name: Testing CakePHP with MySQL
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
php-versions: ['8.4', '8.5']
|
||||||
|
# The latest cakephp/app release resolves dev dependencies that require PHP 8.4+.
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
|
services:
|
||||||
|
mysql:
|
||||||
|
image: mysql:latest
|
||||||
|
env:
|
||||||
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
|
MYSQL_ROOT_PASSWORD: password
|
||||||
|
MYSQL_DATABASE: cakephp
|
||||||
|
ports:
|
||||||
|
- 3306/tcp
|
||||||
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: redis
|
||||||
|
ports:
|
||||||
|
- 6379/tcp
|
||||||
|
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
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 }}
|
||||||
|
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
||||||
|
# Install memcached if using ext-memcached
|
||||||
|
extensions: mbstring, intl, redis, apcu, pdo_mysql
|
||||||
|
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
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
composer run-script post-install-cmd --no-interaction
|
||||||
|
|
||||||
|
# Add a step to run migrations if required
|
||||||
|
- name: Test with phpunit
|
||||||
|
run: vendor/bin/phpunit --coverage-text
|
||||||
|
env:
|
||||||
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
DATABASE_URL: "mysql://root:password@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/cakephp?init[]=SET sql_mode = \"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION\""
|
||||||
|
DATABASE_TEST_URL: "mysql://root:password@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/cakephp?init[]=SET sql_mode = \"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION\""
|
||||||
|
|
||||||
|
coding-standard:
|
||||||
|
name: Coding Standard
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
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: '8.5'
|
||||||
|
extensions: mbstring, intl
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: PHP CodeSniffer
|
||||||
|
run: composer cs-check
|
||||||
|
|
||||||
|
static-analysis:
|
||||||
|
name: Static Analysis
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
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: '8.5'
|
||||||
|
extensions: mbstring, intl
|
||||||
|
tools: phpstan
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
composer run-script post-install-cmd --no-interaction
|
||||||
|
|
||||||
|
- name: Static Analysis using PHPStan
|
||||||
|
run: phpstan analyse --no-progress src/
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
# GitHub Action for CakePHP with PostgreSQL and Redis
|
||||||
|
# Tested with https://github.com/cakephp/app
|
||||||
|
name: Testing CakePHP with PostgreSQL
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: ['8.4', '8.5']
|
||||||
|
# The latest cakephp/app release resolves dev dependencies that require PHP 8.4+.
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:latest
|
||||||
|
env:
|
||||||
|
POSTGRES_USER: postgres
|
||||||
|
POSTGRES_PASSWORD: postgres
|
||||||
|
POSTGRES_DB: postgres
|
||||||
|
ports:
|
||||||
|
- 5432/tcp
|
||||||
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: redis
|
||||||
|
ports:
|
||||||
|
- 6379/tcp
|
||||||
|
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
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 }}
|
||||||
|
# You can also use ext-apcu or ext-memcached instead of ext-redis
|
||||||
|
# Install memcached if using ext-memcached
|
||||||
|
extensions: mbstring, intl, redis, apcu, pdo_pgsql
|
||||||
|
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
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
composer run-script post-install-cmd --no-interaction
|
||||||
|
|
||||||
|
# Add a step to run migrations if required
|
||||||
|
- name: Test with phpunit
|
||||||
|
run: vendor/bin/phpunit --coverage-text
|
||||||
|
env:
|
||||||
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports['5432'] }}/postgres?encoding=UTF8
|
||||||
|
DATABASE_TEST_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports['5432'] }}/postgres?encoding=UTF8
|
||||||
|
|
||||||
|
coding-standard:
|
||||||
|
name: Coding Standard
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
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: '8.5'
|
||||||
|
extensions: mbstring, intl, apcu
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: PHP CodeSniffer
|
||||||
|
run: composer cs-check
|
||||||
|
|
||||||
|
static-analysis:
|
||||||
|
name: Static Analysis
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
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: '8.5'
|
||||||
|
extensions: mbstring, intl, apcu
|
||||||
|
tools: phpstan
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
composer run-script post-install-cmd --no-interaction
|
||||||
|
|
||||||
|
- name: Static Analysis using PHPStan
|
||||||
|
run: phpstan analyse --no-progress src/
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
# GitHub Action for CakePHP
|
||||||
|
# Tested with https://github.com/cakephp/app
|
||||||
|
name: Testing CakePHP
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
tests:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
php-versions: ['8.4', '8.5']
|
||||||
|
# The latest cakephp/app release resolves dev dependencies that require PHP 8.4+.
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
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: mbstring, intl, pdo_sqlite, pdo_mysql
|
||||||
|
coverage: pcov
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
composer run-script post-install-cmd --no-interaction
|
||||||
|
|
||||||
|
- name: Test with phpunit
|
||||||
|
run: vendor/bin/phpunit --coverage-text
|
||||||
|
|
||||||
|
coding-standard:
|
||||||
|
name: Coding Standard
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
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: '8.5'
|
||||||
|
extensions: mbstring, intl
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: PHP CodeSniffer
|
||||||
|
run: composer cs-check
|
||||||
|
|
||||||
|
static-analysis:
|
||||||
|
name: Static Analysis
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
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: '8.5'
|
||||||
|
extensions: mbstring, intl
|
||||||
|
tools: phpstan
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
composer run-script post-install-cmd --no-interaction
|
||||||
|
|
||||||
|
- name: Static Analysis using PHPStan
|
||||||
|
run: phpstan analyse --no-progress src/
|
||||||
@@ -4,21 +4,38 @@ on: [push, pull_request]
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
max-parallel: 6
|
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3']
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@master
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, intl, curl, dom
|
extensions: mbstring, intl, curl, dom, sqlite3, pdo_sqlite
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# GitHub Action for Drupal 11 composer-managed projects
|
||||||
|
# Requires drupal/core-dev in require-dev for vendor/bin/phpunit
|
||||||
|
name: Testing Drupal
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
drupal:
|
||||||
|
name: Drupal (PHP ${{ matrix.php-versions }})
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
SIMPLETEST_BASE_URL: http://127.0.0.1:8080
|
||||||
|
SIMPLETEST_DB: sqlite://localhost/sites/default/files/.ht.sqlite
|
||||||
|
BROWSERTEST_OUTPUT_DIRECTORY: /tmp/browser_output
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: ['8.3', '8.4', '8.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: apcu, ctype, curl, dom, gd, iconv, intl, mbstring, pdo_sqlite, simplexml, xml, zip
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: |
|
||||||
|
if [ "${{ matrix.php-versions }}" = "8.3" ]; then
|
||||||
|
composer require --dev drupal/core-dev:11.2.10 doctrine/instantiator:^2.0.0 --no-interaction --no-update
|
||||||
|
composer update drupal/core-dev doctrine/instantiator --with-all-dependencies --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
else
|
||||||
|
composer install --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Prepare Drupal test directories
|
||||||
|
run: mkdir -p web/sites/default/files "$BROWSERTEST_OUTPUT_DIRECTORY"
|
||||||
|
|
||||||
|
- name: Start Drupal web server
|
||||||
|
run: php -S 127.0.0.1:8080 -t web >/tmp/php-server.log 2>&1 &
|
||||||
|
|
||||||
|
- name: Test with phpunit
|
||||||
|
# Adjust the test path to match your custom modules or themes.
|
||||||
|
run: vendor/bin/phpunit -c web/core web/modules/custom
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# GitHub Action for Laminas framework MVC projects
|
||||||
|
name: Testing Laminas MVC
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
php-versions: ['8.1', '8.2', '8.3']
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
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 }}
|
||||||
|
coverage: xdebug
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: Test with phpunit
|
||||||
|
run: vendor/bin/phpunit --coverage-text
|
||||||
+43
-12
@@ -6,23 +6,28 @@ jobs:
|
|||||||
name: Laravel (PHP ${{ matrix.php-versions }})
|
name: Laravel (PHP ${{ matrix.php-versions }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
|
DB_CONNECTION: mysql
|
||||||
|
DB_HOST: 127.0.0.1
|
||||||
DB_DATABASE: laravel
|
DB_DATABASE: laravel
|
||||||
DB_USERNAME: root
|
DB_USERNAME: root
|
||||||
DB_PASSWORD: password
|
DB_PASSWORD: password
|
||||||
BROADCAST_DRIVER: log
|
BROADCAST_CONNECTION: log
|
||||||
CACHE_DRIVER: redis
|
CACHE_STORE: 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
|
||||||
MYSQL_DATABASE: laravel
|
MYSQL_DATABASE: laravel
|
||||||
ports:
|
ports:
|
||||||
- 3306
|
- 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:
|
||||||
@@ -30,31 +35,57 @@ 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
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: 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
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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'] }}
|
||||||
|
|
||||||
- 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'] }}
|
||||||
|
|||||||
@@ -11,13 +11,15 @@ jobs:
|
|||||||
QUEUE_CONNECTION: redis
|
QUEUE_CONNECTION: redis
|
||||||
SESSION_DRIVER: redis
|
SESSION_DRIVER: redis
|
||||||
DB_CONNECTION: pgsql
|
DB_CONNECTION: pgsql
|
||||||
DB_HOST: localhost
|
DB_HOST: 127.0.0.1
|
||||||
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:
|
||||||
@@ -32,31 +35,57 @@ 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
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: 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
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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'] }}
|
||||||
|
|
||||||
- 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'] }}
|
||||||
|
|||||||
+28
-9
@@ -7,26 +7,45 @@ jobs:
|
|||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 6
|
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3']
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, dom, fileinfo
|
extensions: mbstring, dom, fileinfo
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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
|
||||||
+40
-11
@@ -13,16 +13,19 @@ 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
|
||||||
MYSQL_DATABASE: lumen
|
MYSQL_DATABASE: lumen
|
||||||
ports:
|
ports:
|
||||||
- 3306
|
- 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:
|
||||||
@@ -30,31 +33,57 @@ 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
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3']
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: 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
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit --coverage-text --coverage-filter app
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|||||||
+42
-13
@@ -11,13 +11,15 @@ jobs:
|
|||||||
QUEUE_CONNECTION: redis
|
QUEUE_CONNECTION: redis
|
||||||
SESSION_DRIVER: redis
|
SESSION_DRIVER: redis
|
||||||
DB_CONNECTION: pgsql
|
DB_CONNECTION: pgsql
|
||||||
DB_HOST: localhost
|
DB_HOST: 127.0.0.1
|
||||||
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:
|
||||||
@@ -32,31 +35,57 @@ 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
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3']
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, dom, fileinfo, pgsql
|
extensions: mbstring, dom, fileinfo, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: none
|
||||||
|
|
||||||
|
# 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
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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'] }}
|
||||||
|
|
||||||
- name: Test with phpunit
|
- name: Test with phpunit
|
||||||
run: vendor/bin/phpunit --coverage-text
|
run: vendor/bin/phpunit
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
||||||
|
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||||
|
|||||||
+28
-10
@@ -7,22 +7,40 @@ jobs:
|
|||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 9
|
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3']
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, dom, fileinfo, mysql
|
extensions: mbstring, dom, fileinfo, mysql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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 --coverage-filter app
|
||||||
|
|||||||
+36
-11
@@ -11,46 +11,71 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DB_ADAPTER: mysql
|
DB_ADAPTER: mysql
|
||||||
DB_HOST: 127.0.0.1
|
DB_HOST: 127.0.0.1
|
||||||
DB_NAME: phalcon
|
DB_NAME: vokuro
|
||||||
DB_USERNAME: root
|
DB_USERNAME: root
|
||||||
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:5.7
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: password
|
MYSQL_ROOT_PASSWORD: password
|
||||||
MYSQL_DATABASE: phalcon
|
MYSQL_DATABASE: vokuro
|
||||||
ports:
|
ports:
|
||||||
- 3306
|
- 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
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, dom, zip, phalcon4, mysql #use phalcon3 for the phalcon 3.x.
|
# Use phalcon4 for the latest compatible Vokuro sample release.
|
||||||
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
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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
|
|
||||||
vendor/bin/phinx migrate
|
vendor/bin/phinx migrate
|
||||||
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 &)
|
||||||
|
|||||||
@@ -11,50 +11,67 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DB_ADAPTER: pgsql
|
DB_ADAPTER: pgsql
|
||||||
DB_HOST: 127.0.0.1
|
DB_HOST: 127.0.0.1
|
||||||
DB_NAME: postgres
|
DB_NAME: vokuro
|
||||||
DB_USERNAME: postgres
|
DB_USERNAME: postgres
|
||||||
DB_PASSWORD: postgres
|
DB_PASSWORD: postgres
|
||||||
CODECEPTION_URL: 127.0.0.1
|
CODECEPTION_URL: 127.0.0.1
|
||||||
CODECEPTION_PORT: 8888
|
CODECEPTION_PORT: 8888
|
||||||
DB_CONNECTION: pgsql
|
|
||||||
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
|
||||||
POSTGRES_DB: postgres
|
POSTGRES_DB: vokuro
|
||||||
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
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
php-versions: ['7.2', '7.3', '7.4']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, dom, zip, phalcon4, pgsql #use phalcon3 for the phalcon 3.x
|
extensions: mbstring, dom, zip, phalcon4, pgsql
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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 --no-security-blocking
|
||||||
|
|
||||||
- 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');"
|
||||||
|
mkdir -p var/cache/acl var/cache/metaData var/cache/session var/cache/volt var/logs
|
||||||
|
chmod -R 777 var/cache var/logs
|
||||||
|
|
||||||
- name: Run Migration
|
- name: Run Migration
|
||||||
run: |
|
run: |
|
||||||
if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi
|
|
||||||
vendor/bin/phinx migrate
|
vendor/bin/phinx migrate
|
||||||
vendor/bin/phinx seed:run
|
vendor/bin/phinx seed:run
|
||||||
env:
|
env:
|
||||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
||||||
|
|
||||||
- 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 > vokuro.log 2>&1 &)
|
||||||
vendor/bin/codecept build
|
vendor/bin/codecept build
|
||||||
vendor/bin/codecept run
|
vendor/bin/codecept run
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# GitHub Action for roots/sage
|
||||||
|
name: Testing Sage
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
sage:
|
||||||
|
name: Sage (PHP ${{ matrix.php-versions }} & Node ${{ matrix.node-versions }})
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
|
node-versions: ['20']
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-versions }}
|
||||||
|
|
||||||
|
# Docs: https://github.com/shivammathur/setup-php
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: ${{ matrix.php-versions }}
|
||||||
|
extensions: mbstring
|
||||||
|
|
||||||
|
- name: Check node versions
|
||||||
|
run: node -v
|
||||||
|
|
||||||
|
- name: Get yarn cache
|
||||||
|
id: yarn-cache
|
||||||
|
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.yarn-cache.outputs.dir }}
|
||||||
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-yarn-
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install yarn dependencies
|
||||||
|
run: yarn install --frozen-lockfile --non-interactive
|
||||||
|
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: Yarn build
|
||||||
|
run: yarn build
|
||||||
@@ -4,21 +4,38 @@ on: [push, pull_request]
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
strategy:
|
strategy:
|
||||||
max-parallel: 6
|
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.2', '7.3']
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@master
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, simplexml, dom
|
extensions: mbstring, simplexml, dom
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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
|
||||||
+45
-20
@@ -5,41 +5,66 @@ jobs:
|
|||||||
symfony:
|
symfony:
|
||||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
APP_ENV: test
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
image: mysql:5.7
|
image: mysql:8.4
|
||||||
env:
|
env:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
MYSQL_ROOT_PASSWORD: symfony
|
MYSQL_ROOT_PASSWORD: symfony
|
||||||
MYSQL_DATABASE: symfony
|
MYSQL_DATABASE: symfony
|
||||||
ports:
|
ports:
|
||||||
- 3306
|
- 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
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.3']
|
php-versions: ['8.4', '8.5', '8.6']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, xml, ctype, iconv, 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
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: Prepare database
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
php bin/console doctrine:database:create --if-not-exists --no-interaction
|
||||||
- name: Run Migration
|
php bin/console doctrine:schema:create --no-interaction
|
||||||
run: |
|
php bin/console doctrine:fixtures:load --no-interaction
|
||||||
composer require symfony/orm-pack
|
|
||||||
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"
|
|
||||||
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?serverVersion=8.4&charset=utf8mb4
|
||||||
- name: Run Tests
|
|
||||||
run: |
|
- name: Run tests
|
||||||
composer require phpunit
|
run: php bin/phpunit --coverage-text
|
||||||
php bin/phpunit --coverage-text
|
env:
|
||||||
|
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony?serverVersion=8.4&charset=utf8mb4
|
||||||
|
|||||||
@@ -5,9 +5,13 @@ jobs:
|
|||||||
symfony:
|
symfony:
|
||||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
APP_ENV: test
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:10.8
|
image: postgres:16
|
||||||
env:
|
env:
|
||||||
POSTGRES_USER: postgres
|
POSTGRES_USER: postgres
|
||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
@@ -17,29 +21,50 @@ jobs:
|
|||||||
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
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.3']
|
php-versions: ['8.4', '8.5', '8.6']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, xml, ctype, iconv, pgsql
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_pgsql, 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
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: Prepare database
|
||||||
run: |
|
run: |
|
||||||
composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
php bin/console doctrine:database:create --if-not-exists --no-interaction
|
||||||
- name: Run Migration
|
php bin/console doctrine:schema:create --no-interaction
|
||||||
run: |
|
php bin/console doctrine:fixtures:load --no-interaction
|
||||||
composer require symfony/orm-pack
|
|
||||||
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"
|
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8
|
DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?serverVersion=16.0.0&charset=utf8
|
||||||
- name: Run Tests
|
|
||||||
run: |
|
- name: Run tests
|
||||||
composer require phpunit
|
run: php bin/phpunit --coverage-text
|
||||||
php bin/phpunit --coverage-text
|
env:
|
||||||
|
DATABASE_URL: postgresql://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?serverVersion=16.0.0&charset=utf8
|
||||||
|
|||||||
+28
-15
@@ -7,24 +7,37 @@ jobs:
|
|||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
matrix:
|
||||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
php-versions: ['7.3']
|
php-versions: ['8.4', '8.5', '8.6']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v6
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #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 }}
|
||||||
extension-csv: mbstring, xml, ctype, iconv
|
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, zip
|
||||||
coverage: xdebug #optional
|
coverage: xdebug
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
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: Run tests
|
||||||
- name: Run Tests
|
run: ./bin/phpunit --coverage-text
|
||||||
run: |
|
|
||||||
composer require phpunit
|
|
||||||
php bin/phpunit --coverage-text
|
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
# GitHub Action for WordPress plugins
|
||||||
|
# Tested with files scaffolded by wp scaffold plugin-tests --ci=github
|
||||||
|
# Requires phpunit/phpunit and yoast/phpunit-polyfills in require-dev for vendor/bin/phpunit
|
||||||
|
name: Testing WordPress
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
wordpress:
|
||||||
|
name: WordPress (PHP ${{ matrix.php-versions }})
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: ['8.3', '8.4', '8.5']
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
|
services:
|
||||||
|
mysql:
|
||||||
|
image: mysql:latest
|
||||||
|
env:
|
||||||
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
|
MYSQL_ROOT_PASSWORD: root
|
||||||
|
MYSQL_DATABASE: wordpress_test
|
||||||
|
ports:
|
||||||
|
- 3306/tcp
|
||||||
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
|
||||||
|
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: mbstring, xml, zip, intl, mysql
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install system dependencies
|
||||||
|
run: sudo apt-get update && sudo apt-get install -y subversion default-mysql-client
|
||||||
|
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: |
|
||||||
|
if [ "${{ matrix.php-versions }}" = "8.3" ]; then
|
||||||
|
composer require --dev doctrine/instantiator:^2.0.0 --no-interaction --no-update
|
||||||
|
composer update doctrine/instantiator --with-all-dependencies --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
else
|
||||||
|
composer install --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Install WordPress test environment
|
||||||
|
run: bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1:${{ job.services.mysql.ports['3306'] }} latest true
|
||||||
|
|
||||||
|
- name: Test with phpunit
|
||||||
|
run: vendor/bin/phpunit
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# GitHub Action for Yii Framework with MySQL
|
|
||||||
name: Testing Yii2 with MySQL
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
yii:
|
|
||||||
name: Yii2 (PHP ${{ matrix.php-versions }})
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
DB_USERNAME: root
|
|
||||||
DB_PASSWORD: yii
|
|
||||||
TEST_DB_USERNAME: root
|
|
||||||
TEST_DB_PASSWORD: yii
|
|
||||||
DB_CHARSET: utf8
|
|
||||||
services:
|
|
||||||
mysql:
|
|
||||||
image: mysql:5.7
|
|
||||||
env:
|
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
|
||||||
MYSQL_ROOT_PASSWORD: yii
|
|
||||||
MYSQL_DATABASE: yii
|
|
||||||
ports:
|
|
||||||
- 3306
|
|
||||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v1
|
|
||||||
- name: Set Node.js 10.x
|
|
||||||
uses: actions/setup-node@master
|
|
||||||
with:
|
|
||||||
node-version: 10.x
|
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extension-csv: mbstring, intl, gd, imagick, zip, dom, mysql
|
|
||||||
coverage: xdebug #optional
|
|
||||||
- name: Install Composer dependencies
|
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
|
||||||
- name: Prepare the application
|
|
||||||
run: |
|
|
||||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
|
||||||
php console/yii app/setup
|
|
||||||
npm install --development
|
|
||||||
npm run build
|
|
||||||
env:
|
|
||||||
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
|
|
||||||
run: |
|
|
||||||
vendor/bin/codecept build
|
|
||||||
php tests/bin/yii app/setup --interactive=0
|
|
||||||
nohup php -S localhost:8080 > yii.log 2>&1 &
|
|
||||||
vendor/bin/codecept run
|
|
||||||
env:
|
|
||||||
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
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
# GitHub Action for Yii Framework with PostgreSQL
|
|
||||||
name: Testing Yii2 with PostgreSQL
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
yii:
|
|
||||||
name: Yii2 (PHP ${{ matrix.php-versions }})
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
DB_USERNAME: postgres
|
|
||||||
DB_PASSWORD: postgres
|
|
||||||
TEST_DB_USERNAME: postgres
|
|
||||||
TEST_DB_PASSWORD: postgres
|
|
||||||
DB_CHARSET: utf8
|
|
||||||
services:
|
|
||||||
postgres:
|
|
||||||
image: postgres:10.8
|
|
||||||
env:
|
|
||||||
POSTGRES_USER: postgres
|
|
||||||
POSTGRES_PASSWORD: postgres
|
|
||||||
POSTGRES_DB: postgres
|
|
||||||
ports:
|
|
||||||
- 5432/tcp
|
|
||||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
max-parallel: 3
|
|
||||||
matrix:
|
|
||||||
php-versions: ['7.2', '7.3', '7.4']
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v1
|
|
||||||
- name: Set Node.js 10.x
|
|
||||||
uses: actions/setup-node@master
|
|
||||||
with:
|
|
||||||
node-version: 10.x
|
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extension-csv: mbstring, intl, gd, imagick, zip, dom, pgsql
|
|
||||||
coverage: xdebug #optional
|
|
||||||
- name: Install Composer dependencies
|
|
||||||
run: composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader
|
|
||||||
- name: Prepare the application
|
|
||||||
run: |
|
|
||||||
php -r "file_exists('.env') || copy('.env.dist', '.env');"
|
|
||||||
php console/yii app/setup
|
|
||||||
npm install --development
|
|
||||||
npm run build
|
|
||||||
env:
|
|
||||||
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
|
|
||||||
run: |
|
|
||||||
vendor/bin/codecept build
|
|
||||||
php tests/bin/yii app/setup --interactive=0
|
|
||||||
nohup php -S localhost:8080 > yii.log 2>&1 &
|
|
||||||
vendor/bin/codecept run
|
|
||||||
env:
|
|
||||||
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
|
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
# GitHub Action for Yii3 web application with MySQL
|
||||||
|
# Tested with https://github.com/yiisoft/app
|
||||||
|
name: Testing Yii3 with MySQL
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
yii:
|
||||||
|
name: Yii3 (PHP ${{ matrix.php-versions }})
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
APP_C3: true
|
||||||
|
APP_ENV: test
|
||||||
|
APP_DEBUG: false
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
|
services:
|
||||||
|
mysql:
|
||||||
|
image: mysql:8.4
|
||||||
|
env:
|
||||||
|
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||||
|
MYSQL_ROOT_PASSWORD: password
|
||||||
|
MYSQL_DATABASE: app
|
||||||
|
ports:
|
||||||
|
- 3306/tcp
|
||||||
|
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: ['8.4', '8.5']
|
||||||
|
# The latest yiisoft/app release resolves Symfony 8.0 packages that require PHP 8.4+.
|
||||||
|
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: fileinfo, intl, pdo_mysql
|
||||||
|
ini-values: date.timezone='UTC', register_argc_argv=On
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: Run migrations
|
||||||
|
run: php yii migrate:up --no-interaction
|
||||||
|
env:
|
||||||
|
DB_HOST: 127.0.0.1
|
||||||
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
|
DB_NAME: app
|
||||||
|
DB_USERNAME: root
|
||||||
|
DB_PASSWORD: password
|
||||||
|
|
||||||
|
- name: Run codeception build
|
||||||
|
run: vendor/bin/codecept build
|
||||||
|
|
||||||
|
- name: Run tests with Codeception
|
||||||
|
run: vendor/bin/codecept run
|
||||||
|
env:
|
||||||
|
DB_HOST: 127.0.0.1
|
||||||
|
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||||
|
DB_NAME: app
|
||||||
|
DB_USERNAME: root
|
||||||
|
DB_PASSWORD: password
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
# GitHub Action for Yii3 web application with PostgreSQL
|
||||||
|
# Tested with https://github.com/yiisoft/app
|
||||||
|
name: Testing Yii3 with PostgreSQL
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
yii:
|
||||||
|
name: Yii3 (PHP ${{ matrix.php-versions }})
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
APP_C3: true
|
||||||
|
APP_ENV: test
|
||||||
|
APP_DEBUG: false
|
||||||
|
|
||||||
|
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:16
|
||||||
|
env:
|
||||||
|
POSTGRES_USER: postgres
|
||||||
|
POSTGRES_PASSWORD: postgres
|
||||||
|
POSTGRES_DB: app
|
||||||
|
ports:
|
||||||
|
- 5432/tcp
|
||||||
|
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
php-versions: ['8.4', '8.5']
|
||||||
|
# The latest yiisoft/app release resolves Symfony 8.0 packages that require PHP 8.4+.
|
||||||
|
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: fileinfo, intl, pdo_pgsql
|
||||||
|
ini-values: date.timezone='UTC', register_argc_argv=On
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: Run migrations
|
||||||
|
run: php yii migrate:up --no-interaction
|
||||||
|
env:
|
||||||
|
DB_HOST: 127.0.0.1
|
||||||
|
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
||||||
|
DB_NAME: app
|
||||||
|
DB_USERNAME: postgres
|
||||||
|
DB_PASSWORD: postgres
|
||||||
|
|
||||||
|
- name: Run codeception build
|
||||||
|
run: vendor/bin/codecept build
|
||||||
|
|
||||||
|
- name: Run tests with Codeception
|
||||||
|
run: vendor/bin/codecept run
|
||||||
|
env:
|
||||||
|
DB_HOST: 127.0.0.1
|
||||||
|
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
||||||
|
DB_NAME: app
|
||||||
|
DB_USERNAME: postgres
|
||||||
|
DB_PASSWORD: postgres
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
# GitHub Action for Yii3 web application
|
||||||
|
# Tested with https://github.com/yiisoft/app
|
||||||
|
name: Testing Yii3
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
yii:
|
||||||
|
name: Yii3 (PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }})
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
env:
|
||||||
|
APP_C3: true
|
||||||
|
APP_ENV: test
|
||||||
|
APP_DEBUG: false
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest]
|
||||||
|
php-versions: ['8.4', '8.5']
|
||||||
|
# The latest yiisoft/app release resolves Symfony 8.0 packages that require PHP 8.4+.
|
||||||
|
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: fileinfo, intl
|
||||||
|
ini-values: date.timezone='UTC', register_argc_argv=On
|
||||||
|
coverage: none
|
||||||
|
|
||||||
|
- name: Get composer cache directory
|
||||||
|
id: composer-cache
|
||||||
|
shell: bash
|
||||||
|
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Cache composer dependencies
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: ${{ steps.composer-cache.outputs.dir }}
|
||||||
|
# Use composer.json for key, if composer.lock is not committed.
|
||||||
|
# key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
|
||||||
|
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||||
|
restore-keys: ${{ runner.os }}-composer-
|
||||||
|
|
||||||
|
- name: Install Composer dependencies
|
||||||
|
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||||
|
|
||||||
|
- name: Run codeception build
|
||||||
|
run: vendor/bin/codecept build
|
||||||
|
|
||||||
|
- name: Run tests with Codeception
|
||||||
|
run: vendor/bin/codecept run
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# GitHub Action for Zend Framework
|
|
||||||
name: Testing Zend Framework
|
|
||||||
on: [push, pull_request]
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
strategy:
|
|
||||||
max-parallel: 6
|
|
||||||
matrix:
|
|
||||||
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
|
|
||||||
php-versions: ['7.2', '7.3']
|
|
||||||
runs-on: ${{ matrix.operating-system }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@master
|
|
||||||
- name: Setup PHP, with composer and extensions
|
|
||||||
uses: shivammathur/setup-php@master #https://github.com/shivammathur/setup-php
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-versions }}
|
|
||||||
extension-csv: mbstring, bcmath, curl, intl
|
|
||||||
coverage: xdebug #optional
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
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
|
|
||||||
run: vendor/bin/phpunit --coverage-text
|
|
||||||
+1
-1
@@ -5,7 +5,7 @@ module.exports = {
|
|||||||
testMatch: ['**/*.test.ts'],
|
testMatch: ['**/*.test.ts'],
|
||||||
testRunner: 'jest-circus/runner',
|
testRunner: 'jest-circus/runner',
|
||||||
transform: {
|
transform: {
|
||||||
'^.+\\.ts$': 'ts-jest'
|
'^.+\\.ts$': ['ts-jest', {tsconfig: 'tsconfig.test.json'}]
|
||||||
},
|
},
|
||||||
verbose: true,
|
verbose: true,
|
||||||
collectCoverage: true
|
collectCoverage: true
|
||||||
|
|||||||
Generated
+5779
-5856
File diff suppressed because it is too large
Load Diff
+57
-30
@@ -1,15 +1,25 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-php",
|
"name": "setup-php",
|
||||||
"version": "1.5.4",
|
"version": "2.37.2",
|
||||||
"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",
|
"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,32 +34,49 @@
|
|||||||
"author": "shivammathur",
|
"author": "shivammathur",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.2.0",
|
"@actions/exec": "^2.0.0",
|
||||||
"@actions/exec": "^1.0.1",
|
"compare-versions": "^6.1.1"
|
||||||
"fs": "0.0.1-security"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^24.0.21",
|
"@eslint/compat": "^2.1.0",
|
||||||
"@types/node": "^12.12.0",
|
"@eslint/js": "^10.0.1",
|
||||||
"@typescript-eslint/eslint-plugin": "^2.7.0",
|
"@types/jest": "^30.0.0",
|
||||||
"@typescript-eslint/parser": "^2.7.0",
|
"@types/node": "^26.4.1",
|
||||||
"@zeit/ncc": "^0.20.5",
|
"@typescript-eslint/eslint-plugin": "^8.69.0",
|
||||||
"eslint": "^6.6.0",
|
"@typescript-eslint/parser": "^8.69.0",
|
||||||
"eslint-config-prettier": "^6.5.0",
|
"@typescript/native": "npm:typescript@^7.0.2",
|
||||||
"eslint-plugin-import": "^2.18.2",
|
"@vercel/ncc": "^0.45.0",
|
||||||
"eslint-plugin-jest": "^23.0.3",
|
"eslint": "^10.9.1",
|
||||||
"eslint-plugin-prettier": "^3.1.1",
|
"eslint-config-prettier": "^10.1.8",
|
||||||
"husky": "^3.0.9",
|
"eslint-import-resolver-typescript": "^4.4.5",
|
||||||
"jest": "^24.9.0",
|
"eslint-plugin-import-x": "^4.17.1",
|
||||||
"jest-circus": "^24.9.0",
|
"eslint-plugin-jest": "^29.16.6",
|
||||||
"prettier": "^1.17.1",
|
"eslint-plugin-prettier": "^5.5.6",
|
||||||
"ts-jest": "^24.1.0",
|
"globals": "^17.12.0",
|
||||||
"typescript": "^3.6.4"
|
"jest": "^30.5.1",
|
||||||
|
"jest-circus": "^30.5.1",
|
||||||
|
"nock": "^14.0.17",
|
||||||
|
"prettier": "^3.9.6",
|
||||||
|
"simple-git-hooks": "^2.14.0",
|
||||||
|
"ts-jest": "^29.4.12",
|
||||||
|
"typescript": "npm:@typescript/typescript6@^6.0.2"
|
||||||
},
|
},
|
||||||
"husky": {
|
"overrides": {
|
||||||
"skipCI": true,
|
"@babel/core": "^7.29.7",
|
||||||
"hooks": {
|
"js-yaml": "^4.2.0",
|
||||||
"pre-commit": "npm run build && npm run format && npm run release"
|
"test-exclude": "^7.0.1",
|
||||||
}
|
"glob": "^13.0.6",
|
||||||
|
"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"
|
||||||
|
},
|
||||||
|
"allowScripts": {
|
||||||
|
"fsevents@2.3.3": true,
|
||||||
|
"simple-git-hooks@2.13.1": true,
|
||||||
|
"unrs-resolver@1.11.1": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+23
-17
@@ -8,13 +8,18 @@ import * as utils from './utils';
|
|||||||
export async function addINIValuesUnix(
|
export async function addINIValuesUnix(
|
||||||
ini_values_csv: string
|
ini_values_csv: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const ini_values: Array<string> = await utils.INIArray(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.map(v => utils.escapeForShell(v, 'linux')).join('\n') +
|
||||||
|
'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1' +
|
||||||
|
script
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,15 +30,15 @@ export async function addINIValuesUnix(
|
|||||||
export async function addINIValuesWindows(
|
export async function addINIValuesWindows(
|
||||||
ini_values_csv: string
|
ini_values_csv: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const ini_values: Array<string> = await utils.INIArray(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') +
|
ini_values.map(v => utils.escapeForShell(v, 'win32')).join('\n') +
|
||||||
'"' +
|
'"' +
|
||||||
script
|
script
|
||||||
);
|
);
|
||||||
@@ -43,27 +48,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 +77,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'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
1.0.0-0 1.10.28
|
||||||
|
2.0.0-0 2.2.28
|
||||||
|
2.3.0-0 2.9.8
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Composer %s has a known GitHub token parsing bug that exposes GitHub tokens in the error output. So, GitHub authentication has not been configured for this Composer version. Please update to the latest version of Composer. See: https://github.com/composer/composer/security/advisories/GHSA-f9f8-rm49-7jv2
|
||||||
@@ -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
|
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
opcache.enable=1
|
||||||
|
opcache.jit_buffer_size=256M
|
||||||
|
opcache.jit=1235
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
opcache.enable=1
|
||||||
|
opcache.jit_buffer_size=128M
|
||||||
|
opcache.jit=1235
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
date.timezone=UTC
|
||||||
|
memory_limit=-1
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
xdebug.mode=coverage
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
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
|
||||||
|
krb5=libkrb5-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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
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.05,plucky
|
||||||
|
25.10,questing
|
||||||
|
26.04,resolute
|
||||||
|
26.10,stonking
|
||||||
|
@@ -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"
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
cgi
|
||||||
|
cli
|
||||||
|
curl
|
||||||
|
fpm
|
||||||
|
intl
|
||||||
|
mbstring
|
||||||
|
mysql
|
||||||
|
opcache
|
||||||
|
pgsql
|
||||||
|
xml
|
||||||
|
zip
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
cgi
|
||||||
|
cli
|
||||||
|
curl
|
||||||
|
dev
|
||||||
|
fpm
|
||||||
|
intl
|
||||||
|
mbstring
|
||||||
|
mysql
|
||||||
|
opcache
|
||||||
|
pgsql
|
||||||
|
xml
|
||||||
|
zip
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"problemMatcher": [
|
||||||
|
{
|
||||||
|
"owner": "phpunit",
|
||||||
|
"pattern": [
|
||||||
|
{
|
||||||
|
"regexp": "^\\d+\\)\\s.*$"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regexp": "^(.*Failed\\sasserting\\sthat.*)$",
|
||||||
|
"message": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regexp": "^\\s*$"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"regexp": "^(.*):(\\d+)$",
|
||||||
|
"file": 1,
|
||||||
|
"line": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,372 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
},
|
||||||
|
"cpx": {
|
||||||
|
"type": "phar",
|
||||||
|
"repository": "laravel/cpx",
|
||||||
|
"extension": "",
|
||||||
|
"domain": "https://github.com",
|
||||||
|
"version_prefix": "v",
|
||||||
|
"version_parameter": "--version"
|
||||||
|
},
|
||||||
|
"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"
|
||||||
|
},
|
||||||
|
"cloud-cli": {
|
||||||
|
"type": "composer",
|
||||||
|
"alias": "laravel-cloud",
|
||||||
|
"repository": "laravel/cloud-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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
xdebug
|
||||||
|
pcov
|
||||||
+112
@@ -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();
|
||||||
|
}
|
||||||
+85
-101
@@ -2,85 +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
|
|
||||||
*/
|
|
||||||
export async function addCoverageXdebug(
|
|
||||||
version: string,
|
|
||||||
os_version: string
|
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
return (
|
if (
|
||||||
(await extensions.addExtension('xdebug', version, os_version, true)) +
|
(/^5\.[3-6]$|^7\.[0-1]$/.test(version) && extension == 'xdebug3') ||
|
||||||
(await utils.suppressOutput(os_version)) +
|
(/^8\.[0-9]$/.test(version) && extension == 'xdebug2')
|
||||||
'\n' +
|
) {
|
||||||
(await utils.addLog(
|
return extension + ' is not supported on PHP ' + version;
|
||||||
'$tick',
|
}
|
||||||
'xdebug',
|
return '';
|
||||||
'Xdebug enabled as coverage driver',
|
|
||||||
os_version
|
|
||||||
))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
*/
|
*/
|
||||||
export async function addCoveragePCOV(
|
export async function addCoveragePCOV(
|
||||||
version: string,
|
version: string,
|
||||||
os_version: string
|
os: 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)) +
|
||||||
(await utils.suppressOutput(os_version)) +
|
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\');"',
|
||||||
script +=
|
os
|
||||||
'if [ -e /etc/php/' +
|
|
||||||
version +
|
|
||||||
'/mods-available/xdebug.ini ]; then sudo phpdismod -v ' +
|
|
||||||
version +
|
|
||||||
' xdebug; fi\n';
|
|
||||||
script += 'sudo sed -i "/xdebug/d" $ini_file\n';
|
|
||||||
break;
|
|
||||||
case 'darwin':
|
|
||||||
script += 'sudo sed -i \'\' "/xdebug/d" $ini_file\n';
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
script +=
|
|
||||||
'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php }\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;
|
||||||
}
|
}
|
||||||
@@ -92,47 +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
|
||||||
*/
|
*/
|
||||||
export async function disableCoverage(
|
export async function disableCoverage(
|
||||||
version: string,
|
version: string,
|
||||||
os_version: string
|
os: string,
|
||||||
|
pipe: string
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
let script = '\n';
|
let script = '\n';
|
||||||
switch (os_version) {
|
|
||||||
case 'linux':
|
|
||||||
script +=
|
script +=
|
||||||
'if [ -e /etc/php/' +
|
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
|
||||||
version +
|
|
||||||
'/mods-available/xdebug.ini ]; then sudo phpdismod -v ' +
|
|
||||||
version +
|
|
||||||
' xdebug; fi\n';
|
|
||||||
script +=
|
script +=
|
||||||
'if [ -e /etc/php/' +
|
(await extensions.addExtension(':xdebug:false', version, os, true)) + pipe;
|
||||||
version +
|
script += await utils.addLog('$tick', 'none', 'Disabled Xdebug and PCOV', os);
|
||||||
'/mods-available/pcov.ini ]; then sudo phpdismod -v ' +
|
|
||||||
version +
|
|
||||||
' pcov; fi\n';
|
|
||||||
script += 'sudo sed -i "/xdebug/d" $ini_file\n';
|
|
||||||
script += 'sudo sed -i "/pcov/d" $ini_file\n';
|
|
||||||
break;
|
|
||||||
case 'darwin':
|
|
||||||
script += 'sudo sed -i \'\' "/xdebug/d" $ini_file\n';
|
|
||||||
script += 'sudo sed -i \'\' "/pcov/d" $ini_file\n';
|
|
||||||
break;
|
|
||||||
case 'win32':
|
|
||||||
script +=
|
|
||||||
'if(php -m | findstr -i xdebug) { Disable-PhpExtension xdebug C:\\tools\\php }\n';
|
|
||||||
script +=
|
|
||||||
'if(php -m | findstr -i pcov) { Disable-PhpExtension pcov C:\\tools\\php }\n';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
script += await utils.addLog(
|
|
||||||
'$tick',
|
|
||||||
'none',
|
|
||||||
'Disabled Xdebug and PCOV',
|
|
||||||
os_version
|
|
||||||
);
|
|
||||||
|
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
@@ -142,23 +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.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';
|
||||||
switch (coverage_driver) {
|
switch (coverage_driver) {
|
||||||
case 'pcov':
|
case 'pcov':
|
||||||
return script + (await addCoveragePCOV(version, os_version));
|
return script + (await addCoveragePCOV(version, os, pipe));
|
||||||
case 'xdebug':
|
case 'xdebug':
|
||||||
return script + (await addCoverageXdebug(version, os_version));
|
case 'xdebug2':
|
||||||
|
case 'xdebug3':
|
||||||
|
return (
|
||||||
|
script + (await addCoverageXdebug(coverage_driver, version, os, pipe))
|
||||||
|
);
|
||||||
case 'none':
|
case 'none':
|
||||||
return script + (await disableCoverage(version, os_version));
|
return script + (await disableCoverage(version, os, pipe));
|
||||||
default:
|
default:
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
+319
-73
@@ -1,4 +1,3 @@
|
|||||||
import * as path from 'path';
|
|
||||||
import * as utils from './utils';
|
import * as utils from './utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -12,28 +11,113 @@ export async function addExtensionDarwin(
|
|||||||
version: string
|
version: 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) {
|
||||||
// add script to enable extension is already installed along with php
|
const version_extension: string = version + extension;
|
||||||
let install_command = '';
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||||
switch (version + extension) {
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
||||||
case '5.6xdebug':
|
|
||||||
install_command = 'sudo pecl install xdebug-2.5.5 >/dev/null 2>&1';
|
switch (true) {
|
||||||
|
// match :extension
|
||||||
|
case /^:/.test(ext_name):
|
||||||
|
remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
|
||||||
|
return;
|
||||||
|
// Match none
|
||||||
|
case /^none$/.test(ext_name):
|
||||||
|
add_script += '\ndisable_all_shared';
|
||||||
|
return;
|
||||||
|
// match extensions for compiling from source
|
||||||
|
case /.+-.+\/.+@.+/.test(extension):
|
||||||
|
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||||
|
return;
|
||||||
|
// match 7.4relay...8.5relay
|
||||||
|
// match 5.3blackfire...8.5blackfire
|
||||||
|
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
||||||
|
// match couchbase, event, geos, ibm_db2, pdo_ibm, pdo_oci, oci8, http, pecl_http
|
||||||
|
// match 5.3ioncube...8.5ioncube
|
||||||
|
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.4phalcon5
|
||||||
|
// match 7.0zephir_parser...8.5zephir_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 /^couchbase|^event|^gearman$|^geos$|^ibm_db2$|^pdo_ibm$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||||
|
extension
|
||||||
|
):
|
||||||
|
case /^(5\.[3-6]|7\.[0-4]|8\.[0-5])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-5])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 7.2xdebug2 to 7.4xdebug2
|
||||||
|
case /^7\.[2-4]xdebug2$/.test(version_extension):
|
||||||
|
add_script += await utils.joins(
|
||||||
|
'\nadd_brew_extension',
|
||||||
|
'xdebug2',
|
||||||
|
ext_prefix,
|
||||||
|
'2.9.8'
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
// match brew extensions
|
||||||
|
case /(?<!5\.[3-5])(amqp|apcu|brotli|excimer|expect|gmagick|gnupg|grpc|igbinary|imagick|imap|interbase|lua|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)/.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 ' + extension + ' >/dev/null 2>&1';
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -47,12 +131,117 @@ export async function addExtensionWindows(
|
|||||||
version: string
|
version: 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 = '';
|
||||||
// add script to enable extension is already installed along with php
|
await utils.asyncForEach(extensions, async function (extension: string) {
|
||||||
script += '\nAdd-Extension ' + extension;
|
const [ext_name, ext_version]: string[] = extension.split('-');
|
||||||
|
const version_extension: string = version + extension;
|
||||||
|
let matches: RegExpExecArray;
|
||||||
|
switch (true) {
|
||||||
|
// Match :extension
|
||||||
|
case /^:/.test(ext_name):
|
||||||
|
remove_script += '\nDisable-Extension' + ext_name.replace(/:/g, ' ');
|
||||||
|
break;
|
||||||
|
// Match none
|
||||||
|
case /^none$/.test(ext_name):
|
||||||
|
add_script += '\nDisable-AllShared';
|
||||||
|
break;
|
||||||
|
// match 5.3blackfire...8.5blackfire
|
||||||
|
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
||||||
|
// match ibm_db2, pdo_ibm, pdo_oci and oci8
|
||||||
|
// match 5.3ioncube...8.5ioncube
|
||||||
|
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.4phalcon5
|
||||||
|
// match 7.1pecl_http...8.5pecl_http and 7.1http...8.5http
|
||||||
|
// match 7.0zephir_parser...8.5zephir_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-5])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\.[0-5])(pecl_)?http/.test(version_extension):
|
||||||
|
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
|
||||||
|
case /^(7\.[0-4]|8\.[0-5])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;
|
||||||
|
default:
|
||||||
|
add_script += '\nAdd-Extension ' + extension;
|
||||||
|
break;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return script;
|
return add_script + remove_script;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -66,52 +255,110 @@ export async function addExtensionLinux(
|
|||||||
version: string
|
version: 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) {
|
||||||
// add script to enable extension is already installed along with php
|
const version_extension: string = version + extension;
|
||||||
|
const [ext_name, ext_version]: string[] = extension
|
||||||
|
.split(/-(.+)/)
|
||||||
|
.filter(Boolean);
|
||||||
|
const ext_prefix = await utils.getExtensionPrefix(ext_name);
|
||||||
|
|
||||||
let install_command = '';
|
switch (true) {
|
||||||
switch (version + extension) {
|
// Match :extension
|
||||||
case '7.2phalcon3':
|
case /^:/.test(ext_name):
|
||||||
case '7.3phalcon3':
|
remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
|
||||||
install_command =
|
return;
|
||||||
'sh ' +
|
// Match none
|
||||||
path.join(__dirname, '../src/scripts/phalcon.sh') +
|
case /^none$/.test(ext_name):
|
||||||
' master ' +
|
add_script += '\ndisable_all_shared';
|
||||||
version +
|
return;
|
||||||
' >/dev/null 2>&1';
|
// match extensions for compiling from source
|
||||||
break;
|
case /.+-.+\/.+@.+/.test(extension):
|
||||||
case '7.2phalcon4':
|
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||||
case '7.3phalcon4':
|
return;
|
||||||
case '7.4phalcon4':
|
// match 7.4relay...8.5relay
|
||||||
install_command =
|
// match 5.3blackfire...8.5blackfire
|
||||||
'sh ' +
|
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
||||||
path.join(__dirname, '../src/scripts/phalcon.sh') +
|
// match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
|
||||||
' 4.0.x ' +
|
// match couchbase, geos, ibm_db2, pdo_ibm, pdo_oci, oci8, http, pecl_http
|
||||||
version +
|
// match 5.3ioncube...8.5ioncube
|
||||||
' >/dev/null 2>&1';
|
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, 7.4phalcon5...8.4phalcon5
|
||||||
|
// match 7.0zephir_parser...8.5zephir_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-5])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-5])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;
|
||||||
default:
|
default:
|
||||||
install_command =
|
|
||||||
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y php' +
|
|
||||||
version +
|
|
||||||
'-' +
|
|
||||||
extension.replace('pdo_', '').replace('pdo-', '') +
|
|
||||||
' >/dev/null 2>&1 || sudo pecl install ' +
|
|
||||||
extension +
|
|
||||||
' >/dev/null 2>&1';
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -119,29 +366,28 @@ 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 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 +=
|
script += log + (await utils.suppressOutput(os));
|
||||||
(await utils.stepLog('Setup Extensions', os_version)) +
|
|
||||||
(await utils.suppressOutput(os_version));
|
|
||||||
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));
|
return script + (await addExtensionWindows(extension_csv, version));
|
||||||
case 'darwin':
|
case 'darwin':
|
||||||
@@ -150,8 +396,8 @@ export async function addExtension(
|
|||||||
return script + (await addExtensionLinux(extension_csv, version));
|
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'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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}`};
|
||||||
|
}
|
||||||
|
}
|
||||||
+53
-48
@@ -1,72 +1,77 @@
|
|||||||
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 utils from './utils';
|
import * as utils from './utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 = utils.sanitizeShellInput(
|
||||||
const extension_csv: string = await utils.getInput('extension-csv', false);
|
await utils.getInput('extensions', false),
|
||||||
const ini_values_csv: string = await utils.getInput('ini-values-csv', false);
|
true
|
||||||
|
);
|
||||||
|
const ini_values_csv: string = await utils.getInput('ini-values', false);
|
||||||
const coverage_driver: string = await utils.getInput('coverage', false);
|
const coverage_driver: string = await utils.getInput('coverage', false);
|
||||||
|
const tools_csv: string = await utils.getInput('tools', false);
|
||||||
let script: string = await utils.readScript(filename, version, os_version);
|
const version: string = await utils.parseVersion(
|
||||||
|
await utils.readPHPVersion()
|
||||||
|
);
|
||||||
|
const ini_file: string = await utils.parseIniFile(
|
||||||
|
await utils.getInput('ini-file', false)
|
||||||
|
);
|
||||||
|
let script = await utils.joins('.', script_path, `'${version}'`, ini_file);
|
||||||
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;
|
||||||
const version: string = await utils.getVersion();
|
const tool = await utils.scriptTool(os);
|
||||||
// check the os version and run the respective script
|
const run_path = await getScript(os);
|
||||||
let script_path = '';
|
await exec(tool + run_path);
|
||||||
switch (os_version) {
|
|
||||||
case 'darwin':
|
|
||||||
script_path = await build(os_version + '.sh', version, os_version);
|
|
||||||
await exec('sh ' + script_path + ' ' + version + ' ' + __dirname);
|
|
||||||
break;
|
|
||||||
case 'linux': {
|
|
||||||
const pecl: string = await utils.getInput('pecl', false);
|
|
||||||
script_path = await build(os_version + '.sh', version, os_version);
|
|
||||||
await exec('sh ' + script_path + ' ' + version + ' ' + pecl);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'win32':
|
|
||||||
script_path = await build('win32.ps1', version, os_version);
|
|
||||||
await exec(
|
|
||||||
'pwsh ' + script_path + ' -version ' + version + ' -dir ' + __dirname
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
core.setFailed(error.message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// call the run function
|
// call the run function
|
||||||
run();
|
(async () => {
|
||||||
|
await run();
|
||||||
|
})().catch(error => {
|
||||||
|
core.setFailed(error.message);
|
||||||
|
});
|
||||||
|
|||||||
@@ -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,115 +0,0 @@
|
|||||||
tick="✓"
|
|
||||||
cross="✗"
|
|
||||||
|
|
||||||
step_log() {
|
|
||||||
message=$1
|
|
||||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
version='7.4.0RC6'
|
|
||||||
step_log "Setup dependencies"
|
|
||||||
for package in pkg-config autoconf bison re2c openssl@1.1 krb5 enchant libffi freetype intltool icu4c libiconv t1lib gd libzip gmp tidyp libxml2 libxslt postgresql curl;
|
|
||||||
do
|
|
||||||
brew install "$package" >/dev/null 2>&1
|
|
||||||
add_log "$tick" "$package" "Installed"
|
|
||||||
done
|
|
||||||
brew link icu4c gettext --force >/dev/null 2>&1
|
|
||||||
|
|
||||||
for package in gettext gmp krb5 icu4c bison openssl@1.1 libxml2 libffi libxslt libiconv pkgconfig enchant krb5 readline libedit freetype;
|
|
||||||
do
|
|
||||||
caps_package=$(echo "$package" | tr '[:lower:]' '[:upper:]')
|
|
||||||
{
|
|
||||||
echo 'export PATH="/usr/local/opt/'"$package"'/bin:$PATH"'
|
|
||||||
echo 'export PKG_CONFIG_PATH="/usr/local/opt/'$package'/lib/pkgconfig:$PKG_CONFIG_PATH"'
|
|
||||||
echo 'export '"$caps_package"'_LIBS="-L/usr/local/opt/'$package'/lib"'
|
|
||||||
echo 'export '"$caps_package"'_CFLAGS="-I/usr/local/opt/'$package'/include"'
|
|
||||||
} >> ~/.bash_profile;
|
|
||||||
done
|
|
||||||
{
|
|
||||||
echo 'export ICONV_LIBS="-L/usr/local/opt/libiconv/lib"'
|
|
||||||
echo 'export ICONV_CFLAGS="-I/usr/local/opt/libiconv/include"'
|
|
||||||
echo 'export LIBXML_LIBS="-L/usr/local/opt/libxml2/lib"'
|
|
||||||
echo 'export LIBXML_CFLAGS="-I/usr/local/opt/libxml2/include"'
|
|
||||||
echo 'export ICU_LIBS="-L/usr/local/opt/icu4c/lib"'
|
|
||||||
echo 'export ICU_CFLAGS="-I/usr/local/opt/icu4c/include"'
|
|
||||||
echo 'export OPENSSL_LIBS="-L/usr/local/opt/openssl@1.1/lib -lcrypto"'
|
|
||||||
echo 'export OPENSSL_CFLAGS="-I/usr/local/opt/openssl@1.1/include"'
|
|
||||||
echo 'export OPENSSL_ROOT_DIR="/usr/local/opt/openssl@1.1/"'
|
|
||||||
echo 'export OPENSSL_LIB_DIR="/usr/local/opt/openssl@1.1/lib"'
|
|
||||||
echo 'export OPENSSL_INCLUDE_DIR="/usr/local/opt/openssl@1.1/include"'
|
|
||||||
echo 'export PKG_CONFIG="/usr/local/opt/pkgconfig/bin/pkg-config"'
|
|
||||||
echo 'export EXTRA_LIBS="/usr/local/opt/readline/lib/libhistory.dylib
|
|
||||||
/usr/local/opt/readline/lib/libreadline.dylib
|
|
||||||
/usr/local/opt/openssl@1.1/lib/libssl.dylib
|
|
||||||
/usr/local/opt/openssl@1.1/lib/libcrypto.dylib
|
|
||||||
/usr/local/opt/icu4c/lib/libicudata.dylib
|
|
||||||
/usr/local/opt/icu4c/lib/libicui18n.dylib
|
|
||||||
/usr/local/opt/icu4c/lib/libicuio.dylib
|
|
||||||
/usr/local/opt/icu4c/lib/libicutu.dylib
|
|
||||||
/usr/local/opt/icu4c/lib/libicuuc.dylib"'
|
|
||||||
} >> ~/.bash_profile
|
|
||||||
config_file=$2/../src/configs/config.yaml
|
|
||||||
|
|
||||||
step_log "Setup PHPBrew"
|
|
||||||
curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew >/dev/null 2>&1
|
|
||||||
chmod +x ./phpbrew
|
|
||||||
sudo mv phpbrew /usr/local/bin/phpbrew
|
|
||||||
sudo mkdir -p /opt/phpbrew
|
|
||||||
sudo mkdir -p /usr/local/lib
|
|
||||||
sudo mkdir -p /usr/local/bin
|
|
||||||
sudo phpbrew init --root=/opt/phpbrew --config="$config_file" >/dev/null 2>&1
|
|
||||||
sudo chmod -R 777 /opt/phpbrew
|
|
||||||
export PHPBREW_ROOT=/opt/phpbrew
|
|
||||||
export PHPBREW_HOME=/opt/phpbrew
|
|
||||||
echo "[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc" >> ~/.bashrc
|
|
||||||
add_log "$tick" "PHPBrew" "Installed"
|
|
||||||
|
|
||||||
source ~/.bash_profile >/dev/null 2>&1
|
|
||||||
source ~/.bashrc >/dev/null 2>&1
|
|
||||||
|
|
||||||
step_log "Setup PHP and Composer"
|
|
||||||
phpbrew install -j 6 $version +dev >/dev/null 2>&1
|
|
||||||
phpbrew switch $version
|
|
||||||
sudo ln -sf /opt/phpbrew/php/php-$version/bin/* /usr/local/bin/
|
|
||||||
sudo ln -sf /opt/phpbrew/php/php-$version/etc/php.ini /etc/php.ini
|
|
||||||
ini_file=$(php --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
|
||||||
ext_dir=$(php -i | grep "extension_dir => /opt" | sed -e "s|.*=> s*||")
|
|
||||||
pecl config-set php_ini "$ini_file" >/dev/null 2>&1
|
|
||||||
sudo chmod 777 "$ini_file"
|
|
||||||
brew install composer >/dev/null 2>&1
|
|
||||||
|
|
||||||
add_log "$tick" "PHP" "Installed PHP$version"
|
|
||||||
add_log "$tick" "Composer" "Installed"
|
|
||||||
|
|
||||||
add_extension() {
|
|
||||||
extension=$1
|
|
||||||
install_command=$2
|
|
||||||
prefix=$3
|
|
||||||
if ! php -m | grep -i -q "$extension" && [ -e "$ext_dir/$extension.so" ]; then
|
|
||||||
echo "$prefix=$extension" >>"$ini_file" && add_log "$tick" "$extension" "Enabled"
|
|
||||||
elif php -m | grep -i -q "$extension"; then
|
|
||||||
add_log "$tick" "$extension" "Enabled"
|
|
||||||
elif ! php -m | grep -i -q "$extension"; then
|
|
||||||
exists=$(curl -sL https://pecl.php.net/json.php?package="$extension" -w "%{http_code}" -o /dev/null)
|
|
||||||
if [ "$exists" = "200" ]; then
|
|
||||||
(
|
|
||||||
eval "$install_command" && \
|
|
||||||
add_log "$tick" "$extension" "Installed and enabled"
|
|
||||||
) || add_log "$cross" "$extension" "Could not install $extension on PHP$version"
|
|
||||||
else
|
|
||||||
if ! php -m | grep -i -q "$extension"; then
|
|
||||||
add_log "$cross" "$extension" "Could not find $extension for PHP$version on PECL"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user