mirror of
https://github.com/shivammathur/setup-php.git
synced 2026-05-14 17:35:05 +07:00
Compare commits
771 Commits
2.16.0
...
more-verbo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
125b7661d7 | ||
|
|
6969e44b03 | ||
|
|
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 |
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"env": { "node": true, "jest": true },
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"parserOptions": { "ecmaVersion": 2019, "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"
|
||||
],
|
||||
"plugins": ["@typescript-eslint", "jest"]
|
||||
}
|
||||
79
.github/CONTRIBUTING.md
vendored
79
.github/CONTRIBUTING.md
vendored
@@ -1,37 +1,26 @@
|
||||
# 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
|
||||
|
||||
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.
|
||||
* Make your bug fix or feature addition.
|
||||
* Add tests for it, so we don't break it in a future version unintentionally.
|
||||
* If editing the scripts, create a demo integration test.
|
||||
* Send a pull request to the develop branch with all the details.
|
||||
|
||||
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 personally and feel free to remind.
|
||||
|
||||
## Coding Guidelines
|
||||
|
||||
## Using setup-php from a Git checkout
|
||||
|
||||
The following commands can be used to perform the initial checkout of setup-php:
|
||||
To get started fork `setup-php` and clone it using git:
|
||||
|
||||
```bash
|
||||
$ git clone https://github.com/shivammathur/setup-php.git
|
||||
git clone https://github.com/<your-username>/setup-php.git
|
||||
|
||||
$ cd setup-php
|
||||
```
|
||||
|
||||
Install setup-php dependencies using [npm](https://www.npmjs.com/):
|
||||
|
||||
```bash
|
||||
$ npm install
|
||||
cd setup-php
|
||||
```
|
||||
|
||||
If you are using `Windows` configure `git` to handle line endings.
|
||||
@@ -40,31 +29,55 @@ If you are using `Windows` configure `git` to handle line endings.
|
||||
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.
|
||||
* Add tests for it, so we don't break it in a future version unintentionally.
|
||||
* 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.
|
||||
|
||||
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
|
||||
|
||||
This project comes with `.prettierrc.json` and `eslintrc.json` configuration files. Please run the following commands to fix and verify the code quality.
|
||||
|
||||
```bash
|
||||
$ npm run format
|
||||
$ npm run lint
|
||||
npm run format
|
||||
npm run lint
|
||||
```
|
||||
|
||||
## Running the test suite
|
||||
### Running the test suite
|
||||
|
||||
After following the steps shown above, The `setup-php` tests in the `__tests__` directory can be run using this command:
|
||||
|
||||
```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
|
||||
$ 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)
|
||||
|
||||
94
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
94
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
name: Bug report
|
||||
description: Nice, you found a bug!
|
||||
title: "Bug: "
|
||||
labels: ["bug"]
|
||||
assignees: ["shivammathur"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: "Please fill out the sections below to help us address your issue."
|
||||
|
||||
- type: textarea
|
||||
id: bug-description
|
||||
attributes:
|
||||
label: "Describe the bug"
|
||||
placeholder: "Please describe the bug concisely."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
id: version
|
||||
attributes:
|
||||
label: "Version"
|
||||
description: "I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`."
|
||||
options:
|
||||
- label: "v2"
|
||||
- label: "v1"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: dropdown
|
||||
id: runners
|
||||
attributes:
|
||||
label: "Runners"
|
||||
description: "Please choose the GitHub Action runner your workflow uses."
|
||||
options:
|
||||
- "GitHub Hosted"
|
||||
- "Self Hosted"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: operating-systems
|
||||
attributes:
|
||||
label: "Operating systems"
|
||||
placeholder: "e.g., Ubuntu 22.04, Windows Server 2022, etc."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: php-versions
|
||||
attributes:
|
||||
label: "PHP versions"
|
||||
placeholder: "e.g., PHP 7.4, PHP 8.0, etc."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: steps-to-reproduce
|
||||
attributes:
|
||||
label: "To Reproduce"
|
||||
placeholder: "Please provide the relevant steps of your workflow `.yml` file."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: expected-behavior
|
||||
attributes:
|
||||
label: "Expected behavior"
|
||||
placeholder: "A clear and concise description of what you expected to happen."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: screenshots-logs
|
||||
attributes:
|
||||
label: "Screenshots/Logs"
|
||||
placeholder: "Drag and drop images or paste logs here..."
|
||||
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: "Additional context"
|
||||
placeholder: "Add any other context about the problem here."
|
||||
|
||||
- type: dropdown
|
||||
id: willing-to-submit-pr
|
||||
attributes:
|
||||
label: "Are you willing to submit a PR?"
|
||||
description: "We accept pull requests targeting the develop branch."
|
||||
options:
|
||||
- "Yes"
|
||||
- "No"
|
||||
validations:
|
||||
required: true
|
||||
42
.github/ISSUE_TEMPLATE/bug_report.md
vendored
42
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,42 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Nice, you found a bug!
|
||||
title: ''
|
||||
labels: 'bug'
|
||||
assignees: 'shivammathur'
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
<!-- Please describe the bug concisely. -->
|
||||
|
||||
**Version**
|
||||
- [ ] I have checked releases, and the bug exists in the latest patch version of `v1` or `v2`.
|
||||
- [ ] `v2`
|
||||
- [ ] `v1`
|
||||
|
||||
**Runners**
|
||||
<!-- Please mark the GitHub Action runner your workflow uses. -->
|
||||
- [ ] GitHub Hosted
|
||||
- [ ] Self Hosted
|
||||
|
||||
**Operating systems**
|
||||
<!-- Please mention the operating systems your workflow uses. -->
|
||||
|
||||
**PHP versions**
|
||||
<!-- Please mention the PHP versions your workflow uses. -->
|
||||
|
||||
**To Reproduce**
|
||||
<!-- Please provide the relevant steps of your workflow `.yml` file. -->
|
||||
|
||||
**Expected behavior**
|
||||
<!-- A clear and concise description of what you expected to happen. -->
|
||||
|
||||
**Screenshots/Logs**
|
||||
<!-- If applicable, add screenshots or logs to help explain your problem. -->
|
||||
|
||||
**Additional context**
|
||||
<!-- Add any other context about the problem here. -->
|
||||
|
||||
**Are you willing to submit a PR?**
|
||||
<!-- We accept pull requests targeting the develop branch. -->
|
||||
58
.github/ISSUE_TEMPLATE/feature.yml
vendored
Normal file
58
.github/ISSUE_TEMPLATE/feature.yml
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
name: Feature request
|
||||
description: Suggest a new feature
|
||||
title: "Feature: "
|
||||
labels: ["enhancement"]
|
||||
assignees: ["shivammathur"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: "Please fill out the sections below to help us understand your new feature proposal."
|
||||
|
||||
- type: textarea
|
||||
id: feature-description
|
||||
attributes:
|
||||
label: "Describe the feature"
|
||||
placeholder: "A clear and concise description of what you want and why."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: checkboxes
|
||||
id: version-check
|
||||
attributes:
|
||||
label: "Please check the latest release"
|
||||
options:
|
||||
- label: "I have checked releases, and the feature is missing in the latest patch version of `v2`."
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: underlying-issue
|
||||
attributes:
|
||||
label: "Underlying issue"
|
||||
placeholder: "Please describe the issue this would solve."
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: alternatives
|
||||
attributes:
|
||||
label: "Describe alternatives"
|
||||
placeholder: "Please mention any alternative solutions you've considered."
|
||||
validations:
|
||||
required: false
|
||||
|
||||
- type: textarea
|
||||
id: additional-context
|
||||
attributes:
|
||||
label: "Additional context"
|
||||
placeholder: "Drag and drop images or paste any additional information here..."
|
||||
|
||||
- type: dropdown
|
||||
id: willing-to-submit-pr
|
||||
attributes:
|
||||
label: "Are you willing to submit a PR?"
|
||||
description: "We accept pull requests targeting the develop branch."
|
||||
options:
|
||||
- "Yes"
|
||||
- "No"
|
||||
validations:
|
||||
required: true
|
||||
26
.github/ISSUE_TEMPLATE/feature_request.md
vendored
26
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,26 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest a new feature
|
||||
title: ''
|
||||
labels: 'enhancement'
|
||||
assignees: 'shivammathur'
|
||||
|
||||
---
|
||||
|
||||
**Describe the feature**
|
||||
<!-- Please describe concisely the feature you want to add. -->
|
||||
|
||||
**Version**
|
||||
- [ ] I have checked releases, and the feature is missing in the latest patch version of `v2`.
|
||||
|
||||
**Underlying issue**
|
||||
<!-- Please describe the issue this would solve. -->
|
||||
|
||||
**Describe alternatives**
|
||||
<!-- Please mention any alternative solutions you've considered. -->
|
||||
|
||||
**Additional context**
|
||||
<!-- Add any other context or screenshots about the feature request here. -->
|
||||
|
||||
**Are you willing to submit a PR?**
|
||||
<!-- We accept pull requests targeting the develop branch. -->
|
||||
23
.github/SECURITY.md
vendored
23
.github/SECURITY.md
vendored
@@ -2,29 +2,20 @@
|
||||
|
||||
## Supported Versions
|
||||
|
||||
The following versions of this project are supported for security updates.
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 1.11.x | :white_check_mark: |
|
||||
| 2.14.x | :white_check_mark: |
|
||||
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 patches of the following PHP versions.
|
||||
This security policy only applies to the latest patch releases of the following PHP versions.
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 7.3 | :white_check_mark: |
|
||||
| 7.4 | :white_check_mark: |
|
||||
| 8.0 | :white_check_mark: |
|
||||
|---------|--------------------|
|
||||
| 8.1 | :white_check_mark: |
|
||||
| 8.2 | :white_check_mark: |
|
||||
| 8.3 | :white_check_mark: |
|
||||
| 8.4 | :white_check_mark: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you have found any issues that might have security implications in the versions supported, please send a report privately to [contact@shivammathur.com](mailto:contact@shivammathur.com).
|
||||
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.
|
||||
|
||||
## Tidelift
|
||||
|
||||
If you use this GitHub Action through a Tidelift subscription, please refer to [https://tidelift.com/security](https://tidelift.com/security).
|
||||
4
.github/codeql/codeql-configuration.yml
vendored
Normal file
4
.github/codeql/codeql-configuration.yml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
name : CodeQL Configuration
|
||||
|
||||
paths:
|
||||
- './src'
|
||||
7
.github/dependabot.yml
vendored
Normal file
7
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
target-branch: "develop"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
33
.github/workflows/codeql.yml
vendored
Normal file
33
.github/workflows/codeql.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
name: CodeQL Workflow
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 15 * * 6'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
codeql:
|
||||
if: github.event.repository.fork == false
|
||||
permissions:
|
||||
actions: read # for github/codeql-action/init to get workflow details
|
||||
contents: read # for actions/checkout to fetch code
|
||||
security-events: write # for github/codeql-action/autobuild to send a status report
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v4
|
||||
with:
|
||||
config-file: ./.github/codeql/codeql-configuration.yml
|
||||
languages: javascript
|
||||
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v4
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v4
|
||||
99
.github/workflows/docs.yml
vendored
99
.github/workflows/docs.yml
vendored
@@ -3,73 +3,134 @@ on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 15 * * 6'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
create:
|
||||
if: github.event.repository.fork == false
|
||||
permissions:
|
||||
contents: none
|
||||
name: Create
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-2019, macos-10.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']
|
||||
operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15-intel]
|
||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5', '8.6']
|
||||
steps:
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
- name: Save unix
|
||||
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-2019'
|
||||
if: matrix.operating-system != 'windows-2022'
|
||||
run: |
|
||||
php -m >> "$file.all"
|
||||
- name: Create file with all extensions for Windows
|
||||
env:
|
||||
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||
version: ${{ matrix.php-versions }}
|
||||
if: matrix.operating-system == 'windows-2022'
|
||||
run: |
|
||||
php -m | Out-File -FilePath "$env:file.all" -Append
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: none
|
||||
tools: none
|
||||
- name: Create final file for Linux and macOS
|
||||
env:
|
||||
file: php${{ matrix.php-versions }}-${{ matrix.operating-system }}.md
|
||||
version: ${{ matrix.php-versions }}
|
||||
if: matrix.operating-system != 'windows-2022'
|
||||
run: |
|
||||
echo "## PHP $version" >> "$file"
|
||||
printf "\n" >> "$file"
|
||||
echo "\`\`\`" >> "$file"
|
||||
php -m >> "$file"
|
||||
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"
|
||||
- name: Save Windows
|
||||
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-2019'
|
||||
if: matrix.operating-system == 'windows-2022'
|
||||
run: |
|
||||
Write-Output "## PHP ${{ matrix.php-versions }}`n" | Out-File -FilePath "$env:file"
|
||||
Write-Output "``````" | Out-File -FilePath "$env:file" -Append
|
||||
php -m | Out-File -FilePath "$env:file" -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
|
||||
- uses: actions/upload-artifact@v2
|
||||
Remove-Item "$env:file.all" -Force
|
||||
Remove-Item "$env:file.builtin" -Force
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: lists
|
||||
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@v2
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: ${{ github.repository }}.wiki
|
||||
- uses: actions/download-artifact@v2
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v8
|
||||
with:
|
||||
path: ${{ github.workspace }}
|
||||
- name: Combine
|
||||
run: |
|
||||
path: ${{ github.workspace }}/lists
|
||||
pattern: lists-*
|
||||
merge-multiple: true
|
||||
- name: Configure Git
|
||||
run : |
|
||||
git config --local user.email "${{ secrets.email }}"
|
||||
git config --local user.name "${{ github.repository_owner }}"
|
||||
for os in ubuntu-20.04 ubuntu-18.04 windows-2019 macos-10.15 macos-11; do
|
||||
- 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; do
|
||||
if [ "$os" = "macos-11" ]; then
|
||||
cat lists/php"$version"-macos-10.15.md >> Php-extensions-loaded-on-"$os".md
|
||||
for version in 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 8.0 8.1 8.2 8.3 8.4 8.5 8.6; do
|
||||
if [[ "${os%-*}" = "macos" ]]; then
|
||||
cat lists/php"$version"-macos-15-intel.md >> Php-extensions-loaded-on-"$os".md
|
||||
elif [ "${os%-*}" = "windows" ]; then
|
||||
cat lists/php"$version"-windows-2022.md >> Php-extensions-loaded-on-"$os".md
|
||||
else
|
||||
cat lists/php"$version"-"$os".md >> Php-extensions-loaded-on-"$os".md
|
||||
fi
|
||||
done
|
||||
done
|
||||
rm -rf ./lists
|
||||
- name: Update
|
||||
run: |
|
||||
if [ "$(git status --porcelain=v1 2>/dev/null | wc -l)" != "0" ]; then
|
||||
git add .
|
||||
git commit -m "Update PHP extensions on wiki - $(date +'%d-%m-%y')"
|
||||
|
||||
@@ -2,7 +2,7 @@ name: Node workflow
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
- develop
|
||||
- verbose
|
||||
paths-ignore:
|
||||
@@ -10,12 +10,15 @@ on:
|
||||
- 'examples/**'
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
- develop
|
||||
- verbose
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- 'examples/**'
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
run:
|
||||
name: Run
|
||||
@@ -25,25 +28,15 @@ jobs:
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@v1
|
||||
with:
|
||||
allowed-endpoints:
|
||||
codecov.io.:443
|
||||
github.com.:443
|
||||
nodejs.org.:443
|
||||
raw.githubusercontent.com.:443
|
||||
registry.npmjs.org.:443
|
||||
setup-php.com.:443
|
||||
storage.googleapis.com.:443
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Setup Node.js 16.x
|
||||
uses: actions/setup-node@v1
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
node-version: 16.x
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Setup Node.js 24.x
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 24.x
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
@@ -57,7 +50,14 @@ jobs:
|
||||
- name: Run tests
|
||||
run: npm test
|
||||
|
||||
- name: Run npm audit
|
||||
run: npm audit
|
||||
|
||||
- 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/lcov.info -n github-actions-codecov-${{ matrix.operating-system }}
|
||||
uses: codecov/codecov-action@v6
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
files: coverage/lcov.info
|
||||
name: github-actions-codecov-${{ matrix.operating-system }}
|
||||
fail_ci_if_error: false
|
||||
verbose: true
|
||||
@@ -3,7 +3,7 @@ on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
- develop
|
||||
- verbose
|
||||
paths-ignore:
|
||||
@@ -11,12 +11,16 @@ on:
|
||||
- 'examples/**'
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
- develop
|
||||
- verbose
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
- 'examples/**'
|
||||
permissions:
|
||||
contents: read
|
||||
env:
|
||||
default-php-version: '8.2'
|
||||
jobs:
|
||||
run:
|
||||
name: Run
|
||||
@@ -24,41 +28,51 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-20.04, ubuntu-18.04, windows-latest, macos-latest]
|
||||
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']
|
||||
operating-system: [ubuntu-24.04, ubuntu-22.04, windows-2022, macos-15-intel]
|
||||
php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5', '8.6']
|
||||
include:
|
||||
- operating-system: ubuntu-24.04
|
||||
php-versions: ''
|
||||
php-version-file: 'php-version-file'
|
||||
env:
|
||||
extensions: xml, opcache, xdebug, pcov
|
||||
extensions: xml, opcache, xdebug, pcov, gd
|
||||
key: cache-v5
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Setup cache environment
|
||||
id: cache-env
|
||||
uses: shivammathur/cache-extensions@develop
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
php-version: ${{ matrix.php-versions || env.default-php-version }}
|
||||
extensions: ${{ env.extensions }}
|
||||
key: ${{ env.key }}
|
||||
|
||||
- name: Cache extensions
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.cache-env.outputs.dir }}
|
||||
key: ${{ steps.cache-env.outputs.key }}
|
||||
restore-keys: ${{ steps.cache-env.outputs.key }}
|
||||
|
||||
- name: Stage php-version-file
|
||||
if: ${{ matrix.php-version-file == 'php-version-file' }}
|
||||
run: |
|
||||
echo ${{ env.default-php-version }} > php-version-file
|
||||
|
||||
- name: Setup PHP with extensions and custom config
|
||||
run: node dist/index.js
|
||||
env:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
php-version-file: ${{ matrix.php-version-file }}
|
||||
extensions: ${{ env.extensions }}
|
||||
ini-values: post_max_size=256M, short_open_tag=On, date.timezone=Asia/Kolkata
|
||||
|
||||
- name: Testing PHP version
|
||||
run: |
|
||||
php -v
|
||||
php -r "if(strpos(phpversion(), '${{ matrix.php-versions }}') === false) {throw new Exception('Wrong PHP version Installed');}"
|
||||
php -r "if(strpos(phpversion(), '${{ matrix.php-versions || env.default-php-version }}') === false) {throw new Exception('Wrong PHP version Installed');}"
|
||||
|
||||
- name: Testing Composer version
|
||||
run: |
|
||||
@@ -67,6 +81,7 @@ jobs:
|
||||
- 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');}"
|
||||
@@ -16,29 +16,22 @@ jobs:
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Harden Runner
|
||||
uses: step-security/harden-runner@v1
|
||||
with:
|
||||
allowed-endpoints:
|
||||
github.com:443
|
||||
npm.pkg.github.com:443
|
||||
registry.npmjs.org:443
|
||||
|
||||
- name: Checkout release
|
||||
if: github.event_name != 'workflow_dispatch'
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Checkout tag
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
with:
|
||||
ref: ${{ github.event.inputs.tag }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '16.x'
|
||||
node-version: '24.x'
|
||||
registry-url: https://registry.npmjs.org
|
||||
|
||||
- name: Install dependencies and add lib
|
||||
@@ -50,11 +43,9 @@ jobs:
|
||||
- name: Publish to NPM
|
||||
if: "!contains(github.event.inputs.skip, 'skip-npm')"
|
||||
run: npm publish --access public
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
|
||||
- name: Change to GitHub Packages registry
|
||||
uses: actions/setup-node@v2
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
registry-url: https://npm.pkg.github.com
|
||||
scope: '@shivammathur'
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,7 +3,7 @@ node_modules/
|
||||
__tests__/runner/*
|
||||
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
|
||||
*.log
|
||||
|
||||
1
.node-version
Normal file
1
.node-version
Normal file
@@ -0,0 +1 @@
|
||||
20
|
||||
2
LICENSE
2
LICENSE
@@ -1,7 +1,7 @@
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2019-2021 shivammathur and contributors
|
||||
Copyright (c) shivammathur and contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -2,20 +2,19 @@ import * as config from '../src/config';
|
||||
|
||||
describe('Config tests', () => {
|
||||
it.each`
|
||||
ini_values | os_version | output
|
||||
ini_values | os | output
|
||||
${'a=b, c=d'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=b\nc=d"'}
|
||||
${'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[@]}}"'}
|
||||
${'a=b & ~c'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'b & ~c\'"'}
|
||||
${'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'}
|
||||
${'disable_functions="exec,system"'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "disable_functions=exec,system"'}
|
||||
${'a=$(id)'} | ${'linux'} | ${'echo "a=\'\\$(id)\'"'}
|
||||
${'a=$(id)'} | ${'win32'} | ${'Add-Content "$php_dir\\php.ini" "a=\'`$(id)\'"'}
|
||||
${'a=b, c=d'} | ${'openbsd'} | ${'Platform openbsd is not supported'}
|
||||
`(
|
||||
'checking addINIValues on $os_version',
|
||||
async ({ini_values, os_version, output}) => {
|
||||
expect(await config.addINIValues(ini_values, os_version)).toContain(
|
||||
output
|
||||
);
|
||||
}
|
||||
);
|
||||
`('checking addINIValues on $os', async ({ini_values, os, output}) => {
|
||||
expect(await config.addINIValues(ini_values, os)).toContain(output);
|
||||
});
|
||||
});
|
||||
|
||||
106
__tests__/core.test.ts
Normal file
106
__tests__/core.test.ts
Normal file
@@ -0,0 +1,106 @@
|
||||
import * as core from '../src/core';
|
||||
|
||||
describe('Core tests', () => {
|
||||
const originalEnv = process.env;
|
||||
const originalExitCode = process.exitCode;
|
||||
let stdoutOutput: string;
|
||||
const originalWrite = process.stdout.write;
|
||||
|
||||
beforeEach(() => {
|
||||
process.env = {...originalEnv};
|
||||
process.exitCode = undefined;
|
||||
stdoutOutput = '';
|
||||
process.stdout.write = jest.fn((chunk: string | Uint8Array): boolean => {
|
||||
stdoutOutput += chunk.toString();
|
||||
return true;
|
||||
}) as unknown as typeof process.stdout.write;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
process.env = originalEnv;
|
||||
process.exitCode = originalExitCode;
|
||||
process.stdout.write = originalWrite;
|
||||
});
|
||||
|
||||
it('checking issueCommand with no properties', () => {
|
||||
core.issueCommand('warning', {}, 'test message');
|
||||
expect(stdoutOutput).toContain('::warning::test message');
|
||||
});
|
||||
|
||||
it('checking issueCommand with properties', () => {
|
||||
core.issueCommand('error', {file: 'test.ts', line: '10'}, 'error message');
|
||||
expect(stdoutOutput).toContain(
|
||||
'::error file=test.ts,line=10::error message'
|
||||
);
|
||||
});
|
||||
|
||||
it('checking issueCommand escapes special characters in message', () => {
|
||||
core.issueCommand('warning', {}, 'line1\nline2\rline3%percent');
|
||||
expect(stdoutOutput).toContain(
|
||||
'::warning::line1%0Aline2%0Dline3%25percent'
|
||||
);
|
||||
});
|
||||
|
||||
it('checking issueCommand escapes special characters in properties', () => {
|
||||
core.issueCommand('error', {file: 'path:to,file'}, 'message');
|
||||
expect(stdoutOutput).toContain('::error file=path%3Ato%2Cfile::message');
|
||||
});
|
||||
|
||||
it('checking issueCommand with Error object', () => {
|
||||
const error = new Error('test error');
|
||||
core.issueCommand('error', {}, error);
|
||||
expect(stdoutOutput).toContain('::error::Error: test error');
|
||||
});
|
||||
|
||||
it('checking issueCommand filters empty properties', () => {
|
||||
core.issueCommand('warning', {file: 'test.ts', line: ''}, 'message');
|
||||
expect(stdoutOutput).toContain('::warning file=test.ts::message');
|
||||
});
|
||||
|
||||
it('checking error', () => {
|
||||
core.error('error message');
|
||||
expect(stdoutOutput).toContain('::error::error message');
|
||||
});
|
||||
|
||||
it('checking error with Error object', () => {
|
||||
core.error(new Error('error instance'));
|
||||
expect(stdoutOutput).toContain('::error::Error: error instance');
|
||||
});
|
||||
|
||||
it('checking setFailed', () => {
|
||||
core.setFailed('failure message');
|
||||
expect(process.exitCode).toBe(1);
|
||||
expect(stdoutOutput).toContain('::error::failure message');
|
||||
});
|
||||
|
||||
it('checking setFailed with Error object', () => {
|
||||
core.setFailed(new Error('failure error'));
|
||||
expect(process.exitCode).toBe(1);
|
||||
expect(stdoutOutput).toContain('::error::Error: failure error');
|
||||
});
|
||||
|
||||
it('checking getInput returns value', () => {
|
||||
process.env['INPUT_TEST-INPUT'] = 'test value';
|
||||
expect(core.getInput('test-input')).toBe('test value');
|
||||
});
|
||||
|
||||
it('checking getInput trims value', () => {
|
||||
process.env['INPUT_TEST-INPUT'] = ' trimmed ';
|
||||
expect(core.getInput('test-input')).toBe('trimmed');
|
||||
});
|
||||
|
||||
it('checking getInput returns empty string for missing input', () => {
|
||||
expect(core.getInput('missing-input')).toBe('');
|
||||
});
|
||||
|
||||
it('checking getInput throws for required missing input', () => {
|
||||
expect(() => core.getInput('missing-input', true)).toThrow(
|
||||
'Input required and not supplied: missing-input'
|
||||
);
|
||||
});
|
||||
|
||||
it('checking getInput handles spaces in name', () => {
|
||||
process.env['INPUT_INPUT_WITH_SPACES'] = 'spaced value';
|
||||
expect(core.getInput('input with spaces')).toBe('spaced value');
|
||||
});
|
||||
});
|
||||
@@ -4,6 +4,8 @@ describe('Config tests', () => {
|
||||
it.each`
|
||||
driver | php | os | output
|
||||
${'PCOV'} | ${'7.4'} | ${'win32'} | ${'Add-Extension pcov,Disable-Extension xdebug false'}
|
||||
${'pcov'} | ${'7.4'} | ${'win32'} | ${'$pcov_version = php -r "echo phpversion(\'pcov\');"'}
|
||||
${'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'}
|
||||
@@ -15,6 +17,8 @@ describe('Config tests', () => {
|
||||
${'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'}
|
||||
|
||||
@@ -18,13 +18,20 @@ describe('Extension tests', () => {
|
||||
${'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}) => {
|
||||
@@ -48,21 +55,28 @@ describe('Extension tests', () => {
|
||||
${'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}) => {
|
||||
@@ -91,7 +105,9 @@ describe('Extension tests', () => {
|
||||
${'pcov'} | ${'5.6'} | ${'add_log "$cross" "pcov" "pcov is not supported on PHP 5.6"'}
|
||||
${'pdo_oci'} | ${'7.3'} | ${'add_oci pdo_oci'}
|
||||
${'pecl_http'} | ${'7.3'} | ${'add_http'}
|
||||
${'relay-1.2.3'} | ${'7.4'} | ${'add_relay relay-1.2.3'}
|
||||
${'sqlite'} | ${'7.2'} | ${'add_extension sqlite3'}
|
||||
${'zephir_parser-v1.2.3'} | ${'7.2'} | ${'add_zephir_parser zephir_parser-v1.2.3'}
|
||||
`(
|
||||
'checking addExtensionOnDarwin for extension $extension on version $version',
|
||||
async ({extension, version, output}) => {
|
||||
@@ -110,10 +126,17 @@ describe('Extension tests', () => {
|
||||
const [formula, extension]: string[] = line.split('=');
|
||||
const prefix: string =
|
||||
extension == 'xdebug' ? 'zend_extension' : 'extension';
|
||||
const output: string = fs.existsSync(`src/scripts/ext/${extension}.sh`)
|
||||
? `add_${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, '7.3', output];
|
||||
return [
|
||||
formula,
|
||||
formula.match(/phalcon3|lua|propro/) ? '7.3' : '8.1',
|
||||
output
|
||||
];
|
||||
});
|
||||
|
||||
it.each(data)(
|
||||
|
||||
45
__tests__/fetch.test.ts
Normal file
45
__tests__/fetch.test.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import * as fetch from '../src/fetch';
|
||||
import nock from 'nock';
|
||||
|
||||
it('checking fetch', async () => {
|
||||
const host_url = 'https://example.com';
|
||||
const manifest_url = host_url + '/manifest';
|
||||
const ping_url = host_url + '/ping';
|
||||
|
||||
nock(host_url)
|
||||
.get('/manifest')
|
||||
.reply(200, {latest: 'latest'})
|
||||
.get('/manifest', '', {
|
||||
reqheaders: {authorization: 'Bearer invalid_token'}
|
||||
})
|
||||
.reply(401, {error: '401: Unauthorized'})
|
||||
.get('/ping')
|
||||
.twice()
|
||||
.reply(301, undefined, {
|
||||
Location: host_url + '/pong'
|
||||
})
|
||||
.get('/pong')
|
||||
.reply(200, 'pong')
|
||||
.get('/error')
|
||||
.replyWithError('Network failure');
|
||||
|
||||
let response: Record<string, string> = await fetch.fetch(manifest_url);
|
||||
expect(response.error).toBe(undefined);
|
||||
expect(response.data).toContain('latest');
|
||||
|
||||
response = await fetch.fetch(ping_url, '', 1);
|
||||
expect(response.error).toBe(undefined);
|
||||
expect(response.data).toContain('pong');
|
||||
|
||||
response = await fetch.fetch(ping_url, '', 0);
|
||||
expect(response.error).toBe('301: Redirect error');
|
||||
expect(response.data).toBe(undefined);
|
||||
|
||||
response = await fetch.fetch(manifest_url, 'invalid_token');
|
||||
expect(response.error).not.toBe(undefined);
|
||||
expect(response.data).toBe(undefined);
|
||||
|
||||
response = await fetch.fetch(host_url + '/error');
|
||||
expect(response.error).toContain('Fetch error:');
|
||||
expect(response.data).toBe(undefined);
|
||||
});
|
||||
@@ -5,96 +5,82 @@ import * as utils from '../src/utils';
|
||||
* Mock install.ts
|
||||
*/
|
||||
jest.mock('../src/install', () => ({
|
||||
getScript: jest.fn().mockImplementation(async (): Promise<string> => {
|
||||
getScript: jest
|
||||
.fn()
|
||||
.mockImplementation(async (os: string): Promise<string> => {
|
||||
const filename = os + (await utils.scriptExtension(os));
|
||||
const version: string = await utils.parseVersion(
|
||||
await utils.readPHPVersion()
|
||||
);
|
||||
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 tools_csv: string = process.env['tools'] || '';
|
||||
let script = 'initial script';
|
||||
script += tools_csv ? ' add_tool' : '';
|
||||
let script = await utils.joins(filename, version, ini_file);
|
||||
script += extension_csv ? ' install extensions' : '';
|
||||
script += tools_csv ? ' add_tool' : '';
|
||||
script += coverage_driver ? ' set coverage driver' : '';
|
||||
script += ini_values_csv ? ' edit php.ini' : '';
|
||||
return script;
|
||||
}),
|
||||
run: jest.fn().mockImplementation(async (): Promise<string> => {
|
||||
const os_version: string = process.env['RUNNER_OS'] || '';
|
||||
const version: string = await utils.parseVersion(
|
||||
await utils.getInput('php-version', true)
|
||||
);
|
||||
const tool = await utils.scriptTool(os_version);
|
||||
const filename = os_version + (await utils.scriptExtension(os_version));
|
||||
return [
|
||||
await install.getScript(filename, version, os_version),
|
||||
tool,
|
||||
filename,
|
||||
version,
|
||||
__dirname
|
||||
].join(' ');
|
||||
const os: string = process.env['RUNNER_OS'] || '';
|
||||
const tool = await utils.scriptTool(os);
|
||||
return tool + (await install.getScript(os));
|
||||
})
|
||||
}));
|
||||
|
||||
/**
|
||||
* Function to set the process.env
|
||||
*
|
||||
* @param version
|
||||
* @param os
|
||||
* @param extension_csv
|
||||
* @param ini_values_csv
|
||||
* @param coverage_driver
|
||||
* @param tools
|
||||
* Mock fetch.ts
|
||||
*/
|
||||
function setEnv(
|
||||
version: string | number,
|
||||
os: string,
|
||||
extension_csv: string,
|
||||
ini_values_csv: string,
|
||||
coverage_driver: string,
|
||||
tools: string
|
||||
): void {
|
||||
process.env['php-version'] = version.toString();
|
||||
process.env['RUNNER_OS'] = os;
|
||||
process.env['extensions'] = extension_csv;
|
||||
process.env['ini-values'] = ini_values_csv;
|
||||
process.env['coverage'] = coverage_driver;
|
||||
process.env['tools'] = tools;
|
||||
}
|
||||
jest.mock('../src/fetch', () => ({
|
||||
fetch: jest.fn().mockImplementation(() => {
|
||||
return {
|
||||
data: '{ "latest": "8.3", "lowest": "8.1", "highest": "8.3", "nightly": "8.4", "5.x": "5.6" }'
|
||||
};
|
||||
})
|
||||
}));
|
||||
|
||||
describe('Install', () => {
|
||||
it.each`
|
||||
version | os | extension_csv | ini_values_csv | coverage_driver | tools | output
|
||||
${'7.3'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${'initial script bash darwin.sh 7.3 ' + __dirname}
|
||||
${'7.3'} | ${'darwin'} | ${'a, b'} | ${'a=b'} | ${'x'} | ${''} | ${'initial script install extensions set coverage driver edit php.ini bash darwin.sh 7.3 ' + __dirname}
|
||||
${'7.4.1'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${'initial script bash darwin.sh 7.4 ' + __dirname}
|
||||
${'8'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${'initial script bash darwin.sh 8.0 ' + __dirname}
|
||||
${'8.0'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${'initial script bash darwin.sh 8.0 ' + __dirname}
|
||||
${'8.1'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${'initial script bash darwin.sh 8.1 ' + __dirname}
|
||||
${'7.3'} | ${'linux'} | ${''} | ${''} | ${''} | ${''} | ${'initial script bash linux.sh 7.3 ' + __dirname}
|
||||
${'7.3'} | ${'linux'} | ${'a, b'} | ${'a=b'} | ${'x'} | ${'phpunit'} | ${'initial script add_tool install extensions set coverage driver edit php.ini bash linux.sh 7.3 ' + __dirname}
|
||||
${'latest'} | ${'linux'} | ${''} | ${''} | ${''} | ${''} | ${'initial script bash linux.sh 8.1 ' + __dirname}
|
||||
${'7.0'} | ${'win32'} | ${''} | ${''} | ${''} | ${''} | ${'initial script pwsh win32.ps1 7.0 ' + __dirname}
|
||||
${'7.3'} | ${'win32'} | ${''} | ${''} | ${''} | ${''} | ${'initial script pwsh win32.ps1 7.3 ' + __dirname}
|
||||
${'7.3'} | ${'win32'} | ${'a, b'} | ${'a=b'} | ${'x'} | ${''} | ${'initial script install extensions set coverage driver edit php.ini pwsh win32.ps1 7.3 ' + __dirname}
|
||||
version | os | extension_csv | ini_file | ini_values_csv | coverage_driver | tools | output
|
||||
${'7.3'} | ${'darwin'} | ${''} | ${'production'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.3 production'}
|
||||
${'7.3'} | ${'darwin'} | ${'a, b'} | ${'development'} | ${'a=b'} | ${'x'} | ${''} | ${'bash darwin.sh 7.3 development install extensions set coverage driver edit php.ini'}
|
||||
${'7.4.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 7.4 none'}
|
||||
${'8'} | ${'darwin'} | ${''} | ${''} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 production'}
|
||||
${'8.0'} | ${'darwin'} | ${''} | ${'development'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.0 development'}
|
||||
${'8.1'} | ${'darwin'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash darwin.sh 8.1 none'}
|
||||
${'7.3'} | ${'linux'} | ${''} | ${'invalid'} | ${''} | ${''} | ${''} | ${'bash linux.sh 7.3 production'}
|
||||
${'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'}
|
||||
${'latest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.3 none'}
|
||||
${'lowest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.1 none'}
|
||||
${'highest'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.3 none'}
|
||||
${'nightly'} | ${'linux'} | ${''} | ${'none'} | ${''} | ${''} | ${''} | ${'bash linux.sh 8.4 none'}
|
||||
${'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'}
|
||||
`(
|
||||
'Test install on $os for $version with extensions=$extension_csv, ini_values=$ini_values_csv, coverage_driver=$coverage_driver, tools=$tools',
|
||||
async ({
|
||||
version,
|
||||
os,
|
||||
extension_csv,
|
||||
ini_file,
|
||||
ini_values_csv,
|
||||
coverage_driver,
|
||||
tools,
|
||||
output
|
||||
}) => {
|
||||
setEnv(
|
||||
version,
|
||||
os,
|
||||
extension_csv,
|
||||
ini_values_csv,
|
||||
coverage_driver,
|
||||
tools
|
||||
);
|
||||
|
||||
process.env['php-version'] = version.toString();
|
||||
process.env['RUNNER_OS'] = os;
|
||||
process.env['extensions'] = extension_csv;
|
||||
process.env['ini-file'] = ini_file;
|
||||
process.env['ini-values'] = ini_values_csv;
|
||||
process.env['coverage'] = coverage_driver;
|
||||
process.env['tools'] = tools;
|
||||
expect(await install.run()).toBe(output);
|
||||
}
|
||||
);
|
||||
|
||||
50
__tests__/packagist.test.ts
Normal file
50
__tests__/packagist.test.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import * as packagist from '../src/packagist';
|
||||
import nock from 'nock';
|
||||
|
||||
describe('search function', () => {
|
||||
const mockResponse = {
|
||||
packages: {
|
||||
'test-package': [
|
||||
{
|
||||
require: {
|
||||
php: '8.0.0'
|
||||
},
|
||||
version: '1.0.0'
|
||||
},
|
||||
{
|
||||
version: '2.0.0'
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
test('should return the version if matching php version is found', async () => {
|
||||
nock('https://repo.packagist.org')
|
||||
.get('/p2/test-package.json')
|
||||
.reply(200, mockResponse);
|
||||
const result = await packagist.search('test-package', '8.0');
|
||||
expect(result).toBe('1.0.0');
|
||||
});
|
||||
|
||||
test('should return null if no matching php version is found', async () => {
|
||||
nock('https://repo.packagist.org')
|
||||
.get('/p2/test-package.json')
|
||||
.reply(200, mockResponse);
|
||||
const result = await packagist.search('test-package', '5.6');
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
test('should return null if fetch fails', async () => {
|
||||
nock('https://repo.packagist.org').get('/p2/test-package.json').reply(404);
|
||||
const result = await packagist.search('test-package', '8.0');
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
test('should return null if the response is empty', async () => {
|
||||
nock('https://repo.packagist.org')
|
||||
.get('/p2/test-package.json')
|
||||
.reply(200, {error: true, data: '[]'});
|
||||
const result = await packagist.search('test-package', '8.0');
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
});
|
||||
@@ -1,82 +1,148 @@
|
||||
import * as fs from 'fs';
|
||||
import * as tools from '../src/tools';
|
||||
import * as utils from '../src/utils';
|
||||
import {ToolData, ToolInput} from '../src/tools';
|
||||
|
||||
interface IData {
|
||||
tool: string;
|
||||
version?: string;
|
||||
domain?: string;
|
||||
extension?: string;
|
||||
os_version?: string;
|
||||
php_version?: string;
|
||||
release?: string;
|
||||
repository?: string;
|
||||
scope?: string;
|
||||
type?: string;
|
||||
fetch_latest?: string;
|
||||
version_parameter?: string;
|
||||
version_prefix?: string;
|
||||
}
|
||||
|
||||
function getData(data: IData): Record<string, string> {
|
||||
function getData(data: Partial<ToolData>): ToolData {
|
||||
const tool = data.tool || 'tool';
|
||||
const version = data.version || '';
|
||||
return {
|
||||
tool: data.tool,
|
||||
version: data.version || '',
|
||||
tool,
|
||||
version,
|
||||
url: data.url || '',
|
||||
domain: data.domain || 'https://example.com',
|
||||
extension: data.extension || '.phar',
|
||||
os_version: data.os_version || 'linux',
|
||||
os: data.os || 'linux',
|
||||
php_version: data.php_version || '7.4',
|
||||
release: data.release || [data.tool, data.version].join(':'),
|
||||
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: 'https://github.com',
|
||||
prefix: 'releases',
|
||||
verb: 'download'
|
||||
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
|
||||
};
|
||||
}
|
||||
|
||||
jest
|
||||
.spyOn(utils, 'fetch')
|
||||
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('atom') && !url.includes('no-release')) {
|
||||
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: ''};
|
||||
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.3-beta1", "url": "${url}"}]`};
|
||||
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.3-beta1'}
|
||||
${'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['COMPOSER_TOKEN'] = token;
|
||||
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'}
|
||||
`(
|
||||
@@ -94,6 +160,18 @@ describe('Tools tests', () => {
|
||||
}
|
||||
);
|
||||
|
||||
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'}
|
||||
@@ -109,6 +187,7 @@ describe('Tools tests', () => {
|
||||
${'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}) => {
|
||||
@@ -177,6 +256,21 @@ describe('Tools tests', () => {
|
||||
}
|
||||
);
|
||||
|
||||
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'}
|
||||
@@ -194,61 +288,67 @@ describe('Tools tests', () => {
|
||||
);
|
||||
|
||||
it.each`
|
||||
os_version | script
|
||||
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_version', async ({os_version, script}) => {
|
||||
`('checking addArchive: $os', async ({os, script}) => {
|
||||
const data = getData({
|
||||
tool: 'tool',
|
||||
version: 'latest',
|
||||
version_parameter: JSON.stringify('-v'),
|
||||
os_version: os_version
|
||||
os: os,
|
||||
url: 'https://example.com/tool.phar'
|
||||
});
|
||||
data['url'] = 'https://example.com/tool.phar';
|
||||
expect(await tools.addArchive(data)).toContain(script);
|
||||
});
|
||||
|
||||
it.each`
|
||||
os_version | script | scope
|
||||
${'linux'} | ${'add_composertool tool tool:1.2.3 user/ global'} | ${'global'}
|
||||
${'darwin'} | ${'add_composertool tool tool:1.2.3 user/ scoped'} | ${'scoped'}
|
||||
${'win32'} | ${'Add-Composertool tool tool:1.2.3 user/ scoped'} | ${'scoped'}
|
||||
${'openbsd'} | ${'Platform openbsd is not supported'} | ${'global'}
|
||||
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_version, $scope',
|
||||
async ({os_version, script, scope}) => {
|
||||
'checking addPackage: $os, $release',
|
||||
async ({os, release, scope, script}) => {
|
||||
const data = getData({
|
||||
tool: 'tool',
|
||||
version: '1.2.3',
|
||||
repository: 'user/tool',
|
||||
os_version: os_version,
|
||||
scope: scope
|
||||
os,
|
||||
scope
|
||||
});
|
||||
data['release'] = [data['tool'], data['version']].join(':');
|
||||
data['release'] = release;
|
||||
expect(await tools.addPackage(data)).toContain(script);
|
||||
}
|
||||
);
|
||||
|
||||
it.each`
|
||||
version | php_version | os_version | script
|
||||
${'latest'} | ${'7.4'} | ${'linux'} | ${'add_tool https://github.com/phar-io/phive/releases/download/3.2.1/phive-3.2.1.phar phive'}
|
||||
${'1.2.3'} | ${'7.4'} | ${'darwin'} | ${'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive'}
|
||||
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_version',
|
||||
async ({version, php_version, os_version, script}) => {
|
||||
'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_version: os_version
|
||||
os: os
|
||||
});
|
||||
script = await tools.addPhive(data);
|
||||
expect(script).toContain(script);
|
||||
@@ -256,15 +356,18 @@ describe('Tools tests', () => {
|
||||
);
|
||||
|
||||
it.each`
|
||||
version | php_version | url
|
||||
${'latest'} | ${'7.4'} | ${'https://get.blackfire.io/blackfire-player.phar'}
|
||||
${'1.2.3'} | ${'7.4'} | ${'https://get.blackfire.io/blackfire-player-v1.2.3.phar'}
|
||||
${'latest'} | ${'5.5'} | ${'https://get.blackfire.io/blackfire-player-v1.9.3.phar'}
|
||||
${'latest'} | ${'7.0'} | ${'https://get.blackfire.io/blackfire-player-v1.9.3.phar'}
|
||||
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: $version, $php_version',
|
||||
async ({version, php_version, url}) => {
|
||||
'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',
|
||||
@@ -279,6 +382,7 @@ describe('Tools tests', () => {
|
||||
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',
|
||||
@@ -289,54 +393,160 @@ describe('Tools tests', () => {
|
||||
});
|
||||
|
||||
it.each`
|
||||
version | no_tool_cache | cache_url | source_url
|
||||
${'latest'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||
${'stable'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-stable.phar'} | ${'https://getcomposer.org/composer-stable.phar'}
|
||||
${'snapshot'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-snapshot.phar'} | ${'https://getcomposer.org/composer.phar'}
|
||||
${'preview'} | ${'true'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-preview.phar'} | ${'https://getcomposer.org/composer-preview.phar'}
|
||||
${'1'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-1.phar'} | ${'https://getcomposer.org/composer-1.phar'}
|
||||
${'2'} | ${'false'} | ${'https://github.com/shivammathur/composer-cache/releases/latest/download/composer-7.4-2.phar'} | ${'https://getcomposer.org/composer-2.phar'}
|
||||
${'1.2.3'} | ${'false'} | ${'https://github.com/composer/composer/releases/download/1.2.3/composer.phar'} | ${'https://getcomposer.org/composer-1.2.3.phar'}
|
||||
${'1.2.3-RC1'} | ${'false'} | ${'https://github.com/composer/composer/releases/download/1.2.3-RC1/composer.phar'} | ${'https://getcomposer.org/composer-1.2.3-RC1.phar'}
|
||||
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, $no_tool_cache',
|
||||
async ({version, no_tool_cache, cache_url, source_url}) => {
|
||||
'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;
|
||||
if (no_tool_cache !== 'true') {
|
||||
expect(await tools.addComposer(data)).toContain(
|
||||
`${cache_url},${source_url}`
|
||||
);
|
||||
} else {
|
||||
expect(await tools.addComposer(data)).toContain(source_url);
|
||||
if (no_tool_cache !== 'true') {
|
||||
expect(await tools.addComposer(data)).toContain(cache_url);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
it.each`
|
||||
version | os_version | uri
|
||||
${'latest'} | ${'linux'} | ${'releases/latest/download/symfony_linux_amd64'}
|
||||
${'1.2.3'} | ${'linux'} | ${'releases/download/v1.2.3/symfony_linux_amd64'}
|
||||
${'latest'} | ${'darwin'} | ${'releases/latest/download/symfony_darwin_amd64'}
|
||||
${'1.2.3'} | ${'darwin'} | ${'releases/download/v1.2.3/symfony_darwin_amd64'}
|
||||
${'latest'} | ${'win32'} | ${'releases/latest/download/symfony_windows_amd64.exe'}
|
||||
${'1.2.3'} | ${'win32'} | ${'releases/download/v1.2.3/symfony_windows_amd64.exe'}
|
||||
${'latest'} | ${'openbsd'} | ${'Platform openbsd is not supported'}
|
||||
`(
|
||||
'checking addSymfony: $version, $os_version',
|
||||
async ({version, os_version, uri}) => {
|
||||
const data = getData({
|
||||
tool: 'symfony',
|
||||
php_version: '7.4',
|
||||
version: version,
|
||||
os_version: os_version
|
||||
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);
|
||||
});
|
||||
expect(await tools.addSymfony(data)).toContain(uri);
|
||||
|
||||
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 = await import('../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();
|
||||
}
|
||||
);
|
||||
|
||||
@@ -356,7 +566,7 @@ describe('Tools tests', () => {
|
||||
});
|
||||
|
||||
it.each`
|
||||
tool | os_version | script
|
||||
tool | os | script
|
||||
${'phpize'} | ${'linux'} | ${'add_devtools phpize'}
|
||||
${'php-config'} | ${'linux'} | ${'add_devtools php-config'}
|
||||
${'phpize'} | ${'darwin'} | ${'add_devtools phpize'}
|
||||
@@ -364,47 +574,51 @@ describe('Tools tests', () => {
|
||||
${'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_version',
|
||||
async ({tool, os_version, script}) => {
|
||||
`('checking addDevTools: $tool, $os', async ({tool, os, script}) => {
|
||||
const data = getData({
|
||||
version: '7.4',
|
||||
tool: tool,
|
||||
os_version: os_version
|
||||
os: os
|
||||
});
|
||||
expect(await tools.addDevTools(data)).toContain(script);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it.each([
|
||||
[
|
||||
'blackfire, blackfire-player, cs2pr, flex, grpc_php_plugin, parallel-lint, php-cs-fixer, phpDocumentor, phplint, phpstan, phpunit, pecl, phing, phinx, phinx:1.2.3, phive, phpunit-bridge, phpunit-polyfills, php-config, phpize, protoc, symfony, vapor, wp',
|
||||
'blackfire, blackfire-player, box, churn, 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://getcomposer.org/composer-stable.phar composer',
|
||||
'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.phar blackfire-player "-V"',
|
||||
'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_tool https://github.com/staabm/annotate-pull-request-from-checkstyle/releases/latest/download/cs2pr cs2pr "-V"',
|
||||
'add_composertool flex flex symfony/ global',
|
||||
'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/FriendsOfPHP/PHP-CS-Fixer/releases/download/v3.2.1/php-cs-fixer.phar php-cs-fixer "-V"',
|
||||
'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_composertool phplint phplint overtrue/',
|
||||
'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.phar phpunit "--version"',
|
||||
'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_composertool phinx phinx robmorgan/ scoped',
|
||||
'add_composertool phinx phinx:1.2.3 robmorgan/ scoped',
|
||||
'add_tool https://github.com/phar-io/phive/releases/download/3.2.1/phive-3.2.1.phar phive "status"',
|
||||
'add_composertool phpunit-bridge phpunit-bridge symfony/ global',
|
||||
'add_composertool phpunit-polyfills phpunit-polyfills yoast/ global',
|
||||
'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_tool https://github.com/symfony/cli/releases/latest/download/symfony_linux_amd64 symfony-cli "version"',
|
||||
'add_composertool 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_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) => {
|
||||
@@ -416,40 +630,47 @@ describe('Tools tests', () => {
|
||||
|
||||
it.each([
|
||||
[
|
||||
'behat, blackfire, blackfire-player, composer-normalize, composer-require-checker, composer-unused, cs2pr:1.2.3, flex, grpc_php_plugin:1.2.3, infection, 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, symfony-cli, symfony:1.2.3, vapor-cli, wp-cli',
|
||||
'backward-compatibility-check, behat, blackfire, blackfire-player, churn, composer-dependency-analyser, composer-normalize, composer-require-checker, composer-unused, cs2pr:1.2.3, ecs, flex, grpc_php_plugin:1.2.3, infection, 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://getcomposer.org/composer-stable.phar composer',
|
||||
'add_composertool behat behat behat/ scoped',
|
||||
'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.phar blackfire-player "-V"',
|
||||
'add_tool https://github.com/ergebnis/composer-normalize/releases/latest/download/composer-normalize.phar composer-normalize "-V"',
|
||||
'add_composertool composer-require-checker composer-require-checker maglnet/ scoped',
|
||||
'add_composertool composer-unused composer-unused icanhazstring/ scoped',
|
||||
'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/staabm/annotate-pull-request-from-checkstyle/releases/download/1.2.3/cs2pr cs2pr "-V"',
|
||||
'add_composertool flex flex symfony/ global',
|
||||
'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_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 phing "-v"',
|
||||
'add_composertool phinx phinx robmorgan/ scoped',
|
||||
'add_tool https://github.com/phar-io/phive/releases/download/1.2.3/phive-1.2.3.phar phive',
|
||||
'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/squizlabs/PHP_CodeSniffer/releases/latest/download/phpcbf.phar phpcbf "--version"',
|
||||
'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/squizlabs/PHP_CodeSniffer/releases/latest/download/phpcs.phar phpcs "--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_composertool phpunit-bridge phpunit-bridge:5.6.* symfony/ global',
|
||||
'add_composertool phpunit-polyfills phpunit-polyfills:1.0.1 yoast/ global',
|
||||
'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_tool https://github.com/symfony/cli/releases/latest/download/symfony_darwin_amd64 symfony-cli "version"',
|
||||
'add_tool https://github.com/symfony/cli/releases/download/v1.2.3/symfony_darwin_amd64 symfony-cli "version"',
|
||||
'add_composertool 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 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) => {
|
||||
@@ -461,23 +682,27 @@ describe('Tools tests', () => {
|
||||
|
||||
it.each([
|
||||
[
|
||||
'blackfire, blackfire-player:1.2.3, cs2pr, deployer, does_not_exist, flex, phinx, phive:0.13.2, php-config, phpize, phpmd, simple-phpunit, symfony, wp',
|
||||
'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://getcomposer.org/composer-stable.phar composer',
|
||||
'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.2.3.phar blackfire-player "-V"',
|
||||
'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-Composertool phinx phinx robmorgan/ scoped',
|
||||
'Add-Tool https://github.com/phar-io/phive/releases/download/0.13.2/phive-0.13.2.phar phive "status"',
|
||||
'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-Tool https://github.com/symfony/cli/releases/latest/download/symfony_windows_amd64.exe symfony-cli "version"',
|
||||
'Add-Tool https://github.com/wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true wp-cli "--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) => {
|
||||
@@ -491,14 +716,14 @@ describe('Tools tests', () => {
|
||||
[
|
||||
'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://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'
|
||||
'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'
|
||||
]
|
||||
]
|
||||
])(
|
||||
@@ -511,13 +736,40 @@ describe('Tools tests', () => {
|
||||
}
|
||||
);
|
||||
|
||||
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://getcomposer.org/composer-stable.phar composer latest\n\nadd_tool https://phar.phpunit.de/phpunit.phar phpunit "--version"'}
|
||||
${'composer:preview'} | ${'add_tool https://github.com/shivammathur/composer-cache/releases/latest/download/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://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://getcomposer.org/composer.phar composer snapshot'}
|
||||
${'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);
|
||||
});
|
||||
@@ -528,7 +780,64 @@ describe('Tools tests', () => {
|
||||
${'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['COMPOSER_TOKEN'] = token;
|
||||
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 = await import('../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
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1,20 +1,7 @@
|
||||
import * as fs from 'fs';
|
||||
import fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import * as utils from '../src/utils';
|
||||
|
||||
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);
|
||||
}
|
||||
});
|
||||
}
|
||||
import * as fetchModule from '../src/fetch';
|
||||
|
||||
describe('Utils tests', () => {
|
||||
it('checking readEnv', async () => {
|
||||
@@ -29,46 +16,65 @@ describe('Utils tests', () => {
|
||||
|
||||
it('checking getInput', async () => {
|
||||
process.env['test'] = 'setup-php';
|
||||
process.env['INPUT_SETUP-PHP'] = 'setup-php';
|
||||
expect(await utils.getInput('test', false)).toBe('setup-php');
|
||||
expect(await utils.getInput('setup-php', false)).toBe('setup-php');
|
||||
expect(await utils.getInput('DoesNotExist', false)).toBe('');
|
||||
await expect(async () => {
|
||||
await utils.getInput('DoesNotExist', true);
|
||||
}).rejects.toThrow('Input required and not supplied: DoesNotExist');
|
||||
});
|
||||
|
||||
it('checking fetch', async () => {
|
||||
const manifest = await utils.getManifestURL();
|
||||
let response: Record<string, string> = await utils.fetch(manifest);
|
||||
expect(response.error).toBe(undefined);
|
||||
expect(response.data).toContain('latest');
|
||||
|
||||
response = await utils.fetch(manifest, 'invalid_token');
|
||||
expect(response.error).not.toBe(undefined);
|
||||
expect(response.data).toBe(undefined);
|
||||
delete process.env['INPUT_SETUP-PHP'];
|
||||
});
|
||||
|
||||
it('checking getManifestURL', async () => {
|
||||
expect(await utils.getManifestURL()).toContain('php-versions.json');
|
||||
for (const url of await utils.getManifestURLS()) {
|
||||
expect(url).toContain('php-versions.json');
|
||||
}
|
||||
});
|
||||
|
||||
it('checking parseVersion', async () => {
|
||||
jest
|
||||
.spyOn(utils, 'fetch')
|
||||
.mockImplementation(
|
||||
async (url, token?): Promise<Record<string, string>> => {
|
||||
if (!token || token === 'valid_token') {
|
||||
return {data: `{ "latest": "8.0", "5.x": "5.6", "url": "${url}" }`};
|
||||
} else {
|
||||
return {error: 'Invalid token'};
|
||||
}
|
||||
}
|
||||
);
|
||||
const fetchSpy = jest
|
||||
.spyOn(fetchModule, 'fetch')
|
||||
.mockResolvedValue({data: '{ "latest": "8.1", "5.x": "5.6" }'});
|
||||
expect(await utils.parseVersion('latest')).toBe('8.1');
|
||||
expect(await utils.parseVersion('7')).toBe('7.0');
|
||||
expect(await utils.parseVersion('7.4')).toBe('7.4');
|
||||
expect(await utils.parseVersion('5.x')).toBe('5.6');
|
||||
expect(await utils.parseVersion('4.x')).toBe(undefined);
|
||||
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 () => {
|
||||
@@ -90,41 +96,6 @@ describe('Utils tests', () => {
|
||||
expect(await utils.color('warning')).toBe('33');
|
||||
});
|
||||
|
||||
it('checking readFile', async () => {
|
||||
const darwin: string = fs.readFileSync(
|
||||
path.join(__dirname, '../src/scripts/darwin.sh'),
|
||||
'utf8'
|
||||
);
|
||||
const linux: string = fs.readFileSync(
|
||||
path.join(__dirname, '../src/scripts/linux.sh'),
|
||||
'utf8'
|
||||
);
|
||||
const win32: string = fs.readFileSync(
|
||||
path.join(__dirname, '../src/scripts/win32.ps1'),
|
||||
'utf8'
|
||||
);
|
||||
expect(await utils.readFile('darwin.sh', 'src/scripts')).toBe(darwin);
|
||||
expect(await utils.readFile('darwin.sh', 'src/scripts')).toBe(darwin);
|
||||
expect(await utils.readFile('linux.sh', 'src/scripts')).toBe(linux);
|
||||
expect(await utils.readFile('linux.sh', 'src/scripts')).toBe(linux);
|
||||
expect(await utils.readFile('win32.ps1', 'src/scripts')).toBe(win32);
|
||||
expect(await utils.readFile('win32.ps1', 'src/scripts')).toBe(win32);
|
||||
});
|
||||
|
||||
it('checking writeScripts', async () => {
|
||||
const testString = 'sudo apt-get install php';
|
||||
const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || '';
|
||||
const script_path: string = path.join(runner_dir, 'test.sh');
|
||||
await utils.writeScript('test.sh', testString);
|
||||
await fs.readFile(
|
||||
script_path,
|
||||
function (error: Error | null, data: Buffer) {
|
||||
expect(testString).toBe(data.toString());
|
||||
}
|
||||
);
|
||||
await cleanup(script_path);
|
||||
});
|
||||
|
||||
it('checking extensionArray', async () => {
|
||||
expect(
|
||||
await utils.extensionArray('a, :b, php_c, none, php-d, Zend e, :Zend f')
|
||||
@@ -132,6 +103,26 @@ describe('Utils tests', () => {
|
||||
|
||||
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 () => {
|
||||
@@ -154,6 +145,9 @@ describe('Utils tests', () => {
|
||||
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([]);
|
||||
});
|
||||
@@ -217,9 +211,9 @@ describe('Utils tests', () => {
|
||||
});
|
||||
|
||||
it('checking suppressOutput', async () => {
|
||||
expect(await utils.suppressOutput('win32')).toEqual(' >$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('win32')).toEqual(' ');
|
||||
expect(await utils.suppressOutput('linux')).toEqual(' ');
|
||||
expect(await utils.suppressOutput('darwin')).toEqual(' ');
|
||||
expect(await utils.suppressOutput('openbsd')).toContain(
|
||||
'Platform openbsd is not supported'
|
||||
);
|
||||
@@ -235,6 +229,7 @@ describe('Utils tests', () => {
|
||||
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'
|
||||
);
|
||||
@@ -254,9 +249,9 @@ describe('Utils tests', () => {
|
||||
});
|
||||
|
||||
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('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'
|
||||
);
|
||||
@@ -301,4 +296,96 @@ describe('Utils tests', () => {
|
||||
'\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');
|
||||
});
|
||||
});
|
||||
|
||||
15
action.yml
15
action.yml
@@ -7,11 +7,17 @@ branding:
|
||||
inputs:
|
||||
php-version:
|
||||
description: 'Setup PHP version.'
|
||||
default: '8.1'
|
||||
required: true
|
||||
required: false
|
||||
php-version-file:
|
||||
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
|
||||
@@ -21,9 +27,12 @@ inputs:
|
||||
tools:
|
||||
description: 'Setup popular tools globally.'
|
||||
required: false
|
||||
github-token:
|
||||
description: 'GitHub token to use for authentication.'
|
||||
default: ${{ github.token }}
|
||||
outputs:
|
||||
php-version:
|
||||
description: 'PHP version in semver format'
|
||||
runs:
|
||||
using: 'node12'
|
||||
using: 'node24'
|
||||
main: 'dist/index.js'
|
||||
|
||||
4170
dist/index.js
vendored
4170
dist/index.js
vendored
File diff suppressed because one or more lines are too long
49
eslint.config.mjs
Normal file
49
eslint.config.mjs
Normal file
@@ -0,0 +1,49 @@
|
||||
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
||||
import {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']
|
||||
}
|
||||
}
|
||||
}
|
||||
];
|
||||
@@ -8,10 +8,10 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -21,9 +21,9 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/cache@v2
|
||||
- uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
|
||||
@@ -4,6 +4,9 @@ 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 }}
|
||||
@@ -14,12 +17,12 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
# blackfire-player supports PHP >= 5.5
|
||||
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@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -31,6 +34,14 @@ jobs:
|
||||
tools: blackfire, blackfire-player
|
||||
coverage: none
|
||||
|
||||
# Refer to https://blackfire.io/docs/player/index#usage
|
||||
- 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
|
||||
run: blackfire-player run scenario.bkf --endpoint=http://127.0.0.1:8080
|
||||
|
||||
@@ -15,23 +15,35 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
# Blackfire supports PHP >= 5.3 on Ubuntu and macOS, and PHP >= 5.4 on Windows
|
||||
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@v2
|
||||
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
|
||||
# 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
|
||||
run: blackfire run php my-script.php
|
||||
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
|
||||
|
||||
@@ -6,8 +6,11 @@ jobs:
|
||||
tests:
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
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
|
||||
@@ -26,7 +29,7 @@ jobs:
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -35,18 +38,20 @@ jobs:
|
||||
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, pdo_mysql
|
||||
extensions: mbstring, intl, redis, apcu, pdo_mysql
|
||||
coverage: pcov
|
||||
|
||||
- name: Start mysql service
|
||||
run: sudo systemctl start mysql
|
||||
# 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 "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -64,28 +69,29 @@ jobs:
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
env:
|
||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||
DB_DSN: "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_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\""
|
||||
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@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.5'
|
||||
extensions: mbstring, intl
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -104,22 +110,22 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.5'
|
||||
extensions: mbstring, intl
|
||||
tools: phpstan
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -128,7 +134,9 @@ jobs:
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
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/
|
||||
|
||||
@@ -5,9 +5,13 @@ on: [push, pull_request]
|
||||
jobs:
|
||||
tests:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
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
|
||||
@@ -26,7 +30,7 @@ jobs:
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -35,15 +39,20 @@ jobs:
|
||||
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, pdo_pgsql
|
||||
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 "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -61,28 +70,29 @@ jobs:
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
env:
|
||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||
DB_DSN: postgres://postgres@127.0.0.1:${{ job.services.postgres.ports['5432'] }}/postgres
|
||||
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@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: mbstring, intl
|
||||
php-version: '8.5'
|
||||
extensions: mbstring, intl, apcu
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -101,21 +111,22 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: mbstring, intl
|
||||
php-version: '8.5'
|
||||
extensions: mbstring, intl, apcu
|
||||
tools: phpstan
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -124,7 +135,9 @@ jobs:
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
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/
|
||||
|
||||
@@ -7,11 +7,12 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
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@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -23,10 +24,11 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
shell: bash
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -47,20 +49,21 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.5'
|
||||
extensions: mbstring, intl
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
shell: bash
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -79,22 +82,23 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.5'
|
||||
extensions: mbstring, intl
|
||||
tools: phpstan
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
shell: bash
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -103,7 +107,9 @@ jobs:
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
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/
|
||||
|
||||
@@ -6,26 +6,27 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
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, curl, dom
|
||||
extensions: mbstring, intl, curl, dom, sqlite3, pdo_sqlite
|
||||
coverage: xdebug
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
shell: bash
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
|
||||
59
examples/drupal.yml
Normal file
59
examples/drupal.yml
Normal file
@@ -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
|
||||
@@ -1,16 +1,16 @@
|
||||
# GitHub Action for Laminas framework MVC projects
|
||||
name: Testing Zend Framework
|
||||
name: Testing Laminas MVC
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.1', '8.2', '8.3']
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -21,10 +21,11 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
shell: bash
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
|
||||
@@ -6,13 +6,17 @@ jobs:
|
||||
name: Laravel (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
DB_CONNECTION: mysql
|
||||
DB_HOST: 127.0.0.1
|
||||
DB_DATABASE: laravel
|
||||
DB_USERNAME: root
|
||||
DB_PASSWORD: password
|
||||
BROADCAST_DRIVER: log
|
||||
CACHE_DRIVER: redis
|
||||
BROADCAST_CONNECTION: log
|
||||
CACHE_STORE: redis
|
||||
QUEUE_CONNECTION: redis
|
||||
SESSION_DRIVER: redis
|
||||
|
||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:latest
|
||||
@@ -32,10 +36,10 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -45,15 +49,17 @@ jobs:
|
||||
extensions: mbstring, dom, fileinfo, mysql
|
||||
coverage: xdebug
|
||||
|
||||
- name: Start mysql service
|
||||
run: sudo systemctl start mysql
|
||||
# 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 "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
|
||||
@@ -11,10 +11,12 @@ jobs:
|
||||
QUEUE_CONNECTION: redis
|
||||
SESSION_DRIVER: redis
|
||||
DB_CONNECTION: pgsql
|
||||
DB_HOST: localhost
|
||||
DB_HOST: 127.0.0.1
|
||||
DB_PASSWORD: postgres
|
||||
DB_USERNAME: postgres
|
||||
DB_DATABASE: postgres
|
||||
|
||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:latest
|
||||
@@ -34,10 +36,10 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -47,12 +49,17 @@ jobs:
|
||||
extensions: mbstring, dom, fileinfo, pgsql
|
||||
coverage: xdebug
|
||||
|
||||
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
||||
# If you are using it instead of service containers, make sure you start it.
|
||||
# - name: Start postgresql service
|
||||
# run: sudo systemctl start postgresql.service
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -74,11 +81,11 @@ jobs:
|
||||
- name: Run Migration
|
||||
run: php artisan migrate -v
|
||||
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
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
env:
|
||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||
|
||||
@@ -9,10 +9,10 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -24,10 +24,11 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
shell: bash
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
|
||||
@@ -13,6 +13,8 @@ jobs:
|
||||
CACHE_DRIVER: redis
|
||||
QUEUE_CONNECTION: redis
|
||||
SESSION_DRIVER: redis
|
||||
|
||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:latest
|
||||
@@ -32,10 +34,10 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -45,15 +47,17 @@ jobs:
|
||||
extensions: mbstring, dom, fileinfo, mysql
|
||||
coverage: xdebug
|
||||
|
||||
- name: Start mysql service
|
||||
run: sudo systemctl start mysql
|
||||
# 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 "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -79,7 +83,7 @@ jobs:
|
||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
run: vendor/bin/phpunit --coverage-text --coverage-filter app
|
||||
env:
|
||||
DB_PORT: ${{ job.services.mysql.ports['3306'] }}
|
||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||
|
||||
@@ -11,10 +11,12 @@ jobs:
|
||||
QUEUE_CONNECTION: redis
|
||||
SESSION_DRIVER: redis
|
||||
DB_CONNECTION: pgsql
|
||||
DB_HOST: localhost
|
||||
DB_HOST: 127.0.0.1
|
||||
DB_PASSWORD: postgres
|
||||
DB_USERNAME: postgres
|
||||
DB_DATABASE: postgres
|
||||
|
||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:latest
|
||||
@@ -34,10 +36,10 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -45,14 +47,19 @@ jobs:
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, dom, fileinfo, pgsql
|
||||
coverage: xdebug
|
||||
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 "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -74,11 +81,11 @@ jobs:
|
||||
- name: Run Migration
|
||||
run: php artisan migrate -v
|
||||
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
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
run: vendor/bin/phpunit
|
||||
env:
|
||||
DB_PORT: ${{ job.services.postgres.ports[5432] }}
|
||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
||||
REDIS_PORT: ${{ job.services.redis.ports['6379'] }}
|
||||
|
||||
@@ -9,10 +9,10 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -24,10 +24,11 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
shell: bash
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -42,4 +43,4 @@ jobs:
|
||||
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
|
||||
|
||||
- name: Test with phpunit
|
||||
run: vendor/bin/phpunit --coverage-text
|
||||
run: vendor/bin/phpunit --coverage-text --coverage-filter app
|
||||
|
||||
@@ -11,18 +11,20 @@ jobs:
|
||||
env:
|
||||
DB_ADAPTER: mysql
|
||||
DB_HOST: 127.0.0.1
|
||||
DB_NAME: phalcon
|
||||
DB_NAME: vokuro
|
||||
DB_USERNAME: root
|
||||
DB_PASSWORD: password
|
||||
CODECEPTION_URL: 127.0.0.1
|
||||
CODECEPTION_PORT: 8888
|
||||
|
||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:latest
|
||||
image: mysql:5.7
|
||||
env:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||
MYSQL_ROOT_PASSWORD: password
|
||||
MYSQL_DATABASE: phalcon
|
||||
MYSQL_DATABASE: vokuro
|
||||
ports:
|
||||
- 3306/tcp
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
@@ -30,30 +32,30 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3', '7.4']
|
||||
# For phalcon 3.x, use
|
||||
# php-versions: ['7.0', '7.1', '7.2', '7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
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 }}
|
||||
# Use phalcon3 for the phalcon 3.x.
|
||||
# Use phalcon4 for the latest compatible Vokuro sample release.
|
||||
extensions: mbstring, dom, zip, phalcon4, mysql
|
||||
coverage: xdebug
|
||||
|
||||
- name: Start mysql service
|
||||
run: sudo systemctl start mysql
|
||||
# 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 "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -69,7 +71,6 @@ jobs:
|
||||
|
||||
- name: Run Migration
|
||||
run: |
|
||||
if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi
|
||||
vendor/bin/phinx migrate
|
||||
vendor/bin/phinx seed:run
|
||||
env:
|
||||
|
||||
@@ -11,19 +11,18 @@ jobs:
|
||||
env:
|
||||
DB_ADAPTER: pgsql
|
||||
DB_HOST: 127.0.0.1
|
||||
DB_NAME: postgres
|
||||
DB_NAME: vokuro
|
||||
DB_USERNAME: postgres
|
||||
DB_PASSWORD: postgres
|
||||
CODECEPTION_URL: 127.0.0.1
|
||||
CODECEPTION_PORT: 8888
|
||||
DB_CONNECTION: pgsql
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:latest
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: postgres
|
||||
POSTGRES_DB: vokuro
|
||||
ports:
|
||||
- 5432/tcp
|
||||
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3
|
||||
@@ -31,46 +30,48 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3', '7.4']
|
||||
# For phalcon 3.x, use
|
||||
# php-versions: ['7.0', '7.1', '7.2', '7.3']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
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 }}
|
||||
# Use phalcon3 for the phalcon 3.x
|
||||
extensions: mbstring, dom, zip, phalcon4, pgsql
|
||||
coverage: xdebug
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
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
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader --no-security-blocking
|
||||
|
||||
- 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
|
||||
run: |
|
||||
if [ ! -e phinx.yml ]; then vendor/bin/phinx init; fi
|
||||
vendor/bin/phinx migrate
|
||||
vendor/bin/phinx seed:run
|
||||
env:
|
||||
DB_PORT: ${{ job.services.postgres.ports['5432'] }}
|
||||
|
||||
- name: Run Tests
|
||||
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 run
|
||||
env:
|
||||
|
||||
@@ -8,14 +8,14 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
node-versions: [16']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
node-versions: ['20']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v1
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: ${{ matrix.node-versions }}
|
||||
|
||||
@@ -31,9 +31,9 @@ jobs:
|
||||
|
||||
- name: Get yarn cache
|
||||
id: yarn-cache
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/cache@v2
|
||||
- uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.yarn-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
@@ -41,10 +41,10 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -53,17 +53,10 @@ jobs:
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
|
||||
- name: Install yarn dependencies
|
||||
run: yarn -V
|
||||
run: yarn install --frozen-lockfile --non-interactive
|
||||
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
|
||||
- name: Yarn test and build
|
||||
run: |
|
||||
yarn run test
|
||||
yarn run build
|
||||
yarn run rmdist
|
||||
yarn run "build:production"
|
||||
|
||||
- name: PHP test
|
||||
run: composer test
|
||||
- name: Yarn build
|
||||
run: yarn build
|
||||
|
||||
@@ -6,11 +6,11 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.3', '8.4', '8.5']
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v6
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
@@ -22,10 +22,11 @@ jobs:
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
shell: bash
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
|
||||
@@ -5,9 +5,13 @@ jobs:
|
||||
symfony:
|
||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APP_ENV: test
|
||||
|
||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||
services:
|
||||
mysql:
|
||||
image: mysql:latest
|
||||
image: mysql:8.4
|
||||
env:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||
MYSQL_ROOT_PASSWORD: symfony
|
||||
@@ -18,29 +22,30 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.4', '8.5', '8.6']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
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 }}
|
||||
tools: phpunit-bridge
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, mysql
|
||||
coverage: xdebug
|
||||
|
||||
- name: Start mysql service
|
||||
run: sudo systemctl start mysql
|
||||
# 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 "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -49,18 +54,17 @@ jobs:
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
run: composer install --no-interaction --no-progress --prefer-dist --optimize-autoloader
|
||||
|
||||
- name: Run Migration
|
||||
- name: Prepare database
|
||||
run: |
|
||||
composer require --dev symfony/orm-pack
|
||||
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||
php bin/console doctrine:database:create --if-not-exists --no-interaction
|
||||
php bin/console doctrine:schema:create --no-interaction
|
||||
php bin/console doctrine:fixtures:load --no-interaction
|
||||
env:
|
||||
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony
|
||||
|
||||
- name: Install PHPUnit
|
||||
run: simple-phpunit install
|
||||
DATABASE_URL: mysql://root:symfony@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/symfony?serverVersion=8.4&charset=utf8mb4
|
||||
|
||||
- name: Run tests
|
||||
run: simple-phpunit --coverage-text
|
||||
run: 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:
|
||||
name: Symfony (PHP ${{ matrix.php-versions }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APP_ENV: test
|
||||
|
||||
# Docs: https://docs.github.com/en/actions/using-containerized-services
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:latest
|
||||
image: postgres:16
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
@@ -18,26 +22,30 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.4', '8.5', '8.6']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
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 }}
|
||||
tools: phpunit-bridge
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, pgsql
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_pgsql, pgsql
|
||||
coverage: xdebug
|
||||
|
||||
# Local PostgreSQL service in GitHub hosted environments is disabled by default.
|
||||
# If you are using it instead of service containers, make sure you start it.
|
||||
# - name: Start postgresql service
|
||||
# run: sudo systemctl start postgresql.service
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -48,16 +56,15 @@ jobs:
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
|
||||
- name: Run Migration
|
||||
- name: Prepare database
|
||||
run: |
|
||||
composer require --dev symfony/orm-pack
|
||||
php bin/console doctrine:schema:update --force || echo "No migrations found or schema update failed"
|
||||
php bin/console doctrine:migrations:migrate || echo "No migrations found or migration failed"
|
||||
php bin/console doctrine:database:create --if-not-exists --no-interaction
|
||||
php bin/console doctrine:schema:create --no-interaction
|
||||
php bin/console doctrine:fixtures:load --no-interaction
|
||||
env:
|
||||
DATABASE_URL: postgres://postgres:postgres@127.0.0.1:${{ job.services.postgres.ports[5432] }}/postgres?charset=UTF-8
|
||||
|
||||
- name: Install PHPUnit
|
||||
run: simple-phpunit install
|
||||
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: simple-phpunit --coverage-text
|
||||
run: 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
|
||||
|
||||
@@ -9,26 +9,26 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
operating-system: [ubuntu-latest, windows-latest, macos-latest]
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
php-versions: ['8.4', '8.5', '8.6']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
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 }}
|
||||
tools: phpunit-bridge
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite
|
||||
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, zip
|
||||
coverage: xdebug
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
shell: bash
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
# Use composer.json for key, if composer.lock is not committed.
|
||||
@@ -39,8 +39,5 @@ jobs:
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader
|
||||
|
||||
- name: Install PHPUnit
|
||||
run: simple-phpunit install
|
||||
|
||||
- name: Run tests
|
||||
run: simple-phpunit --coverage-text
|
||||
run: ./bin/phpunit --coverage-text
|
||||
|
||||
68
examples/wordpress.yml
Normal file
68
examples/wordpress.yml
Normal file
@@ -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,82 +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:latest
|
||||
env:
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: false
|
||||
MYSQL_ROOT_PASSWORD: yii
|
||||
MYSQL_DATABASE: yii
|
||||
ports:
|
||||
- 3306/tcp
|
||||
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set Node.js 10.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10.x
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, intl, gd, imagick, zip, dom, mysql
|
||||
coverage: xdebug
|
||||
|
||||
- name: Start mysql service
|
||||
run: sudo systemctl start mysql
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
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: 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,79 +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: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
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set Node.js 10.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 10.x
|
||||
|
||||
# Docs: https://github.com/shivammathur/setup-php
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, intl, gd, imagick, zip, dom, pgsql
|
||||
coverage: xdebug
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
|
||||
- name: Cache composer dependencies
|
||||
uses: actions/cache@v2
|
||||
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: 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
|
||||
78
examples/yii3-mysql.yml
Normal file
78
examples/yii3-mysql.yml
Normal file
@@ -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
|
||||
78
examples/yii3-postgres.yml
Normal file
78
examples/yii3-postgres.yml
Normal file
@@ -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
|
||||
53
examples/yii3.yml
Normal file
53
examples/yii3.yml
Normal file
@@ -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
|
||||
11125
package-lock.json
generated
11125
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
58
package.json
58
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "setup-php",
|
||||
"version": "2.16.0",
|
||||
"version": "2.37.1",
|
||||
"private": false,
|
||||
"description": "Setup PHP for use with GitHub Actions",
|
||||
"main": "lib/install.js",
|
||||
@@ -16,10 +16,10 @@
|
||||
],
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"lint": "eslint **/src/*.ts --cache --fix",
|
||||
"format": "prettier --write **/src/*.ts && git add -f src/",
|
||||
"format-check": "prettier --check **/src/*.ts",
|
||||
"release": "ncc build -o dist && git add -f dist/",
|
||||
"lint": "eslint **/src/*.ts **/__tests__/*.ts --cache --fix",
|
||||
"format": "prettier --write **/src/*.ts **/__tests__/*.ts && git add -f __tests__/ ",
|
||||
"format-check": "prettier --check **/src/*.ts **/__tests__/*.ts",
|
||||
"release": "ncc build -m -o dist && git add -f dist/",
|
||||
"test": "jest"
|
||||
},
|
||||
"repository": {
|
||||
@@ -34,28 +34,36 @@
|
||||
"author": "shivammathur",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.6.0",
|
||||
"@actions/exec": "^1.1.0",
|
||||
"@actions/io": "^1.1.1",
|
||||
"fs": "0.0.1-security"
|
||||
"@actions/exec": "^2.0.0",
|
||||
"compare-versions": "^6.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^27.0.3",
|
||||
"@types/node": "^16.11.10",
|
||||
"@typescript-eslint/eslint-plugin": "^5.4.0",
|
||||
"@typescript-eslint/parser": "^5.4.0",
|
||||
"@vercel/ncc": "^0.32.0",
|
||||
"eslint": "^8.3.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-import": "^2.25.3",
|
||||
"eslint-plugin-jest": "^25.3.0",
|
||||
"eslint-plugin-prettier": "^4.0.0",
|
||||
"jest": "^27.3.1",
|
||||
"jest-circus": "^27.3.1",
|
||||
"prettier": "^2.5.0",
|
||||
"simple-git-hooks": "^2.7.0",
|
||||
"ts-jest": "^27.0.7",
|
||||
"typescript": "^4.5.2"
|
||||
"@eslint/compat": "^2.1.0",
|
||||
"@eslint/js": "^10.0.1",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/node": "^25.7.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.59.3",
|
||||
"@typescript-eslint/parser": "^8.59.3",
|
||||
"@vercel/ncc": "^0.38.4",
|
||||
"eslint": "^10.3.0",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-import-resolver-typescript": "^4.4.4",
|
||||
"eslint-plugin-import-x": "^4.16.2",
|
||||
"eslint-plugin-jest": "^29.15.2",
|
||||
"eslint-plugin-prettier": "^5.5.5",
|
||||
"globals": "^17.6.0",
|
||||
"jest": "^30.4.2",
|
||||
"jest-circus": "^30.4.2",
|
||||
"nock": "^14.0.15",
|
||||
"prettier": "^3.8.3",
|
||||
"simple-git-hooks": "^2.13.1",
|
||||
"ts-jest": "^29.4.9",
|
||||
"typescript": "^5.9.3"
|
||||
},
|
||||
"overrides": {
|
||||
"test-exclude": "^7.0.1",
|
||||
"glob": "^13.0.6",
|
||||
"minimatch": "^10.2.1"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/shivammathur/setup-php/issues"
|
||||
|
||||
@@ -16,8 +16,8 @@ export async function addINIValuesUnix(
|
||||
});
|
||||
return (
|
||||
'echo "' +
|
||||
ini_values.join('\n') +
|
||||
'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1' +
|
||||
ini_values.map(v => utils.escapeForShell(v, 'linux')).join('\n') +
|
||||
'" | sudo tee -a "${pecl_file:-${ini_file[@]}}" ' +
|
||||
script
|
||||
);
|
||||
}
|
||||
@@ -37,7 +37,10 @@ export async function addINIValuesWindows(
|
||||
(await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n';
|
||||
});
|
||||
return (
|
||||
'Add-Content "$php_dir\\php.ini" "' + ini_values.join('\n') + '"' + script
|
||||
'Add-Content "$php_dir\\php.ini" "' +
|
||||
ini_values.map(v => utils.escapeForShell(v, 'win32')).join('\n') +
|
||||
'"' +
|
||||
script
|
||||
);
|
||||
}
|
||||
|
||||
@@ -45,28 +48,28 @@ export async function addINIValuesWindows(
|
||||
* Function to add custom ini values
|
||||
*
|
||||
* @param ini_values_csv
|
||||
* @param os_version
|
||||
* @param os
|
||||
* @param no_step
|
||||
*/
|
||||
export async function addINIValues(
|
||||
ini_values_csv: string,
|
||||
os_version: string,
|
||||
os: string,
|
||||
no_step = false
|
||||
): Promise<string> {
|
||||
let script = '\n';
|
||||
switch (no_step) {
|
||||
case true:
|
||||
script +=
|
||||
(await utils.stepLog('Add php.ini values', os_version)) +
|
||||
(await utils.suppressOutput(os_version)) +
|
||||
(await utils.stepLog('Add php.ini values', os)) +
|
||||
(await utils.suppressOutput(os)) +
|
||||
'\n';
|
||||
break;
|
||||
case false:
|
||||
default:
|
||||
script += (await utils.stepLog('Add php.ini values', os_version)) + '\n';
|
||||
script += (await utils.stepLog('Add php.ini values', os)) + '\n';
|
||||
break;
|
||||
}
|
||||
switch (os_version) {
|
||||
switch (os) {
|
||||
case 'win32':
|
||||
return script + (await addINIValuesWindows(ini_values_csv));
|
||||
case 'darwin':
|
||||
@@ -74,8 +77,8 @@ export async function addINIValues(
|
||||
return script + (await addINIValuesUnix(ini_values_csv));
|
||||
default:
|
||||
return await utils.log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'Platform ' + os + ' is not supported',
|
||||
os,
|
||||
'error'
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,30 +1,65 @@
|
||||
amqp=amqp
|
||||
apcu=apcu
|
||||
ast=ast
|
||||
brotli=brotli
|
||||
couchbase=couchbase
|
||||
ds=ds
|
||||
event=event
|
||||
excimer=excimer
|
||||
expect=expect
|
||||
gearman=gearman
|
||||
gmagick=gmagick
|
||||
gnupg=gnupg
|
||||
grpc=grpc
|
||||
igbinary=igbinary
|
||||
imagick=imagick
|
||||
imap=imap
|
||||
interbase=interbase
|
||||
lua=lua
|
||||
mailparse=mailparse
|
||||
maxminddb=maxminddb
|
||||
mcrypt=mcrypt
|
||||
memcache=memcache
|
||||
memcached=memcached
|
||||
mongodb=mongodb
|
||||
mongodb1=mongodb1
|
||||
msgpack=msgpack
|
||||
newrelic=newrelic
|
||||
oauth=oauth
|
||||
opentelemetry=opentelemetry
|
||||
pcov=pcov
|
||||
pdo_firebird=pdo_firebird
|
||||
pdo_sqlsrv=pdo_sqlsrv
|
||||
pecl_http=http
|
||||
phalcon3=phalcon
|
||||
phalcon4=phalcon
|
||||
phalcon5=phalcon
|
||||
pinba=pinba
|
||||
propro=propro
|
||||
protobuf=protobuf
|
||||
psr=psr
|
||||
raphf=raphf
|
||||
rdkafka=rdkafka
|
||||
phpredis=redis
|
||||
redis=redis
|
||||
seaslog=seaslog
|
||||
scalar_objects=scalar_objects
|
||||
snmp=snmp
|
||||
sqlsrv=sqlsrv
|
||||
spx=spx
|
||||
ssh2=ssh2
|
||||
swoole=swoole
|
||||
swow=swow
|
||||
uopz=uopz
|
||||
uploadprogress=uploadprogress
|
||||
uuid=uuid
|
||||
v8js=v8js
|
||||
vips=vips
|
||||
vld=vld
|
||||
xdebug=xdebug
|
||||
xdebug2=xdebug
|
||||
xhprof=xhprof
|
||||
xlswriter=xlswriter
|
||||
yaml=yaml
|
||||
zmq=zmq
|
||||
zstd=zstd
|
||||
|
||||
3
src/configs/composer-gh-auth-no-op
Normal file
3
src/configs/composer-gh-auth-no-op
Normal file
@@ -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
|
||||
1
src/configs/composer-gh-auth-warn
Normal file
1
src/configs/composer-gh-auth-warn
Normal file
@@ -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
|
||||
3
src/configs/composer.env
Normal file
3
src/configs/composer.env
Normal file
@@ -0,0 +1,3 @@
|
||||
COMPOSER_PROCESS_TIMEOUT=0
|
||||
COMPOSER_NO_INTERACTION=1
|
||||
COMPOSER_NO_AUDIT=1
|
||||
22
src/configs/darwin_libs
Normal file
22
src/configs/darwin_libs
Normal file
@@ -0,0 +1,22 @@
|
||||
amqp=rabbitmq-c
|
||||
decimal=mpdecimal
|
||||
ev=libev
|
||||
event=libevent
|
||||
geoip=geoip
|
||||
gmagick=graphicsmagick
|
||||
gnupg=gpgme
|
||||
grpc=grpc protobuf
|
||||
imagick=imagemagick
|
||||
memcached=libmemcached libevent
|
||||
protobuf=protobuf
|
||||
rdkafka=librdkafka
|
||||
snappy=snappy
|
||||
sodium=libsodium
|
||||
ssh2=libssh2
|
||||
uv=libuv
|
||||
uuid=util-linux
|
||||
vips=vips
|
||||
yaz=yaz
|
||||
yaml=libyaml
|
||||
zstd=zstd
|
||||
zmq=zeromq
|
||||
3
src/configs/ini/jit.ini
Normal file
3
src/configs/ini/jit.ini
Normal file
@@ -0,0 +1,3 @@
|
||||
opcache.enable=1
|
||||
opcache.jit_buffer_size=256M
|
||||
opcache.jit=1235
|
||||
3
src/configs/ini/jit_aarch64.ini
Normal file
3
src/configs/ini/jit_aarch64.ini
Normal file
@@ -0,0 +1,3 @@
|
||||
opcache.enable=1
|
||||
opcache.jit_buffer_size=128M
|
||||
opcache.jit=1235
|
||||
2
src/configs/ini/php.ini
Normal file
2
src/configs/ini/php.ini
Normal file
@@ -0,0 +1,2 @@
|
||||
date.timezone=UTC
|
||||
memory_limit=-1
|
||||
1
src/configs/ini/xdebug.ini
Normal file
1
src/configs/ini/xdebug.ini
Normal file
@@ -0,0 +1 @@
|
||||
xdebug.mode=coverage
|
||||
22
src/configs/linux_libs
Normal file
22
src/configs/linux_libs
Normal file
@@ -0,0 +1,22 @@
|
||||
amqp=librabbitmq-dev
|
||||
decimal=libmpdec-dev
|
||||
ev=libev-dev
|
||||
event=libevent-dev
|
||||
geoip=libgeoip-dev
|
||||
gmagick=graphicsmagick-libmagick-dev-compat
|
||||
gnupg=libgpgme-dev
|
||||
grpc=libgrpc-dev libprotobuf-dev protobuf-compiler
|
||||
imagick=libmagickwand-dev libmagickcore-dev
|
||||
memcached=libmemcached-dev libevent-dev
|
||||
protobuf=libprotobuf-dev protobuf-compiler
|
||||
rdkafka=librdkafka-dev
|
||||
snappy=libsnappy-dev
|
||||
sodium=libsodium-dev
|
||||
ssh2=libssh2-1-dev
|
||||
uv=libuv1-dev
|
||||
uuid=uuid-dev
|
||||
vips=libvips-dev
|
||||
yaz=libyaz-dev
|
||||
yaml=libyaml-dev
|
||||
zstd=libzstd-dev
|
||||
zmq=libzmq3-dev
|
||||
31
src/configs/mod_priority
Normal file
31
src/configs/mod_priority
Normal file
@@ -0,0 +1,31 @@
|
||||
apc=25
|
||||
apcu_bc=25
|
||||
apcu-bc=25
|
||||
blackfire=30
|
||||
couchbase=30
|
||||
decimal=30
|
||||
ds=30
|
||||
event=30
|
||||
ev=30
|
||||
grpc=30
|
||||
http=25
|
||||
pecl_http=25
|
||||
pecl-http=25
|
||||
inotify=30
|
||||
libvirt-php=40
|
||||
mailparse=25
|
||||
maxminddb=30
|
||||
memcached=25
|
||||
mysqlnd=10
|
||||
mysqlnd_ms=30
|
||||
opcache=10
|
||||
openswoole=25
|
||||
pdo=10
|
||||
phalcon=35
|
||||
protobuf=30
|
||||
psr=15
|
||||
rdkafka=30
|
||||
swoole=25
|
||||
vips=30
|
||||
xml=15
|
||||
zstd=30
|
||||
@@ -3,6 +3,7 @@
|
||||
10,buster
|
||||
11,bullseye
|
||||
12,bookworm
|
||||
13,trixie
|
||||
16.04 LTS,xenial
|
||||
16.10,yakkety
|
||||
17.04,zesty
|
||||
@@ -15,3 +16,12 @@
|
||||
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
|
||||
|
||||
|
@@ -1,7 +1,10 @@
|
||||
{
|
||||
"latest": "8.1",
|
||||
"nightly": "8.2",
|
||||
"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.1"
|
||||
"8.x": "8.5"
|
||||
}
|
||||
11
src/configs/php_debug_packages
Normal file
11
src/configs/php_debug_packages
Normal file
@@ -0,0 +1,11 @@
|
||||
cgi
|
||||
cli
|
||||
curl
|
||||
fpm
|
||||
intl
|
||||
mbstring
|
||||
mysql
|
||||
opcache
|
||||
pgsql
|
||||
xml
|
||||
zip
|
||||
12
src/configs/php_packages
Normal file
12
src/configs/php_packages
Normal file
@@ -0,0 +1,12 @@
|
||||
cgi
|
||||
cli
|
||||
curl
|
||||
dev
|
||||
fpm
|
||||
intl
|
||||
mbstring
|
||||
mysql
|
||||
opcache
|
||||
pgsql
|
||||
xml
|
||||
zip
|
||||
@@ -1,11 +1,46 @@
|
||||
{
|
||||
"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": "-V"
|
||||
"version_parameter": "diagnose"
|
||||
},
|
||||
"cs2pr": {
|
||||
"type": "phar",
|
||||
@@ -15,6 +50,12 @@
|
||||
"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",
|
||||
@@ -23,6 +64,11 @@
|
||||
"version_prefix": "",
|
||||
"version_parameter": "-V"
|
||||
},
|
||||
"name-collision-detector": {
|
||||
"type": "composer",
|
||||
"repository": "shipmonk/name-collision-detector",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"phan": {
|
||||
"type": "phar",
|
||||
"repository": "phan/phan",
|
||||
@@ -41,16 +87,25 @@
|
||||
},
|
||||
"php-cs-fixer": {
|
||||
"type": "phar",
|
||||
"repository": "FriendsOfPHP/PHP-CS-Fixer",
|
||||
"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": "squizlabs/PHP_CodeSniffer",
|
||||
"repository": "PHPCSStandards/PHP_CodeSniffer",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
@@ -58,7 +113,7 @@
|
||||
},
|
||||
"phpcs": {
|
||||
"type": "phar",
|
||||
"repository": "squizlabs/PHP_CodeSniffer",
|
||||
"repository": "PHPCSStandards/PHP_CodeSniffer",
|
||||
"extension": ".phar",
|
||||
"domain": "https://github.com",
|
||||
"version_prefix": "",
|
||||
@@ -97,6 +152,22 @@
|
||||
"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",
|
||||
@@ -126,11 +197,6 @@
|
||||
"repository": "maglnet/composer-require-checker",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"composer-unused": {
|
||||
"type": "composer",
|
||||
"repository": "icanhazstring/composer-unused",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"flex": {
|
||||
"type": "composer",
|
||||
"repository": "symfony/flex",
|
||||
@@ -168,6 +234,11 @@
|
||||
"repository": "laravel/vapor-cli",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"rector": {
|
||||
"type": "composer",
|
||||
"repository": "rector/rector",
|
||||
"scope": "scoped"
|
||||
},
|
||||
"blackfire": {
|
||||
"type": "custom-package",
|
||||
"alias": "blackfire-agent"
|
||||
@@ -178,12 +249,26 @@
|
||||
"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",
|
||||
@@ -191,6 +276,14 @@
|
||||
"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",
|
||||
@@ -237,6 +330,7 @@
|
||||
"phpunit": {
|
||||
"type": "custom-function",
|
||||
"repository": "sebastianbergmann/phpunit",
|
||||
"packagist": "phpunit/phpunit",
|
||||
"domain": "https://phar.phpunit.de",
|
||||
"function": "phpunit",
|
||||
"version_prefix": "",
|
||||
@@ -251,15 +345,6 @@
|
||||
"type": "custom-function",
|
||||
"function": "dev_tools"
|
||||
},
|
||||
"symfony-cli": {
|
||||
"type": "custom-function",
|
||||
"function": "symfony",
|
||||
"alias": "symfony",
|
||||
"domain": "https://github.com",
|
||||
"repository": "symfony/cli",
|
||||
"version_prefix": "v",
|
||||
"version_parameter": "version"
|
||||
},
|
||||
"wp-cli": {
|
||||
"type": "custom-function",
|
||||
"function": "wp_cli",
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"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",
|
||||
@@ -77,6 +78,15 @@
|
||||
"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",
|
||||
|
||||
2
src/configs/windows_extensions
Normal file
2
src/configs/windows_extensions
Normal file
@@ -0,0 +1,2 @@
|
||||
xdebug
|
||||
pcov
|
||||
112
src/core.ts
Normal file
112
src/core.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
import {EOL} from 'os';
|
||||
|
||||
/**
|
||||
* Commands
|
||||
*
|
||||
* Command Format:
|
||||
* ::name key=value,key=value::message
|
||||
*
|
||||
* @see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions
|
||||
*/
|
||||
|
||||
interface CommandProperties {
|
||||
[key: string]: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanitizes the message for use in a workflow command.
|
||||
* @param message
|
||||
*/
|
||||
function toCommandValue(message: string | Error): string {
|
||||
if (message instanceof Error) {
|
||||
return message.toString();
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes data for safe use in workflow command messages.
|
||||
* @param s
|
||||
*/
|
||||
function escapeData(s: string | Error): string {
|
||||
return toCommandValue(s)
|
||||
.replace(/%/g, '%25')
|
||||
.replace(/\r/g, '%0D')
|
||||
.replace(/\n/g, '%0A');
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes property values for safe use in workflow command properties.
|
||||
* @param s
|
||||
*/
|
||||
function escapeProperty(s: string): string {
|
||||
return s
|
||||
.replace(/%/g, '%25')
|
||||
.replace(/\r/g, '%0D')
|
||||
.replace(/\n/g, '%0A')
|
||||
.replace(/:/g, '%3A')
|
||||
.replace(/,/g, '%2C');
|
||||
}
|
||||
|
||||
/**
|
||||
* Issues a command to the GitHub Actions runner.
|
||||
*
|
||||
* @param command - The command name to issue
|
||||
* @param properties - Additional properties for the command (key-value pairs)
|
||||
* @param message - The message to include with the command
|
||||
*/
|
||||
export function issueCommand(
|
||||
command: string,
|
||||
properties: CommandProperties,
|
||||
message: string | Error
|
||||
): void {
|
||||
let cmdStr = `::${command}`;
|
||||
|
||||
if (properties && Object.keys(properties).length > 0) {
|
||||
cmdStr += ' ';
|
||||
const props = Object.entries(properties)
|
||||
.filter(([, val]) => val)
|
||||
.map(([key, val]) => `${key}=${escapeProperty(val)}`)
|
||||
.join(',');
|
||||
cmdStr += props;
|
||||
}
|
||||
|
||||
cmdStr += `::${escapeData(message)}`;
|
||||
process.stdout.write(cmdStr + EOL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an error issue.
|
||||
* @param message - error issue message
|
||||
*/
|
||||
export function error(message: string | Error): void {
|
||||
issueCommand('error', {}, message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the action status to failed.
|
||||
* When the action exits it will be with an exit code of 1.
|
||||
* @param message - add error issue message
|
||||
*/
|
||||
export function setFailed(message: string | Error): void {
|
||||
process.exitCode = 1;
|
||||
error(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of an input.
|
||||
* The value is trimmed.
|
||||
* Returns an empty string if the value is not defined.
|
||||
*
|
||||
* @param name - name of the input to get
|
||||
* @param required - whether the input is required
|
||||
* @returns string
|
||||
*/
|
||||
export function getInput(name: string, required = false): string {
|
||||
const val: string =
|
||||
process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
|
||||
if (required && !val) {
|
||||
throw new Error(`Input required and not supplied: ${name}`);
|
||||
}
|
||||
return val.trim();
|
||||
}
|
||||
106
src/coverage.ts
106
src/coverage.ts
@@ -16,77 +16,70 @@ export async function checkXdebugError(
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to setup Xdebug
|
||||
* Function to set up Xdebug
|
||||
*
|
||||
* @param extension
|
||||
* @param version
|
||||
* @param os_version
|
||||
* @param os
|
||||
* @param pipe
|
||||
*/
|
||||
export async function addCoverageXdebug(
|
||||
extension: string,
|
||||
version: string,
|
||||
os_version: string,
|
||||
os: string,
|
||||
pipe: string
|
||||
): Promise<string> {
|
||||
let script = '\n';
|
||||
let message: string = await checkXdebugError(extension, version);
|
||||
let status = '$cross';
|
||||
if (!message) {
|
||||
const error: string = await checkXdebugError(extension, version);
|
||||
if (!error) {
|
||||
script +=
|
||||
(await extensions.addExtension(
|
||||
':pcov:false',
|
||||
version,
|
||||
os_version,
|
||||
true
|
||||
)) + pipe;
|
||||
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
|
||||
extension = extension == 'xdebug3' ? 'xdebug' : extension;
|
||||
script +=
|
||||
(await extensions.addExtension(extension, version, os_version, true)) +
|
||||
pipe;
|
||||
message = 'Xdebug enabled as coverage driver';
|
||||
status = '$tick';
|
||||
(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);
|
||||
}
|
||||
script += await utils.addLog(status, extension, message, os_version);
|
||||
return script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to setup PCOV
|
||||
* Function to set up PCOV
|
||||
*
|
||||
* @param version
|
||||
* @param os_version
|
||||
* @param os
|
||||
* @param pipe
|
||||
*/
|
||||
export async function addCoveragePCOV(
|
||||
version: string,
|
||||
os_version: string,
|
||||
os: string,
|
||||
pipe: string
|
||||
): Promise<string> {
|
||||
let script = '\n';
|
||||
switch (true) {
|
||||
default:
|
||||
script +=
|
||||
(await extensions.addExtension(
|
||||
':xdebug:false',
|
||||
version,
|
||||
os_version,
|
||||
true
|
||||
)) + pipe;
|
||||
script +=
|
||||
(await extensions.addExtension('pcov', version, os_version, true)) +
|
||||
(await extensions.addExtension(':xdebug:false', version, os, true)) +
|
||||
pipe;
|
||||
script +=
|
||||
(await config.addINIValues('pcov.enabled=1', os_version, true)) + '\n';
|
||||
|
||||
// success
|
||||
script += await utils.addLog(
|
||||
'$tick',
|
||||
'coverage: pcov',
|
||||
'PCOV enabled as coverage driver',
|
||||
os_version
|
||||
(await extensions.addExtension('pcov', version, os, true)) + pipe;
|
||||
script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n';
|
||||
script += await utils.setVariable(
|
||||
'pcov_version',
|
||||
'php -r "echo phpversion(\'pcov\');"',
|
||||
os
|
||||
);
|
||||
// version is not supported
|
||||
script +=
|
||||
(await utils.getCommand(os, 'extension_log')) +
|
||||
'pcov "PCOV $pcov_version enabled as coverage driver"';
|
||||
break;
|
||||
|
||||
case /5\.[3-6]|7\.0/.test(version):
|
||||
@@ -94,7 +87,7 @@ export async function addCoveragePCOV(
|
||||
'$cross',
|
||||
'pcov',
|
||||
'PHP 7.1 or newer is required',
|
||||
os_version
|
||||
os
|
||||
);
|
||||
break;
|
||||
}
|
||||
@@ -106,31 +99,20 @@ export async function addCoveragePCOV(
|
||||
* Function to disable Xdebug and PCOV
|
||||
*
|
||||
* @param version
|
||||
* @param os_version
|
||||
* @param os
|
||||
* @param pipe
|
||||
*/
|
||||
export async function disableCoverage(
|
||||
version: string,
|
||||
os_version: string,
|
||||
os: string,
|
||||
pipe: string
|
||||
): Promise<string> {
|
||||
let script = '\n';
|
||||
script +=
|
||||
(await extensions.addExtension(':pcov:false', version, os_version, true)) +
|
||||
pipe;
|
||||
(await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
|
||||
script +=
|
||||
(await extensions.addExtension(
|
||||
':xdebug:false',
|
||||
version,
|
||||
os_version,
|
||||
true
|
||||
)) + pipe;
|
||||
script += await utils.addLog(
|
||||
'$tick',
|
||||
'none',
|
||||
'Disabled Xdebug and PCOV',
|
||||
os_version
|
||||
);
|
||||
(await extensions.addExtension(':xdebug:false', version, os, true)) + pipe;
|
||||
script += await utils.addLog('$tick', 'none', 'Disabled Xdebug and PCOV', os);
|
||||
|
||||
return script;
|
||||
}
|
||||
@@ -140,29 +122,27 @@ export async function disableCoverage(
|
||||
*
|
||||
* @param coverage_driver
|
||||
* @param version
|
||||
* @param os_version
|
||||
* @param os
|
||||
*/
|
||||
export async function addCoverage(
|
||||
coverage_driver: string,
|
||||
version: string,
|
||||
os_version: string
|
||||
os: string
|
||||
): Promise<string> {
|
||||
coverage_driver = coverage_driver.toLowerCase();
|
||||
const script: string =
|
||||
'\n' + (await utils.stepLog('Setup Coverage', os_version));
|
||||
const pipe: string = (await utils.suppressOutput(os_version)) + '\n';
|
||||
const script: string = '\n' + (await utils.stepLog('Setup Coverage', os));
|
||||
const pipe: string = (await utils.suppressOutput(os)) + '\n';
|
||||
switch (coverage_driver) {
|
||||
case 'pcov':
|
||||
return script + (await addCoveragePCOV(version, os_version, pipe));
|
||||
return script + (await addCoveragePCOV(version, os, pipe));
|
||||
case 'xdebug':
|
||||
case 'xdebug2':
|
||||
case 'xdebug3':
|
||||
return (
|
||||
script +
|
||||
(await addCoverageXdebug(coverage_driver, version, os_version, pipe))
|
||||
script + (await addCoverageXdebug(coverage_driver, version, os, pipe))
|
||||
);
|
||||
case 'none':
|
||||
return script + (await disableCoverage(version, os_version, pipe));
|
||||
return script + (await disableCoverage(version, os, pipe));
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
|
||||
@@ -31,22 +31,33 @@ export async function addExtensionDarwin(
|
||||
case /.+-.+\/.+@.+/.test(extension):
|
||||
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||
return;
|
||||
// match 5.3blackfire...8.1blackfire
|
||||
// match 5.3blackfire-(semver)...8.1blackfire-(semver)
|
||||
// match couchbase, geos, pdo_oci, oci8, http, pecl_http
|
||||
// match 5.3ioncube...7.4ioncube
|
||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||
// 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 /^couchbase$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||
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])ioncube$/.test(version_extension):
|
||||
case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4/.test(version_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,
|
||||
'ext',
|
||||
'extensions',
|
||||
extension,
|
||||
'darwin'
|
||||
);
|
||||
@@ -61,7 +72,7 @@ export async function addExtensionDarwin(
|
||||
);
|
||||
return;
|
||||
// match semver
|
||||
case /.+-\d+\.\d+\.\d+.*/.test(extension):
|
||||
case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
|
||||
add_script += await utils.joins(
|
||||
'\nadd_pecl_extension',
|
||||
ext_name,
|
||||
@@ -73,16 +84,15 @@ export async function addExtensionDarwin(
|
||||
case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||
add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
|
||||
return;
|
||||
// match 5.6 and newer - amqp, apcu, expect, grpc, igbinary, imagick, imap, memcache, memcached, mongodb, msgpack, protobuf, raphf, rdkafka, redis, ssh2, swoole, xdebug, xdebug2, yaml, zmq
|
||||
// match 7.1 and newer - pcov
|
||||
// match 5.6 to 7.4 - propro
|
||||
// match 7.0 and newer - vips, xlswriter
|
||||
case /(?<!5\.[3-5])(amqp|apcu|expect|grpc|igbinary|imagick|imap|mailparse|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|ssh2|swoole|xdebug|xdebug2|yaml|zmq)/.test(
|
||||
// match brew extensions
|
||||
case /(?<!5\.[3-5])(amqp|apcu|brotli|excimer|expect|gmagick|gnupg|grpc|igbinary|imagick|imap|interbase|mailparse|maxminddb|mcrypt|memcache|memcached|mongodb|mongodb1|msgpack|newrelic|oauth|opentelemetry|pdo_firebird|pinba|protobuf|psr|raphf|rdkafka|redis|scalar_objects|seaslog|snmp|spx|ssh2|swoole|uopz|uploadprogress|uuid|vld|xdebug|xdebug2|xhprof|yaml|zmq|zstd)/.test(
|
||||
version_extension
|
||||
):
|
||||
case /(5\.6|7\.[0-4])propro/.test(version_extension):
|
||||
case /(?<!5\.[3-6])(ds|v8js)/.test(version_extension):
|
||||
case /(5\.6|7\.[0-4])(propro|lua)/.test(version_extension):
|
||||
case /(?<!5\.[3-6]|7\.0)pcov/.test(version_extension):
|
||||
case /(?<!5\.[3-6])(vips|xlswriter)/.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,
|
||||
@@ -127,22 +137,31 @@ export async function addExtensionWindows(
|
||||
case /^none$/.test(ext_name):
|
||||
add_script += '\nDisable-AllShared';
|
||||
break;
|
||||
// match 5.3blackfire...8.0blackfire
|
||||
// match 5.3blackfire-(semver)...8.0blackfire-(semver)
|
||||
// match pdo_oci and oci8
|
||||
// match 5.3ioncube...7.4ioncube
|
||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||
// match 7.1pecl_http...8.0pecl_http and 7.1http...8.0http
|
||||
case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||
// 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
|
||||
):
|
||||
case /^pdo_oci$|^oci8$|^pdo_firebird$/.test(extension):
|
||||
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
|
||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
|
||||
case /^(7\.[1-4]|8\.0)(pecl_)?http/.test(version_extension):
|
||||
add_script += await utils.customPackage(
|
||||
ext_name,
|
||||
'ext',
|
||||
'extensions',
|
||||
extension,
|
||||
'win32'
|
||||
);
|
||||
@@ -163,15 +182,6 @@ export async function addExtensionWindows(
|
||||
'win32'
|
||||
);
|
||||
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 semver with state
|
||||
case /.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(extension):
|
||||
matches = /.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec(
|
||||
@@ -184,6 +194,15 @@ export async function addExtensionWindows(
|
||||
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';
|
||||
@@ -249,27 +268,38 @@ export async function addExtensionLinux(
|
||||
case /.+-.+\/.+@.+/.test(extension):
|
||||
add_script += await utils.parseExtensionSource(extension, ext_prefix);
|
||||
return;
|
||||
// match 5.3blackfire...8.1blackfire
|
||||
// match 5.3blackfire-(semver)...8.1blackfire-(semver)
|
||||
// match 7.4relay...8.5relay
|
||||
// match 5.3blackfire...8.5blackfire
|
||||
// match 5.3blackfire-(semver)...8.5blackfire-(semver)
|
||||
// match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
|
||||
// match couchbase, geos, pdo_oci, oci8, http, pecl_http
|
||||
// match 5.3ioncube...7.4ioncube
|
||||
// match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
|
||||
case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
|
||||
// match couchbase, 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, 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$|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
|
||||
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])ioncube$/.test(version_extension):
|
||||
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_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,
|
||||
'ext',
|
||||
'extensions',
|
||||
extension,
|
||||
'linux'
|
||||
);
|
||||
@@ -284,7 +314,7 @@ export async function addExtensionLinux(
|
||||
);
|
||||
return;
|
||||
// match semver versions
|
||||
case /.+-\d+\.\d+\.\d+.*/.test(extension):
|
||||
case /.+-\d+(\.\d+\.\d+.*)?/.test(extension):
|
||||
add_script += await utils.joins(
|
||||
'\nadd_pecl_extension',
|
||||
ext_name,
|
||||
@@ -327,20 +357,20 @@ export async function addExtensionLinux(
|
||||
*
|
||||
* @param extension_csv
|
||||
* @param version
|
||||
* @param os_version
|
||||
* @param os
|
||||
* @param no_step
|
||||
*/
|
||||
export async function addExtension(
|
||||
extension_csv: string,
|
||||
version: string,
|
||||
os_version: string,
|
||||
os: string,
|
||||
no_step = false
|
||||
): Promise<string> {
|
||||
const log: string = await utils.stepLog('Setup Extensions', os_version);
|
||||
const log: string = await utils.stepLog('Setup Extensions', os);
|
||||
let script = '\n';
|
||||
switch (no_step) {
|
||||
case true:
|
||||
script += log + (await utils.suppressOutput(os_version));
|
||||
script += log + (await utils.suppressOutput(os));
|
||||
break;
|
||||
case false:
|
||||
default:
|
||||
@@ -348,7 +378,7 @@ export async function addExtension(
|
||||
break;
|
||||
}
|
||||
|
||||
switch (os_version) {
|
||||
switch (os) {
|
||||
case 'win32':
|
||||
return script + (await addExtensionWindows(extension_csv, version));
|
||||
case 'darwin':
|
||||
@@ -357,8 +387,8 @@ export async function addExtension(
|
||||
return script + (await addExtensionLinux(extension_csv, version));
|
||||
default:
|
||||
return await utils.log(
|
||||
'Platform ' + os_version + ' is not supported',
|
||||
os_version,
|
||||
'Platform ' + os + ' is not supported',
|
||||
os,
|
||||
'error'
|
||||
);
|
||||
}
|
||||
|
||||
42
src/fetch.ts
Normal file
42
src/fetch.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Redirect status codes set for O(1) lookup
|
||||
*/
|
||||
const REDIRECT_CODES = new Set([301, 302, 303, 307, 308]);
|
||||
|
||||
/**
|
||||
* Function to fetch a URL using native fetch API (Node 24+)
|
||||
*
|
||||
* @param input_url
|
||||
* @param auth_token
|
||||
* @param redirect_count
|
||||
*/
|
||||
export async function fetch(
|
||||
input_url: string,
|
||||
auth_token?: string,
|
||||
redirect_count = 5
|
||||
): Promise<Record<string, string>> {
|
||||
const headers: Record<string, string> = {
|
||||
'User-Agent': `Mozilla/5.0 (${process.platform} ${process.arch}) setup-php`
|
||||
};
|
||||
if (auth_token) {
|
||||
headers['Authorization'] = 'Bearer ' + auth_token;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await globalThis.fetch(input_url, {
|
||||
headers,
|
||||
redirect: redirect_count > 0 ? 'follow' : 'manual'
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
const data = await response.text();
|
||||
return {data};
|
||||
} else if (REDIRECT_CODES.has(response.status) && redirect_count <= 0) {
|
||||
return {error: `${response.status}: Redirect error`};
|
||||
} else {
|
||||
return {error: `${response.status}: ${response.statusText}`};
|
||||
}
|
||||
} catch (error) {
|
||||
return {error: `Fetch error: ${(error as Error).message}`};
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import {exec} from '@actions/exec';
|
||||
import * as core from '@actions/core';
|
||||
import * as config from './config';
|
||||
import * as core from './core';
|
||||
import * as coverage from './coverage';
|
||||
import * as extensions from './extensions';
|
||||
import * as tools from './tools';
|
||||
@@ -9,66 +11,62 @@ import * as utils from './utils';
|
||||
/**
|
||||
* Build the script
|
||||
*
|
||||
* @param filename
|
||||
* @param version
|
||||
* @param os_version
|
||||
* @param os
|
||||
*/
|
||||
export async function getScript(
|
||||
filename: string,
|
||||
version: string,
|
||||
os_version: string
|
||||
): Promise<string> {
|
||||
export async function getScript(os: string): Promise<string> {
|
||||
const url = 'https://setup-php.com/sponsor';
|
||||
// taking inputs
|
||||
process.env['fail_fast'] = await utils.getInput('fail-fast', false);
|
||||
const extension_csv: string = await utils.getInput('extensions', false);
|
||||
const filename = os + (await utils.scriptExtension(os));
|
||||
const script_path = path.join(__dirname, '../src/scripts', filename);
|
||||
const run_path = script_path.replace(os, 'run');
|
||||
const extension_csv: string = utils.sanitizeShellInput(
|
||||
await utils.getInput('extensions', false),
|
||||
true
|
||||
);
|
||||
const ini_values_csv: string = await utils.getInput('ini-values', false);
|
||||
const coverage_driver: string = await utils.getInput('coverage', false);
|
||||
const tools_csv: string = await utils.getInput('tools', false);
|
||||
|
||||
let script: string = await utils.readFile(filename, 'src/scripts');
|
||||
script += await tools.addTools(tools_csv, 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) {
|
||||
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_version);
|
||||
script += await coverage.addCoverage(coverage_driver, version, os);
|
||||
}
|
||||
if (ini_values_csv) {
|
||||
script += await config.addINIValues(ini_values_csv, os_version);
|
||||
script += await config.addINIValues(ini_values_csv, os);
|
||||
}
|
||||
script += '\n' + (await utils.stepLog(`Sponsor setup-php`, os_version));
|
||||
script += '\n' + (await utils.addLog('$tick', 'setup-php', url, 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
|
||||
*/
|
||||
export async function run(): Promise<void> {
|
||||
try {
|
||||
if ((await utils.readEnv('ImageOS')) == 'ubuntu16') {
|
||||
core.setFailed(
|
||||
'setup-php is not supported on Ubuntu 16.04. Please upgrade to Ubuntu 18.04 or Ubuntu 20.04 - https://setup-php.com/i/452'
|
||||
);
|
||||
return;
|
||||
}
|
||||
const version: string = await utils.parseVersion(
|
||||
await utils.getInput('php-version', true)
|
||||
);
|
||||
if (version) {
|
||||
const os_version: string = process.platform;
|
||||
const tool = await utils.scriptTool(os_version);
|
||||
const script = os_version + (await utils.scriptExtension(os_version));
|
||||
const location = await getScript(script, version, os_version);
|
||||
await exec(await utils.joins(tool, location, version, __dirname));
|
||||
} else {
|
||||
core.setFailed('Unable to get the PHP version');
|
||||
}
|
||||
} catch (error) {
|
||||
core.setFailed((error as Error).message);
|
||||
}
|
||||
await setEnv();
|
||||
const os: string = process.platform;
|
||||
const tool = await utils.scriptTool(os);
|
||||
const run_path = await getScript(os);
|
||||
await exec(tool + run_path);
|
||||
}
|
||||
|
||||
// call the run function
|
||||
|
||||
37
src/packagist.ts
Normal file
37
src/packagist.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import * as cv from 'compare-versions';
|
||||
import * as fetch from './fetch';
|
||||
|
||||
type RS = Record<string, string>;
|
||||
type RSRS = Record<string, RS>;
|
||||
|
||||
export async function search(
|
||||
package_name: string,
|
||||
php_version: string
|
||||
): Promise<string | null> {
|
||||
const response = await fetch.fetch(
|
||||
`https://repo.packagist.org/p2/${package_name}.json`
|
||||
);
|
||||
if (response.error || response.data === '[]') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const data = JSON.parse(response['data']);
|
||||
if (data && data.packages) {
|
||||
const versions = data.packages[package_name];
|
||||
versions.sort((a: RS, b: RS) => cv.compareVersions(b.version, a.version));
|
||||
|
||||
const result = versions.find((versionData: RSRS) => {
|
||||
if (versionData?.require?.php) {
|
||||
return versionData?.require?.php
|
||||
.split('|')
|
||||
.some(
|
||||
require => require && cv.satisfies(php_version + '.0', require)
|
||||
);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
return result ? result.version : null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -1,380 +0,0 @@
|
||||
# Variables
|
||||
export tick="✓"
|
||||
export cross="✗"
|
||||
export curl_opts=(-sL)
|
||||
export old_versions="5.[3-5]"
|
||||
export jit_versions="8.[0-9]"
|
||||
export nightly_versions="8.[2-9]"
|
||||
export xdebug3_versions="7.[2-4]|8.[0-9]"
|
||||
export tool_path_dir="/usr/local/bin"
|
||||
export composer_home="$HOME/.composer"
|
||||
export composer_bin="$composer_home/vendor/bin"
|
||||
export composer_json="$composer_home/composer.json"
|
||||
export composer_lock="$composer_home/composer.lock"
|
||||
export latest="releases/latest/download"
|
||||
export github="https://github.com/shivammathur"
|
||||
export jsdeliver="https://cdn.jsdelivr.net/gh/shivammathur"
|
||||
export setup_php="https://setup-php.com"
|
||||
|
||||
# Function to log start of a operation.
|
||||
step_log() {
|
||||
message=$1
|
||||
printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
|
||||
}
|
||||
|
||||
# Function to log result of a operation.
|
||||
add_log() {
|
||||
mark=$1
|
||||
subject=$2
|
||||
message=$3
|
||||
if [ "$mark" = "$tick" ]; then
|
||||
printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||
else
|
||||
printf "\033[31;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
|
||||
[ "$fail_fast" = "true" ] && exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to log result of installing extension.
|
||||
add_extension_log() {
|
||||
(
|
||||
check_extension "$(echo "$1" | cut -d '-' -f 1)" && add_log "$tick" "$1" "$2"
|
||||
) || add_log "$cross" "$1" "Could not install $1 on PHP ${semver:?}"
|
||||
}
|
||||
|
||||
# Function to read env inputs.
|
||||
read_env() {
|
||||
[[ -z "${update}" ]] && update='false' && UPDATE='false' || update="${update}"
|
||||
[ "$update" = false ] && [[ -n ${UPDATE} ]] && update="${UPDATE}"
|
||||
[[ -z "${runner}" ]] && runner='github' && RUNNER='github' || runner="${runner}"
|
||||
[ "$runner" = false ] && [[ -n ${RUNNER} ]] && runner="${RUNNER}"
|
||||
[[ -z "${fail_fast}" ]] && fail_fast='false' || fail_fast="${fail_fast}"
|
||||
}
|
||||
|
||||
# Function to download a file using cURL.
|
||||
# mode: -s pipe to stdout, -v save file and return status code
|
||||
# execute: -e save file as executable
|
||||
get() {
|
||||
mode=$1
|
||||
execute=$2
|
||||
file_path=$3
|
||||
shift 3
|
||||
links=("$@")
|
||||
if [ "$mode" = "-s" ]; then
|
||||
sudo curl "${curl_opts[@]}" "${links[0]}"
|
||||
else
|
||||
for link in "${links[@]}"; do
|
||||
status_code=$(sudo curl -w "%{http_code}" -o "$file_path" "${curl_opts[@]}" "$link")
|
||||
[ "$status_code" = "200" ] && break
|
||||
done
|
||||
[ "$execute" = "-e" ] && sudo chmod a+x "$file_path"
|
||||
[ "$mode" = "-v" ] && echo "$status_code"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to download and run scripts from GitHub releases with jsdeliver fallback.
|
||||
run_script() {
|
||||
repo=$1
|
||||
shift
|
||||
args=("$@")
|
||||
get -q -e /tmp/install.sh "$github/$repo/$latest/install.sh" "$jsdeliver/$repo@main/scripts/install.sh" "$setup_php/$repo/install.sh"
|
||||
bash /tmp/install.sh "${args[@]}"
|
||||
}
|
||||
|
||||
# Function to install required packages on self-hosted runners.
|
||||
self_hosted_setup() {
|
||||
if [ "$runner" = "self-hosted" ]; then
|
||||
if [[ "${version:?}" =~ $old_versions ]]; then
|
||||
add_log "$cross" "PHP" "PHP $version is not supported on self-hosted runner"
|
||||
exit 1
|
||||
else
|
||||
self_hosted_helper >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to test if extension is loaded.
|
||||
check_extension() {
|
||||
local extension=$1
|
||||
if [ "$extension" != "mysql" ]; then
|
||||
php -m | grep -i -q -w "$extension"
|
||||
else
|
||||
php -m | grep -i -q "$extension"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to check if extension is shared
|
||||
shared_extension() {
|
||||
[ -e "${ext_dir:?}/$1.so" ]
|
||||
}
|
||||
|
||||
# Function to enable cached extension's dependencies.
|
||||
enable_cache_extension_dependencies() {
|
||||
if [ -d /tmp/extcache ] && shared_extension "$1"; then
|
||||
cache_dir=$(find /tmp/extcache -maxdepth 1 -type d -regex ".*$1[0-9]*")
|
||||
if [[ -n "$cache_dir" ]]; then
|
||||
IFS=" " read -r -a deps <<<"$(find "$cache_dir" -maxdepth 1 -type f -name "*" -exec basename {} \; | tr '\n' ' ')"
|
||||
if [[ -n "${deps[*]}" ]] && php "${deps[@]/#/-d ${2}=}" -d "${2}=$1" -m 2>/dev/null | grep -i -q "$1"; then
|
||||
for ext in "${deps[@]}"; do
|
||||
sudo rm -rf /tmp/extcache/"$ext"
|
||||
enable_extension "$ext" "$2"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to enable existing extensions.
|
||||
enable_extension() {
|
||||
modules_dir="/var/lib/php/modules/$version"
|
||||
[ -d "$modules_dir" ] && sudo find "$modules_dir" -path "*disabled*$1" -delete
|
||||
enable_extension_dependencies "$1" "$2"
|
||||
enable_cache_extension_dependencies "$1" "$2"
|
||||
if ! check_extension "$1" && shared_extension "$1"; then
|
||||
echo "$2=${ext_dir:?}/$1.so" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get a map of extensions and their dependent shared extensions.
|
||||
get_extension_map() {
|
||||
php -d'error_reporting=0' "${dist:?}"/../src/scripts/ext/extension_map.php
|
||||
}
|
||||
|
||||
# Function to enable extension dependencies which are also extensions.
|
||||
enable_extension_dependencies() {
|
||||
local extension=$1
|
||||
prefix=$2
|
||||
if ! [ -e /tmp/map.orig ]; then
|
||||
get_extension_map | sudo tee /tmp/map.orig >/dev/null
|
||||
fi
|
||||
for dependency in $(grep "$extension:" /tmp/map.orig | cut -d ':' -f 2 | tr '\n' ' '); do
|
||||
enable_extension "$dependency" "$prefix"
|
||||
done
|
||||
}
|
||||
|
||||
# Function to disable dependent extensions.
|
||||
disable_extension_dependents() {
|
||||
local extension=$1
|
||||
for dependent in $(get_extension_map | grep -E ".*:.*\s$extension(\s|$)" | cut -d ':' -f 1 | tr '\n' ' '); do
|
||||
disable_extension_helper "$dependent" true
|
||||
add_log "${tick:?}" ":$extension" "Disabled $dependent as it depends on $extension"
|
||||
done
|
||||
}
|
||||
|
||||
# Function to disable an extension.
|
||||
disable_extension() {
|
||||
local extension=$1
|
||||
if check_extension "$extension"; then
|
||||
if shared_extension "$extension"; then
|
||||
disable_extension_helper "$extension" true
|
||||
(! check_extension "$extension" && add_log "${tick:?}" ":$extension" "Disabled") ||
|
||||
add_log "${cross:?}" ":$extension" "Could not disable $extension on PHP ${semver:?}"
|
||||
else
|
||||
add_log "${cross:?}" ":$extension" "Could not disable $extension on PHP $semver as it not a shared extension"
|
||||
fi
|
||||
elif shared_extension "$extension"; then
|
||||
add_log "${tick:?}" ":$extension" "Disabled"
|
||||
else
|
||||
add_log "${tick:?}" ":$extension" "Could not find $extension on PHP $semver"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to disable shared extensions.
|
||||
disable_all_shared() {
|
||||
sudo sed -i.orig -E -e "/^(zend_)?extension\s*=/d" "${ini_file[@]}" "$pecl_file" 2>/dev/null || true
|
||||
sudo find "${ini_dir:-$scan_dir}"/.. -name "*.ini" -not -path "*php.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true
|
||||
add_log "${tick:?}" "none" "Disabled all shared extensions"
|
||||
}
|
||||
|
||||
# Function to configure PHP
|
||||
configure_php() {
|
||||
(
|
||||
echo -e "date.timezone=UTC\nmemory_limit=-1"
|
||||
[[ "$version" =~ $jit_versions ]] && echo -e "opcache.enable=1\nopcache.jit_buffer_size=256M\nopcache.jit=1235"
|
||||
[[ "$version" =~ $xdebug3_versions ]] && echo -e "xdebug.mode=coverage"
|
||||
) | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null
|
||||
}
|
||||
|
||||
# Function to configure PECL.
|
||||
configure_pecl() {
|
||||
if ! [ -e /tmp/pecl_config ]; then
|
||||
for script in pear pecl; do
|
||||
sudo "$script" config-set php_ini "${pecl_file:-${ini_file[@]}}"
|
||||
sudo "$script" channel-update "$script".php.net
|
||||
done
|
||||
echo '' | sudo tee /tmp/pecl_config >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get the PECL version of an extension.
|
||||
get_pecl_version() {
|
||||
local extension=$1
|
||||
stability="$(echo "$2" | grep -m 1 -Eio "(stable|alpha|beta|rc|snapshot|preview)")"
|
||||
pecl_rest='https://pecl.php.net/rest/r/'
|
||||
response=$(get -s -n "" "$pecl_rest$extension"/allreleases.xml)
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Eio "([0-9]+\.[0-9]+\.[0-9]+${stability}[0-9]+)")
|
||||
if [ ! "$pecl_version" ]; then
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Eo "([0-9]+\.[0-9]+\.[0-9]+)")
|
||||
fi
|
||||
echo "$pecl_version"
|
||||
}
|
||||
|
||||
# Function to install PECL extensions and accept default options
|
||||
pecl_install() {
|
||||
local extension=$1
|
||||
add_pecl >/dev/null 2>&1
|
||||
yes '' 2>/dev/null | sudo pecl install -f "$extension" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# Function to install a specific version of PECL extension.
|
||||
add_pecl_extension() {
|
||||
local extension=$1
|
||||
pecl_version=$2
|
||||
prefix=$3
|
||||
enable_extension "$extension" "$prefix"
|
||||
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
||||
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
||||
fi
|
||||
ext_version=$(php -r "echo phpversion('$extension');")
|
||||
if [ "${ext_version/-/}" = "$pecl_version" ]; then
|
||||
add_log "${tick:?}" "$extension" "Enabled"
|
||||
else
|
||||
disable_extension_helper "$extension" >/dev/null 2>&1
|
||||
pecl_install "$extension-$pecl_version"
|
||||
add_extension_log "$extension-$pecl_version" "Installed and enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup pre-release extensions using PECL.
|
||||
add_unstable_extension() {
|
||||
local extension=$1
|
||||
stability=$2
|
||||
prefix=$3
|
||||
pecl_version=$(get_pecl_version "$extension" "$stability")
|
||||
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
||||
}
|
||||
|
||||
# Function to extract tool version.
|
||||
get_tool_version() {
|
||||
tool=$1
|
||||
param=$2
|
||||
alp="[a-zA-Z0-9]"
|
||||
version_regex="[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}"
|
||||
if [ "$tool" = "composer" ]; then
|
||||
composer_alias_version="$(grep -Ea "const\sBRANCH_ALIAS_VERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")"
|
||||
if [[ -n "$composer_alias_version" ]]; then
|
||||
composer_version="$composer_alias_version+$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "$alp+" | tail -n 1)"
|
||||
else
|
||||
composer_version="$(grep -Ea "const\sVERSION" "$tool_path_dir/composer" | grep -Eo "$version_regex")"
|
||||
fi
|
||||
echo "$composer_version" | sudo tee /tmp/composer_version
|
||||
else
|
||||
$tool "$param" 2>/dev/null | sed -Ee "s/[Cc]omposer(.)?$version_regex//g" | grep -Eo "$version_regex" | head -n 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to configure composer
|
||||
configure_composer() {
|
||||
tool_path=$1
|
||||
sudo ln -sf "$tool_path" "$tool_path.phar"
|
||||
php -r "try {\$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception \$e) {exit(1);}"
|
||||
if [ $? -eq 1 ]; then
|
||||
add_log "$cross" "composer" "Could not download composer"
|
||||
exit 1
|
||||
fi
|
||||
if ! [ -d "$composer_home" ]; then
|
||||
sudo -u "$(id -un)" -g "$(id -gn)" mkdir -p -m=00755 "$composer_home"
|
||||
else
|
||||
sudo chown -R "$(id -un)":"$(id -gn)" "$composer_home"
|
||||
fi
|
||||
if ! [ -e "$composer_json" ]; then
|
||||
echo '{}' | tee "$composer_json" >/dev/null
|
||||
chmod 644 "$composer_json"
|
||||
fi
|
||||
composer -q config -g process-timeout 0
|
||||
echo "$composer_bin" >>"$GITHUB_PATH"
|
||||
if [ -n "$COMPOSER_TOKEN" ]; then
|
||||
composer -q config -g github-oauth.github.com "$COMPOSER_TOKEN"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup a remote tool.
|
||||
add_tool() {
|
||||
url=$1
|
||||
tool=$2
|
||||
ver_param=$3
|
||||
tool_path="$tool_path_dir/$tool"
|
||||
if ! [[ "$PATH" =~ $tool_path_dir ]]; then
|
||||
export PATH=$PATH:"$tool_path_dir"
|
||||
echo "export PATH=\$PATH:$tool_path_dir" | sudo tee -a "$GITHUB_ENV" >/dev/null
|
||||
fi
|
||||
if [ ! -e "$tool_path" ]; then
|
||||
rm -rf "$tool_path"
|
||||
fi
|
||||
IFS="," read -r -a url <<<"$url"
|
||||
status_code=$(get -v -e "$tool_path" "${url[@]}")
|
||||
if [ "$status_code" != "200" ] && [[ "${url[0]}" =~ .*github.com.*releases.*latest.* ]]; then
|
||||
url[0]="${url[0]//releases\/latest\/download/releases/download/$(get -s -n "" "$(echo "${url[0]}" | cut -d '/' -f '1-5')/releases" | grep -Eo -m 1 "([0-9]+\.[0-9]+\.[0-9]+)/$(echo "${url[0]}" | sed -e "s/.*\///")" | cut -d '/' -f 1)}"
|
||||
status_code=$(get -v -e "$tool_path" "${url[0]}")
|
||||
fi
|
||||
if [ "$status_code" = "200" ]; then
|
||||
add_tools_helper "$tool"
|
||||
tool_version=$(get_tool_version "$tool" "$ver_param")
|
||||
add_log "$tick" "$tool" "Added $tool $tool_version"
|
||||
else
|
||||
add_log "$cross" "$tool" "Could not setup $tool"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup a tool using composer.
|
||||
add_composertool() {
|
||||
tool=$1
|
||||
release=$2
|
||||
prefix=$3
|
||||
scope=$4
|
||||
if [[ "$tool" =~ prestissimo|composer-prefetcher ]]; then
|
||||
composer_version=$(cat /tmp/composer_version)
|
||||
if [ "$(echo "$composer_version" | cut -d'.' -f 1)" != "1" ]; then
|
||||
echo "::warning:: Skipping $tool, as it does not support Composer $composer_version. Specify composer:v1 in tools to use $tool"
|
||||
add_log "$cross" "$tool" "Skipped"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
(
|
||||
if [ "$scope" = "global" ]; then
|
||||
sudo rm -f "$composer_lock" >/dev/null 2>&1 || true
|
||||
composer global require "$prefix$release" 2>&1 | tee /tmp/composer.log >/dev/null 2>&1
|
||||
else
|
||||
scoped_dir="$composer_bin/_tools/$tool-$(echo -n "$release" | shasum -a 256 | cut -d ' ' -f 1)"
|
||||
if ! [ -e "$scoped_dir" ]; then
|
||||
mkdir -p "$scoped_dir"
|
||||
composer require "$prefix$release" -d "$scoped_dir" 2>&1 | tee /tmp/composer.log >/dev/null 2>&1
|
||||
export PATH=$PATH:"$scoped_dir"/vendor/bin
|
||||
echo "${tool}"_bin="$scoped_dir"/vendor/bin | sudo tee -a "$GITHUB_ENV" >/dev/null
|
||||
echo "$scoped_dir"/vendor/bin >>"$GITHUB_PATH"
|
||||
fi
|
||||
fi
|
||||
log=$(grep "$prefix$tool" /tmp/composer.log) &&
|
||||
tool_version=$(get_tool_version 'echo' "$log") &&
|
||||
add_log "$tick" "$tool" "Added $tool $tool_version"
|
||||
) || add_log "$cross" "$tool" "Could not setup $tool"
|
||||
add_tools_helper "$tool"
|
||||
if [ -e "$composer_bin/composer" ]; then
|
||||
sudo cp -p "$tool_path_dir/composer" "$composer_bin"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get PHP version in semver format.
|
||||
php_semver() {
|
||||
php -v | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+((-?[a-zA-Z]+([0-9]+)?)?){2}" | head -n 1
|
||||
}
|
||||
|
||||
# Function to get the tag for a php version.
|
||||
php_src_tag() {
|
||||
commit=$(php_extra_version | grep -Eo "[0-9a-zA-Z]+")
|
||||
if [[ -n "${commit}" ]]; then
|
||||
echo "$commit"
|
||||
else
|
||||
echo "php-$semver"
|
||||
fi
|
||||
}
|
||||
@@ -1,59 +1,73 @@
|
||||
# Function to setup environment for self-hosted runners.
|
||||
self_hosted_helper() {
|
||||
if ! command -v brew >/dev/null; then
|
||||
step_log "Setup Brew"
|
||||
get -q -e "/tmp/install.sh" "https://raw.githubusercontent.com/Homebrew/install/master/install.sh" && /tmp/install.sh >/dev/null 2>&1
|
||||
add_log "${tick:?}" "Brew" "Installed Homebrew"
|
||||
fi
|
||||
}
|
||||
|
||||
# Disable dependency extensions
|
||||
disable_dependency_extensions() {
|
||||
local extension=$1
|
||||
formula_file="$tap_dir/$ext_tap/Formula/$extension@${version:?}.rb"
|
||||
# Handle dependency extensions
|
||||
handle_dependency_extensions() {
|
||||
local formula=$1
|
||||
local extension=$2
|
||||
formula_file="${tap_dir:?}/$ext_tap/Formula/$extension@${version:?}.rb"
|
||||
[ -e "$formula_file" ] || formula_file="$tap_dir/$ext_tap/Formula/$formula@$version.rb"
|
||||
if [ -e "$formula_file" ]; then
|
||||
IFS=" " read -r -a dependency_extensions <<< "$(grep -Eo "shivammathur.*@" "$formula_file" | xargs -I {} -n 1 basename '{}' | cut -d '@' -f 1 | tr '\n' ' ')"
|
||||
for dependency_extension in "${dependency_extensions[@]}"; do
|
||||
sudo sed -Ei '' "/=(.*\/)?\"?$dependency_extension(.so)?$/d" "${ini_file:?}"
|
||||
done
|
||||
fi
|
||||
suffix="$(get_php_formula_suffix)"
|
||||
if [[ -n "$suffix" ]]; then
|
||||
brew_opts=(-sf)
|
||||
patch_abstract_file
|
||||
for dependency_extension in "${dependency_extensions[@]}"; do
|
||||
safe_brew install --skip-link "${brew_opts[@]}" "$ext_tap/$dependency_extension@$version" &&
|
||||
brew link --overwrite --force "$dependency_extension@$version" &&
|
||||
copy_brew_extensions "$dependency_extension"
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
# Helper function to disable an extension.
|
||||
disable_extension_helper() {
|
||||
local extension=$1
|
||||
local disable_dependents=${2:-false}
|
||||
get_extension_map
|
||||
if [ "$disable_dependents" = "true" ]; then
|
||||
disable_extension_dependents "$extension"
|
||||
fi
|
||||
sudo sed -Ei '' "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file:?}"
|
||||
sudo rm -rf "$scan_dir"/*"$extension"*
|
||||
sudo rm -rf "$scan_dir"/*"$extension"* /tmp/php"$version"_extensions
|
||||
mkdir -p /tmp/extdisabled/"$version"
|
||||
echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension"
|
||||
}
|
||||
|
||||
# Function to fetch a brew tap.
|
||||
fetch_brew_tap() {
|
||||
tap=$1
|
||||
tap_user=$(dirname "$tap")
|
||||
tap_name=$(basename "$tap")
|
||||
mkdir -p "$tap_dir/$tap_user"
|
||||
get -s -n "" "https://github.com/$tap/archive/master.tar.gz" | sudo tar -xzf - -C "$tap_dir/$tap_user"
|
||||
if [ -d "$tap_dir/$tap_user/$tap_name-master" ]; then
|
||||
sudo mv "$tap_dir/$tap_user/$tap_name-master" "$tap_dir/$tap_user/$tap_name"
|
||||
fi
|
||||
# Function to get extension name from brew formula.
|
||||
get_extension_from_formula() {
|
||||
local formula=$1
|
||||
local extension
|
||||
extension=$(grep -E "^$formula=" "$src"/configs/brew_extensions | cut -d '=' -f 2)
|
||||
[[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|php|[0-9]//g")"
|
||||
echo "$extension"
|
||||
}
|
||||
|
||||
# Function to add a brew tap.
|
||||
add_brew_tap() {
|
||||
tap=$1
|
||||
if ! [ -d "$tap_dir/$tap" ]; then
|
||||
if [ "${runner:?}" = "self-hosted" ]; then
|
||||
brew tap "$tap" >/dev/null 2>&1
|
||||
# Function to get renamed formula.
|
||||
get_renamed_formula() {
|
||||
local formula=$1
|
||||
formula_renames_json="$tap_dir/$ext_tap/formula_renames.json"
|
||||
if [ -e "$formula_renames_json" ] && grep -q "$formula@$version\":" "$formula_renames_json"; then
|
||||
grep "$formula@$version\":" "$formula_renames_json" | cut -d ':' -f 2 | tr -d ' ",' | cut -d '@' -f 1
|
||||
else
|
||||
fetch_brew_tap "$tap" >/dev/null 2>&1
|
||||
if ! [ -d "$tap_dir/$tap" ]; then
|
||||
brew tap "$tap" >/dev/null 2>&1
|
||||
fi
|
||||
echo "$formula"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to copy extension binaries to the extension directory.
|
||||
copy_brew_extensions() {
|
||||
local formula=$1
|
||||
formula_file="$tap_dir/$ext_tap/Formula/$formula@$version.rb"
|
||||
deps="$(grep -Eo 'depends_on "shivammathur[^"]+' "$formula_file" | cut -d '/' -f 3 | tr '\n' ' ')"
|
||||
IFS=' ' read -r -a deps <<< "$formula@$version $deps"
|
||||
for dependency in "${deps[@]}"; do
|
||||
extension_file="${brew_prefix:?}/opt/$dependency/$(get_extension_from_formula "${dependency%@*}").so"
|
||||
[ -e "$extension_file" ] && sudo cp "$extension_file" "$ext_dir"
|
||||
done
|
||||
if [ -d "$brew_prefix"/Cellar/"$formula"@"$version" ]; then
|
||||
sudo find -- "$brew_prefix"/Cellar/"$formula"@"$version" -name "*.dylib" -exec cp {} "$ext_dir" \;
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -61,39 +75,45 @@ add_brew_tap() {
|
||||
add_brew_extension() {
|
||||
formula=$1
|
||||
prefix=$2
|
||||
extension=$(grep "$formula=" "$dist"/../src/configs/brew_extensions | cut -d '=' -f 2)
|
||||
[[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")"
|
||||
extension="$(get_extension_from_formula "$formula")"
|
||||
enable_extension "$extension" "$prefix"
|
||||
if check_extension "$extension"; then
|
||||
add_log "${tick:?}" "$extension" "Enabled"
|
||||
else
|
||||
add_brew_tap "$php_tap"
|
||||
add_brew_tap "$ext_tap"
|
||||
sudo mv "$tap_dir"/"$ext_tap"/.github/deps/"$formula"/* "$core_repo/Formula/" 2>/dev/null || true
|
||||
update_dependencies >/dev/null 2>&1
|
||||
disable_dependency_extensions "$extension" >/dev/null 2>&1
|
||||
brew install -f "$formula@$version" >/dev/null 2>&1
|
||||
sudo cp "$brew_prefix/opt/$formula@$version/$extension.so" "$ext_dir"
|
||||
formula="$(get_renamed_formula "$formula")"
|
||||
update_dependencies
|
||||
handle_dependency_extensions "$formula" "$extension"
|
||||
(
|
||||
safe_brew install --skip-link "${brew_opts[@]}" "$ext_tap/$formula@$version" &&
|
||||
brew link --overwrite --force "$formula@$version" &&
|
||||
copy_brew_extensions "$formula"
|
||||
) || pecl_install "$extension"
|
||||
add_extension_log "$extension" "Installed and enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup extensions.
|
||||
add_extension() {
|
||||
# Function to patch the abstract file in the extensions tap.
|
||||
patch_abstract_file() {
|
||||
abstract_path="$tap_dir"/"$ext_tap"/Abstract/abstract-php-extension.rb
|
||||
if [[ -e "$abstract_path" && ! -e /tmp/abstract_patch ]]; then
|
||||
echo '' | sudo tee /tmp/abstract_patch
|
||||
sudo sed -i '' -e "s|php@#{\(.*\)}|php@#{\1}$suffix|g" -e "s|php_version /|\"#{php_version}$suffix\" /|g" "$abstract_path"
|
||||
fi
|
||||
}
|
||||
|
||||
# Helper function to add an extension.
|
||||
add_extension_helper() {
|
||||
local extension=$1
|
||||
prefix=$2
|
||||
enable_extension "$extension" "$prefix"
|
||||
if check_extension "$extension"; then
|
||||
add_log "${tick:?}" "$extension" "Enabled"
|
||||
else
|
||||
if [[ "$version" =~ ${old_versions:?} ]] && [ "$extension" = "imagick" ]; then
|
||||
run_script "php5-darwin" "${version/./}" "$extension" >/dev/null 2>&1
|
||||
run_script "php5-darwin" "${version/./}" "$extension"
|
||||
else
|
||||
pecl_install "$extension" >/dev/null 2>&1 &&
|
||||
pecl_install "$extension" &&
|
||||
if [[ "$version" =~ ${old_versions:?} ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
|
||||
fi
|
||||
add_extension_log "$extension" "Installed and enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to handle request to add phpize and php-config.
|
||||
@@ -104,71 +124,51 @@ add_devtools() {
|
||||
|
||||
# Function to handle request to add PECL.
|
||||
add_pecl() {
|
||||
configure_pecl >/dev/null 2>&1
|
||||
enable_extension xml extension
|
||||
configure_pecl
|
||||
pear_version=$(get_tool_version "pecl" "version")
|
||||
add_log "${tick:?}" "PECL" "Found PECL $pear_version"
|
||||
}
|
||||
|
||||
# Function to link all libraries of a formula.
|
||||
link_libraries() {
|
||||
formula=$1
|
||||
formula_prefix="$(brew --prefix "$formula")"
|
||||
sudo mkdir -p "$formula_prefix"/lib
|
||||
for lib in "$formula_prefix"/lib/*.dylib; do
|
||||
lib_name=$(basename "$lib")
|
||||
sudo cp -a "$lib" "$brew_prefix/lib/$lib_name" 2>/dev/null || true
|
||||
done
|
||||
# Link opcache extension to extensions directory.
|
||||
link_opcache() {
|
||||
opcache_ini="$brew_prefix"/etc/php/"$version"/conf.d/ext-opcache.ini
|
||||
if [ -e "$opcache_ini" ]; then
|
||||
opcache_ext=$(grep -Eo "zend_extension.*opcache.*\.so" "$opcache_ini" | cut -d '"' -f 2)
|
||||
sudo ln -sf "$opcache_ext" "$ext_dir"
|
||||
fi
|
||||
}
|
||||
|
||||
# Patch brew to overwrite packages.
|
||||
patch_brew() {
|
||||
formula_installer="$brew_repo"/Library/Homebrew/formula_installer.rb
|
||||
code=" keg.link(verbose: verbose?"
|
||||
sudo sed -i '' "s/$code)/$code, overwrite: true)/" "$formula_installer"
|
||||
formula_installer="${brew_repo:?}"/Library/Homebrew/formula_installer.rb
|
||||
code=" keg.link\(verbose: verbose\?"
|
||||
sudo sed -Ei '' "s/$code.*/$code, overwrite: true\)/" "$formula_installer"
|
||||
# shellcheck disable=SC2064
|
||||
trap "sudo sed -i '' 's/$code, overwrite: true)/$code)/' $formula_installer" exit
|
||||
}
|
||||
|
||||
# Helper function to update the dependencies.
|
||||
update_dependencies_helper() {
|
||||
dependency=$1
|
||||
get -q -n "$core_repo/Formula/$dependency.rb" "https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/$dependency.rb"
|
||||
link_libraries "$dependency"
|
||||
trap "sudo sed -Ei '' 's/$code.*/$code, overwrite: overwrite?\)/' $formula_installer" exit
|
||||
}
|
||||
|
||||
# Function to update dependencies.
|
||||
update_dependencies() {
|
||||
if ! [ -e /tmp/update_dependencies ]; then
|
||||
if [ "${runner:?}" != "self-hosted" ] && [ "${ImageOS:-}" != "" ] && [ "${ImageVersion:-}" != "" ]; then
|
||||
patch_brew
|
||||
while read -r dependency; do
|
||||
update_dependencies_helper "$dependency" &
|
||||
to_wait+=($!)
|
||||
done <"$tap_dir/$php_tap/.github/deps/${ImageOS:?}_${ImageVersion:?}"
|
||||
wait "${to_wait[@]}"
|
||||
else
|
||||
git -C "$core_repo" fetch origin master && git -C "$core_repo" reset --hard origin/master
|
||||
if ! [ -e /tmp/update_dependencies ]; then
|
||||
for repo in "$brew_repo" "${core_repo:?}"; do
|
||||
if [ -e "$repo" ]; then
|
||||
git_retry -C "$repo" fetch origin main && git -C "$repo" reset --hard origin/main
|
||||
fi
|
||||
echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to fix dependencies on install PHP version.
|
||||
fix_dependencies() {
|
||||
broken_deps_paths=$(php -v 2>&1 | grep -Eo '/opt/[a-zA-Z0-9@\.]+')
|
||||
if [ "x$broken_deps_paths" != "x" ]; then
|
||||
update_dependencies
|
||||
IFS=" " read -r -a formulae <<< "$(echo "$broken_deps_paths" | tr '\n' ' ' | sed 's|/opt/||g' 2>&1)$php_formula"
|
||||
brew reinstall "${formulae[@]}"
|
||||
brew link --force --overwrite "$php_formula" || true
|
||||
done
|
||||
echo '' | sudo tee /tmp/update_dependencies
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get PHP version if it is already installed using Homebrew.
|
||||
get_brewed_php() {
|
||||
php_cellar="$brew_prefix"/Cellar/php
|
||||
if [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
|
||||
php-config --version 2>/dev/null | cut -c 1-3
|
||||
cellar="$brew_prefix"/Cellar
|
||||
php_cellar="$cellar"/php
|
||||
if [ -d "$cellar" ] && ! [[ "$(find "$cellar" -maxdepth 1 -name "php@$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
|
||||
php_semver
|
||||
elif [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
|
||||
php_semver
|
||||
else
|
||||
echo 'false';
|
||||
fi
|
||||
@@ -178,14 +178,33 @@ get_brewed_php() {
|
||||
add_php() {
|
||||
action=$1
|
||||
existing_version=$2
|
||||
add_brew_tap "$php_tap"
|
||||
suffix="$(get_php_formula_suffix)"
|
||||
php_keg="php@$version$suffix"
|
||||
php_formula="shivammathur/php/$php_keg"
|
||||
if [[ "$existing_version" = "false" || -n "$suffix" || "$action" = "upgrade" ]]; then
|
||||
update_dependencies
|
||||
if [ "$existing_version" != "false" ]; then
|
||||
([ "$action" = "upgrade" ] && brew upgrade -f "$php_formula") || brew unlink "$php_formula"
|
||||
else
|
||||
brew install -f "$php_formula"
|
||||
add_brew_tap "$php_tap"
|
||||
fi
|
||||
brew link --force --overwrite "$php_formula"
|
||||
if [[ "$existing_version" != "false" && -z "$suffix" ]]; then
|
||||
if [ "$action" = "upgrade" ]; then
|
||||
safe_brew install --only-dependencies "$php_formula"
|
||||
safe_brew upgrade -f --overwrite "$php_formula"
|
||||
else
|
||||
brew unlink "$php_keg"
|
||||
fi
|
||||
else
|
||||
safe_brew install --only-dependencies "$php_formula"
|
||||
safe_brew install --skip-link -f --overwrite "$php_formula" 2>/dev/null || safe_brew upgrade -f --overwrite "$php_formula"
|
||||
fi
|
||||
brew link --force --overwrite "$php_keg" || (sudo chown -R "$(id -un)":"$(id -gn)" "$brew_prefix" && brew link --force --overwrite "$php_keg")
|
||||
}
|
||||
|
||||
# Function to get formula suffix
|
||||
get_php_formula_suffix() {
|
||||
local suffix
|
||||
[ "${debug:?}" = "debug" ] && suffix="-debug"
|
||||
[ "${ts:?}" = "zts" ] && suffix="$suffix-zts"
|
||||
echo "$suffix"
|
||||
}
|
||||
|
||||
# Function to get extra version.
|
||||
@@ -196,62 +215,97 @@ php_extra_version() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to set php.ini
|
||||
add_php_config() {
|
||||
if ! [ -e "$ini_dir"/php.ini-development ]; then
|
||||
sudo cp "$ini_dir"/php.ini "$ini_dir"/php.ini-development
|
||||
fi
|
||||
if [[ "$ini" = "production" || "$ini" = "development" ]]; then
|
||||
sudo cp "$ini_dir"/php.ini-"$ini" "$ini_dir"/php.ini
|
||||
elif [ "$ini" = "none" ]; then
|
||||
echo '' | sudo tee "${ini_file[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get scan directory.
|
||||
get_scan_dir() {
|
||||
if [[ "$version" =~ ${old_versions:?} ]]; then
|
||||
php --ini | grep additional | sed -e "s|.*: s*||"
|
||||
else
|
||||
echo "$ini_dir"/conf.d
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to handle self-hosted runner setup.
|
||||
self_hosted_helper() {
|
||||
sudo mkdir -p /opt/hostedtoolcache || true
|
||||
}
|
||||
|
||||
# Function to Setup PHP.
|
||||
setup_php() {
|
||||
step_log "Setup PHP"
|
||||
php_config="$(command -v php-config 2>/dev/null)"
|
||||
update=true
|
||||
check_pre_installed
|
||||
existing_version=$(get_brewed_php)
|
||||
if [[ "$version" =~ ${old_versions:?} ]]; then
|
||||
run_script "php5-darwin" "${version/./}" >/dev/null 2>&1
|
||||
status="Installed"
|
||||
elif [ "$existing_version" != "$version" ]; then
|
||||
add_php "install" "$existing_version" >/dev/null 2>&1
|
||||
status="Installed"
|
||||
elif [ "$existing_version" = "$version" ] && [ "${update:?}" = "true" ]; then
|
||||
add_php "upgrade" "$existing_version" >/dev/null 2>&1
|
||||
status="Updated to"
|
||||
else
|
||||
status="Found"
|
||||
fix_dependencies >/dev/null 2>&1
|
||||
if [[ "$version" =~ ${old_versions:?} ]]; then
|
||||
run_script "php5-darwin" "${version/./}"
|
||||
status="Installed"
|
||||
elif [ "${existing_version:0:3}" != "$version" ]; then
|
||||
add_php "install" "$existing_version"
|
||||
status="Installed"
|
||||
elif [[ "${existing_version:0:3}" = "$version" && "${update:?}" = "true" ]]; then
|
||||
brew_php_version="$(brew info --json "php@$version" 2>/dev/null | jq -r '.[].versions.stable')"
|
||||
if [ "$brew_php_version" != "$existing_version" ]; then
|
||||
add_php "upgrade" "$existing_version"
|
||||
status="Upgraded"
|
||||
fi
|
||||
ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
|
||||
sudo chmod 777 "$ini_file" "${tool_path_dir:?}"
|
||||
configure_php
|
||||
ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
|
||||
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
||||
fi
|
||||
php_config="$(command -v php-config)"
|
||||
ext_dir="$(sed -n "s/.*extension_dir=['\"]\(.*\)['\"].*/\1/p" "$php_config")"
|
||||
ini_dir="$(php_ini_path)"
|
||||
scan_dir="$(get_scan_dir)"
|
||||
ini_file="$ini_dir"/php.ini
|
||||
sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer"
|
||||
semver=$(php_semver)
|
||||
extra_version=$(php_extra_version)
|
||||
sudo chmod 777 "$ini_file" "${tool_path_dir:?}"
|
||||
semver="$(php_semver)"
|
||||
extra_version="$(php_extra_version)"
|
||||
configure_php
|
||||
link_opcache
|
||||
set_output "php-version" "$semver"
|
||||
if [ "${semver%.*}" != "$version" ]; then
|
||||
add_log "${cross:?}" "PHP" "Could not setup PHP $version"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sudo cp "$dist"/../src/configs/pm/*.json "$RUNNER_TOOL_CACHE/"
|
||||
echo "::set-output name=php-version::$semver"
|
||||
sudo cp "$src"/configs/pm/*.json "$RUNNER_TOOL_CACHE/"
|
||||
add_log "$tick" "PHP" "$status PHP $semver$extra_version"
|
||||
}
|
||||
|
||||
# Variables
|
||||
version=$1
|
||||
dist=$2
|
||||
version=${1:-'8.5'}
|
||||
ini=${2:-'production'}
|
||||
src=${0%/*}/..
|
||||
php_formula=shivammathur/php/php@"$version"
|
||||
brew_prefix="$(brew --prefix)"
|
||||
brew_repo="$(brew --repository)"
|
||||
tap_dir="$brew_repo"/Library/Taps
|
||||
core_repo="$tap_dir"/homebrew/homebrew-core
|
||||
scripts="${dist}"/../src/scripts
|
||||
scripts="$src"/scripts
|
||||
ext_tap=shivammathur/homebrew-extensions
|
||||
php_tap=shivammathur/homebrew-php
|
||||
export HOMEBREW_CHANGE_ARCH_TO_ARM=1
|
||||
export HOMEBREW_DEVELOPER=1
|
||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||
export HOMEBREW_NO_AUTO_UPDATE=1
|
||||
export HOMEBREW_NO_ENV_HINTS=1
|
||||
export HOMEBREW_NO_INSTALL_CLEANUP=1
|
||||
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||
export HOMEBREW_NO_INSTALL_FROM_API=1
|
||||
|
||||
# shellcheck source=.
|
||||
. "${scripts:?}"/ext/source.sh
|
||||
. "${scripts:?}"/unix.sh
|
||||
. "${scripts:?}"/tools/brew.sh
|
||||
. "${scripts:?}"/tools/retry.sh
|
||||
. "${scripts:?}"/tools/add_tools.sh
|
||||
. "${scripts:?}"/common.sh
|
||||
. "${scripts:?}"/extensions/source.sh
|
||||
. "${scripts:?}"/extensions/add_extensions.sh
|
||||
configure_brew
|
||||
read_env
|
||||
self_hosted_setup
|
||||
setup_php
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
# Function to install libraries required by couchbase
|
||||
add_couchbase_libs() {
|
||||
if [ "$(uname -s)" = "Linux" ]; then
|
||||
trunk="https://github.com/couchbase/libcouchbase/releases"
|
||||
if [[ ${version:?} =~ 5.[3-6]|7.[0-1] ]]; then
|
||||
release="2.10.9"
|
||||
else
|
||||
release="$(curl -sL $trunk/latest | grep -Eo "libcouchbase-[0-9]+\.[0-9]+\.[0-9]+" | head -n 1 | cut -d'-' -f 2)"
|
||||
fi
|
||||
deb_url="$trunk/download/$release/libcouchbase-${release}_ubuntu${VERSION_ID/./}_${VERSION_CODENAME}_amd64.tar"
|
||||
get -q -n /tmp/libcouchbase.tar "$deb_url"
|
||||
sudo tar -xf /tmp/libcouchbase.tar -C /tmp
|
||||
install_packages libev4 libevent-dev
|
||||
sudo dpkg -i /tmp/libcouchbase-*/*.deb
|
||||
else
|
||||
if [[ ${version:?} =~ 5.[3-6]|7.[0-1] ]]; then
|
||||
brew install libcouchbase@2
|
||||
brew link --overwrite --force libcouchbase@2
|
||||
else
|
||||
brew install libcouchbase
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add couchbase.
|
||||
add_couchbase() {
|
||||
add_couchbase_libs >/dev/null 2>&1
|
||||
enable_extension "couchbase" "extension"
|
||||
if check_extension "couchbase"; then
|
||||
add_log "${tick:?}" "couchbase" "Enabled"
|
||||
else
|
||||
if [[ "${version:?}" =~ ${old_versions:?} ]]; then
|
||||
pecl_install couchbase-2.2.3 >/dev/null 2>&1
|
||||
elif [[ "${version:?}" =~ 5.6|7.[0-1] ]]; then
|
||||
pecl_install couchbase-2.6.2 >/dev/null 2>&1
|
||||
elif [[ "${version:?}" =~ 7.2 ]]; then
|
||||
pecl_install couchbase-3.0.4 >/dev/null 2>&1
|
||||
else
|
||||
pecl_install couchbase >/dev/null 2>&1
|
||||
fi
|
||||
add_extension_log "couchbase" "Installed and enabled"
|
||||
fi
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
add_firebird_client_darwin() {
|
||||
firebird_tag='R3_0_7'
|
||||
pkg_name=$(get -s -n "" https://github.com/FirebirdSQL/firebird/releases/tag/"$firebird_tag" | grep -Eo "Firebird-.*.pkg" | head -n 1)
|
||||
get -q -e "/tmp/firebird.pkg" https://github.com/FirebirdSQL/firebird/releases/download/"$firebird_tag"/"$pkg_name"
|
||||
sudo installer -pkg /tmp/firebird.pkg -target /
|
||||
sudo mkdir -p /opt/firebird/include /opt/firebird/lib
|
||||
sudo find /Library/Frameworks/Firebird.framework -name '*.h' -exec cp "{}" /opt/firebird/include \;
|
||||
sudo find /Library/Frameworks/Firebird.framework -name '*.dylib' -exec cp "{}" /opt/firebird/lib \;
|
||||
}
|
||||
|
||||
add_firebird_helper() {
|
||||
firebird_dir=$1
|
||||
tag="$(php_src_tag)"
|
||||
export PDO_FIREBIRD_CONFIGURE_OPTS="--with-pdo-firebird=$firebird_dir"
|
||||
export PDO_FIREBIRD_LINUX_LIBS="firebird-dev"
|
||||
export PDO_FIREBIRD_PATH="ext/pdo_firebird"
|
||||
add_extension_from_source pdo_firebird https://github.com php php-src "$tag" extension get
|
||||
}
|
||||
|
||||
add_firebird() {
|
||||
if [ "$(uname -s )" = "Darwin" ]; then
|
||||
add_firebird_client_darwin >/dev/null 2>&1
|
||||
fi
|
||||
enable_extension pdo_firebird extension
|
||||
status="Enabled"
|
||||
if ! check_extension pdo_firebird; then
|
||||
status="Installed and enabled"
|
||||
if [ "$(uname -s)" = "Linux" ]; then
|
||||
if [[ "${version:?}" =~ 5.3|${nightly_versions:?} ]]; then
|
||||
add_firebird_helper /usr >/dev/null 2>&1
|
||||
else
|
||||
add_pdo_extension firebird >/dev/null 2>&1
|
||||
fi
|
||||
else
|
||||
add_firebird_helper /opt/firebird >/dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
add_extension_log pdo_firebird "$status"
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
# Function to install ICU
|
||||
install_icu() {
|
||||
icu=$1
|
||||
if [ "$(php -i | grep "ICU version =>" | sed -e "s|.*=> s*||")" != "$icu" ]; then
|
||||
get -q -n /tmp/icu.tar.zst "https://github.com/shivammathur/icu-intl/releases/download/icu4c/icu4c-$icu.tar.zst"
|
||||
sudo tar -I zstd -xf /tmp/icu.tar.zst -C /usr/local
|
||||
sudo cp -r /usr/local/icu/lib/* /usr/lib/x86_64-linux-gnu/
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add ext-intl with the given version of ICU
|
||||
add_intl() {
|
||||
icu=$(echo "$1" | cut -d'-' -f 2)
|
||||
supported_version=$(get -s -n "" https://api.github.com/repos/shivammathur/icu-intl/releases | grep -Po "${icu//./\\.}" | head -n 1)
|
||||
if [ "$icu" != "$supported_version" ]; then
|
||||
add_log "${cross:?}" "intl" "ICU $icu is not supported"
|
||||
else
|
||||
install_icu "$icu" >/dev/null 2>&1
|
||||
get -q -n "${ext_dir:?}/intl.so" "https://github.com/shivammathur/icu-intl/releases/download/intl/php${version:?}-intl-$icu.so"
|
||||
enable_extension intl extension
|
||||
add_extension_log intl "Installed and enabled with ICU $icu"
|
||||
fi
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
# Function to log result of a operation.
|
||||
add_license_log() {
|
||||
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "ioncube" "Click to read the ioncube loader license information"
|
||||
cat "${ext_dir:?}"/IONCUBE_LICENSE.txt
|
||||
echo "::endgroup::"
|
||||
}
|
||||
|
||||
# Function to install ioncube.
|
||||
add_ioncube() {
|
||||
status='Enabled'
|
||||
if ! shared_extension ioncube; then
|
||||
status='Installed and enabled'
|
||||
os_name='lin' && [ "$(uname -s)" = "Darwin" ] && os_name='mac'
|
||||
get -s -n "" https://downloads.ioncube.com/loader_downloads/ioncube_loaders_"$os_name"_x86-64.tar.gz | tar -xzf - -C /tmp
|
||||
sudo mv /tmp/ioncube/ioncube_loader_"$os_name"_"${version:?}".so "${ext_dir:?}/ioncube.so"
|
||||
sudo cp /tmp/ioncube/LICENSE.txt "$ext_dir"/IONCUBE_LICENSE.txt
|
||||
fi
|
||||
echo "zend_extension=$ext_dir/ioncube.so" | sudo tee "${scan_dir:?}/00-ioncube.ini" >/dev/null 2>&1
|
||||
add_extension_log "ioncube" "$status"
|
||||
check_extension "ioncube" && add_license_log
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
# Function to log result of a operation.
|
||||
add_license_log() {
|
||||
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information"
|
||||
printf "Oracle Instant Client package is required for %s extension.\n" "$ext"
|
||||
printf "It is provided under the Oracle Technology Network Development and Distribution License.\n"
|
||||
printf "Refer to: \033[35;1m%s \033[0m\n" "https://www.oracle.com/downloads/licenses/instant-client-lic.html"
|
||||
echo "::endgroup::"
|
||||
}
|
||||
|
||||
# Function to install instantclient and SDK.
|
||||
add_client() {
|
||||
if [ ! -e "$oracle_client" ]; then
|
||||
sudo mkdir -p -m 777 "$oracle_home" "$oracle_client"
|
||||
for package in basiclite sdk; do
|
||||
if [ "$os" = 'Linux' ]; then
|
||||
libs='/usr/lib/'
|
||||
os_name='linux'
|
||||
arch='linuxx64'
|
||||
lib_ext='so'
|
||||
elif [ "$os" = 'Darwin' ]; then
|
||||
libs='/usr/local/lib/'
|
||||
os_name='mac'
|
||||
arch='macos'
|
||||
lib_ext='dylib'
|
||||
fi
|
||||
get -q -n "/opt/oracle/$package.zip" "https://download.oracle.com/otn_software/$os_name/instantclient/instantclient-$package-$arch.zip"
|
||||
unzip -o "/opt/oracle/$package.zip" -d "$oracle_home"
|
||||
done
|
||||
for icdir in /opt/oracle/instantclient_*; do
|
||||
sudo mv "$icdir"/* "$oracle_client"/
|
||||
done
|
||||
sudo ln -sf /opt/oracle/instantclient/*.$lib_ext* $libs
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install oci8 and pdo_oci.
|
||||
add_oci_helper() {
|
||||
if ! shared_extension "$ext"; then
|
||||
status='Installed and enabled'
|
||||
read -r "${ext}_LINUX_LIBS" <<< "libaio-dev"
|
||||
read -r "${ext}_CONFIGURE_OPTS" <<< "--with-php-config=$(command -v php-config) --with-${ext/_/-}=instantclient,$oracle_client"
|
||||
read -r "${ext}_PATH" <<< "ext/$ext"
|
||||
patch_phpize
|
||||
add_extension_from_source "$ext" https://github.com php php-src "$(php_src_tag)" extension get
|
||||
restore_phpize
|
||||
else
|
||||
enable_extension "$ext" extension
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add oci extension oci8 and pdo_oci.
|
||||
add_oci() {
|
||||
ext=$1
|
||||
status='Enabled'
|
||||
oracle_home='/opt/oracle'
|
||||
oracle_client=$oracle_home/instantclient
|
||||
os=$(uname -s)
|
||||
add_client >/dev/null 2>&1
|
||||
add_oci_helper >/dev/null 2>&1
|
||||
add_extension_log "$ext" "$status"
|
||||
check_extension "$ext" && add_license_log
|
||||
}
|
||||
|
||||
# shellcheck source=.
|
||||
. "${scripts:?}"/ext/patches/phpize.sh
|
||||
@@ -1,54 +0,0 @@
|
||||
# Function to install phalcon
|
||||
Function Add-PhalconHelper() {
|
||||
if ($extension_version -eq '4') {
|
||||
Install-Phpextension -Extension phalcon -MinimumStability stable -Path $php_dir
|
||||
} else {
|
||||
$domain = 'https://github.com'
|
||||
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
||||
$match = Invoke-WebRequest -Uri "$domain/phalcon/cphalcon/releases/v3.4.5" | Select-String -Pattern "href=`"(.*phalcon_x64_.*_php${version}_${extension_version}.*[0-9]${nts}.zip)`""
|
||||
$zip_file = $match.Matches[0].Groups[1].Value
|
||||
Invoke-WebRequest -Uri $domain/$zip_file -OutFile $ENV:RUNNER_TOOL_CACHE\phalcon.zip > $null 2>&1
|
||||
Expand-Archive -Path $ENV:RUNNER_TOOL_CACHE\phalcon.zip -DestinationPath $ENV:RUNNER_TOOL_CACHE\phalcon -Force > $null 2>&1
|
||||
Copy-Item -Path "$ENV:RUNNER_TOOL_CACHE\phalcon\php_phalcon.dll" -Destination "$ext_dir\php_phalcon.dll"
|
||||
Enable-PhpExtension -Extension phalcon -Path $php_dir
|
||||
}
|
||||
}
|
||||
|
||||
Function Add-Phalcon() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateSet('phalcon3', 'phalcon4')]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
try {
|
||||
$status = 'Enabled'
|
||||
$extension_version = $extension.substring($extension.Length - 1)
|
||||
|
||||
if($extension_version -eq '4') {
|
||||
if (Test-Path $ext_dir\php_psr.dll) {
|
||||
Enable-PhpExtension -Extension psr -Path $php_dir
|
||||
} else {
|
||||
Install-Phpextension -Extension psr -MinimumStability stable -Path $php_dir
|
||||
}
|
||||
}
|
||||
|
||||
if(Test-Path $ext_dir\php_phalcon.dll) {
|
||||
$phalcon = Get-PhpExtension $ext_dir\php_phalcon.dll
|
||||
if($phalcon.Version[0] -eq $extension_version) {
|
||||
Enable-PhpExtension -Extension phalcon -Path $php_dir
|
||||
} else {
|
||||
$status = 'Installed and enabled'
|
||||
Remove-Item $ext_dir\php_phalcon.dll
|
||||
Add-PhalconHelper
|
||||
}
|
||||
} else {
|
||||
$status = 'Installed and enabled'
|
||||
Add-PhalconHelper
|
||||
}
|
||||
Add-Log $tick $extension $status
|
||||
} catch [Exception] {
|
||||
Add-Log $cross $extension "Could not install $extension on PHP $($installed.FullVersion)"
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
# Helper function to add phalcon.
|
||||
add_phalcon_helper() {
|
||||
status='Installed and enabled'
|
||||
if [ "$(uname -s)" = "Darwin" ]; then
|
||||
add_brew_extension "$extension" extension
|
||||
else
|
||||
packages=("php${version:?}-$extension")
|
||||
[ "$extension" = "phalcon4" ] && packages+=("php${version:?}-psr")
|
||||
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
|
||||
check_package "${packages[0]}" && install_packages "${packages[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add phalcon3.
|
||||
add_phalcon3() {
|
||||
if shared_extension phalcon; then
|
||||
phalcon_version=$(php -d="extension=phalcon.so" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
||||
if [ "$phalcon_version" != "$extension_major_version" ]; then
|
||||
add_phalcon_helper
|
||||
else
|
||||
enable_extension phalcon extension
|
||||
fi
|
||||
else
|
||||
add_phalcon_helper
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add phalcon4.
|
||||
add_phalcon4() {
|
||||
enable_extension psr extension
|
||||
if shared_extension phalcon; then
|
||||
if check_extension psr; then
|
||||
phalcon_version=$(php -d="extension=phalcon" -r "echo phpversion('phalcon');" | cut -d'.' -f 1)
|
||||
if [ "$phalcon_version" != "$extension_major_version" ]; then
|
||||
add_phalcon_helper
|
||||
else
|
||||
enable_extension phalcon extension
|
||||
fi
|
||||
else
|
||||
add_phalcon_helper
|
||||
fi
|
||||
else
|
||||
add_phalcon_helper
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add phalcon.
|
||||
add_phalcon() {
|
||||
extension=$1
|
||||
status='Enabled'
|
||||
extension_major_version=${extension: -1}
|
||||
if [ "$extension_major_version" = "4" ]; then
|
||||
add_phalcon4 >/dev/null 2>&1
|
||||
elif [ "$extension_major_version" = "3" ]; then
|
||||
add_phalcon3 >/dev/null 2>&1
|
||||
fi
|
||||
add_extension_log "phalcon" "$status"
|
||||
}
|
||||
264
src/scripts/extensions/add_extensions.ps1
Normal file
264
src/scripts/extensions/add_extensions.ps1
Normal file
@@ -0,0 +1,264 @@
|
||||
# Function to check if extension is enabled.
|
||||
Function Test-Extension() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
$extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension }
|
||||
return $null -ne $extension_info
|
||||
}
|
||||
|
||||
# Function to add extension log.
|
||||
Function Add-ExtensionLog() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
$extension,
|
||||
[Parameter(Position = 1, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
$message
|
||||
)
|
||||
if (Test-Extension $extension) {
|
||||
Add-Log $tick $extension $message
|
||||
} else {
|
||||
Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"
|
||||
}
|
||||
}
|
||||
|
||||
# Function to link dependencies to PHP directory.
|
||||
Function Set-ExtensionPrerequisites
|
||||
{
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
$deps_dir = "$ext_dir\$extension-vc$($installed.VCVersion)-$arch"
|
||||
$deps = Get-ChildItem -Recurse -Path $deps_dir
|
||||
if ($deps.Count -ne 0) {
|
||||
# Symlink dependencies instead of adding the directory to PATH ...
|
||||
# as other actions change the PATH thus breaking extensions.
|
||||
$deps | ForEach-Object {
|
||||
New-Item -Itemtype SymbolicLink -Path $php_dir -Name $_.Name -Target $_.FullName -Force > $null 2>&1
|
||||
}
|
||||
} else {
|
||||
Remove-Item $deps_dir -Recurse -Force
|
||||
}
|
||||
}
|
||||
|
||||
# Function to enable extension.
|
||||
Function Enable-Extension() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
Enable-ExtensionDependencies $extension
|
||||
Enable-PhpExtension -Extension $extension -Path $php_dir
|
||||
Set-ExtensionPrerequisites $extension
|
||||
Add-Log $tick $extension "Enabled"
|
||||
}
|
||||
|
||||
# Function to add custom built PHP extension for nightly builds.
|
||||
Function Add-ExtensionFromGithub {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
if($ts) { $ts_part = 'ts' } else { $ts_part = 'nts' }
|
||||
$repo = "$github/shivammathur/php-extensions-windows"
|
||||
$url = "$repo/releases/download/builds/php$version`_$ts_part`_$arch`_$extension.dll"
|
||||
Get-File -Url $url -OutFile "$ext_dir\php_$extension.dll"
|
||||
if(Test-Path "$ext_dir\php_$extension.dll") {
|
||||
Enable-Extension $extension > $null
|
||||
} else {
|
||||
throw "Failed to download the $extension"
|
||||
}
|
||||
}
|
||||
|
||||
# Function to add PHP extensions.
|
||||
Function Add-Extension {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension,
|
||||
[Parameter(Position = 1, Mandatory = $false)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateSet('stable', 'beta', 'alpha', 'devel', 'snapshot')]
|
||||
[string]
|
||||
$stability = 'stable',
|
||||
[Parameter(Position = 2, Mandatory = $false)]
|
||||
[ValidateNotNull()]
|
||||
[ValidatePattern('^\d+(\.\d+){0,3}$')]
|
||||
[string]
|
||||
$extension_version = ''
|
||||
)
|
||||
try {
|
||||
$extension_info = Get-PhpExtension -Path $php_dir | Where-Object { $_.Name -eq $extension -or $_.Handle -eq $extension }
|
||||
$deps_dir = "$ext_dir\$extension-vc$($installed.VCVersion)-$arch"
|
||||
New-Item $deps_dir -Type Directory -Force > $null 2>&1
|
||||
if ($null -ne $extension_info) {
|
||||
switch ($extension_info.State) {
|
||||
'Builtin' {
|
||||
Add-Log $tick $extension "Enabled"
|
||||
}
|
||||
'Enabled' {
|
||||
Add-Log $tick $extension "Enabled"
|
||||
}
|
||||
default {
|
||||
Enable-Extension $extension_info.Handle
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(($version -match $nightly_versions) -and (Select-String -Path $src\configs\windows_extensions -Pattern $extension -SimpleMatch -Quiet)) {
|
||||
Add-ExtensionFromGithub $extension
|
||||
} else {
|
||||
# Patch till DLLs for PHP 8.1 and above are released as stable.
|
||||
$minimumStability = $stability
|
||||
if ($version -match '8.[1-4]' -and $stability -eq 'stable') {
|
||||
$minimumStability = 'snapshot'
|
||||
}
|
||||
|
||||
$params = @{ Extension = $extension; MinimumStability = $minimumStability; MaximumStability = $stability; Path = $php_dir; AdditionalFilesPath = $deps_dir; NoDependencies = $true }
|
||||
if ($extension_version -ne '')
|
||||
{
|
||||
$params["Version"] = $extension_version
|
||||
}
|
||||
# If extension for a different version exists
|
||||
if(Test-Path $ext_dir\php_$extension.dll) {
|
||||
Move-Item $ext_dir\php_$extension.dll $ext_dir\php_$extension.bak.dll -Force
|
||||
}
|
||||
Install-PhpExtension @params
|
||||
Set-ExtensionPrerequisites $extension
|
||||
}
|
||||
Add-Log $tick $extension "Installed and enabled"
|
||||
}
|
||||
} catch {
|
||||
Add-Log $cross $extension "Could not install $extension on PHP $( $installed.FullVersion )"
|
||||
}
|
||||
}
|
||||
|
||||
# Function to get a map of extensions and their dependent shared extensions.
|
||||
Function Get-ExtensionMap {
|
||||
php -d'error_reporting=0' $src\scripts\extensions\extension_map.php $env:TEMP\map$version.orig
|
||||
}
|
||||
|
||||
# Function to enable extension dependencies which are also extensions.
|
||||
Function Enable-ExtensionDependencies {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
if (-not(Test-Path $env:TEMP\extdisabled\$extension)) {
|
||||
return
|
||||
}
|
||||
Get-ExtensionMap
|
||||
$entry = findstr /r "$extension`:.*" $env:TEMP\map$version.orig
|
||||
if($entry) {
|
||||
$entry.split(':')[1].trim().split(' ') | ForEach-Object {
|
||||
if (-not(php -m | findstr -i $_)) {
|
||||
Enable-PhpExtension -Extension $_ -Path $php_dir
|
||||
}
|
||||
}
|
||||
}
|
||||
Remove-Item $env:TEMP\extdisabled\$extension -Force
|
||||
}
|
||||
|
||||
# Function to disable dependent extensions.
|
||||
Function Disable-DependentExtensions() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension
|
||||
)
|
||||
Select-String -Pattern ".*:.*\s$extension(\s|$)" $env:TEMP\map$version.orig | ForEach-Object {
|
||||
$dependent = $_.Matches[0].Value.split(':')[0];
|
||||
Disable-ExtensionHelper -Extension $dependent -DisableDependents
|
||||
Add-Log $tick ":$extension" "Disabled $dependent as it depends on $extension"
|
||||
}
|
||||
}
|
||||
|
||||
# Helper function to disable an extension.
|
||||
Function Disable-ExtensionHelper() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension,
|
||||
[switch] $DisableDependents
|
||||
)
|
||||
Get-ExtensionMap
|
||||
if($DisableDependents) {
|
||||
Disable-DependentExtensions $extension
|
||||
}
|
||||
Disable-PhpExtension -Extension $extension -Path $php_dir
|
||||
New-Item $env:TEMP\extdisabled -Type Directory -Force > $null 2>&1
|
||||
New-Item $env:TEMP\extdisabled\$extension -Type File -Force > $null 2>&1
|
||||
}
|
||||
|
||||
# Function to disable an extension.
|
||||
Function Disable-Extension() {
|
||||
Param (
|
||||
[Parameter(Position = 0, Mandatory = $true)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$extension,
|
||||
[Parameter(Position = 1, Mandatory = $false)]
|
||||
[ValidateNotNull()]
|
||||
[ValidateLength(1, [int]::MaxValue)]
|
||||
[string]
|
||||
$DisableDependents
|
||||
)
|
||||
if(php -m | findstr -i $extension) {
|
||||
if(Test-Path $ext_dir\php_$extension.dll) {
|
||||
try {
|
||||
$params = @{ Extension = $extension; DisableDependents = ($DisableDependents -ne 'false') }
|
||||
Disable-ExtensionHelper @params
|
||||
Add-Log $tick ":$extension" "Disabled"
|
||||
} catch {
|
||||
Add-Log $cross ":$extension" "Could not disable $extension on PHP $($installed.FullVersion)"
|
||||
}
|
||||
} else {
|
||||
Add-Log $cross ":$extension" "Could not disable $extension on PHP $($installed.FullVersion) as it not a shared extension"
|
||||
}
|
||||
} elseif(Test-Path $ext_dir\php_$extension.dll) {
|
||||
Add-Log $tick ":$extension" "Disabled"
|
||||
} else {
|
||||
Add-Log $tick ":$extension" "Could not find $extension on PHP $($installed.FullVersion)"
|
||||
}
|
||||
}
|
||||
|
||||
# Function to disable shared extensions.
|
||||
Function Disable-AllShared() {
|
||||
Get-ExtensionMap
|
||||
(Get-Content $php_dir\php.ini) | Where-Object {$_ -notmatch '^(zend_)?extension\s*='} | Set-Content $php_dir\php.ini
|
||||
New-Item $env:TEMP\extdisabled\$version -Type Directory -Force > $null 2>&1
|
||||
Get-Childitem $ext_dir\*.dll | ForEach-Object {
|
||||
New-Item ("$env:TEMP\extdisabled\$version\" + ($_.Name.split('.')[0].split('_')[1])) -Type File -Force > $null 2>&1
|
||||
}
|
||||
Add-Log $tick "none" "Disabled all shared extensions"
|
||||
}
|
||||
|
||||
# Function to handle request to add PECL.
|
||||
Function Add-Pecl() {
|
||||
Add-Log $tick "PECL" "Use extensions input to setup PECL extensions on windows"
|
||||
}
|
||||
240
src/scripts/extensions/add_extensions.sh
Normal file
240
src/scripts/extensions/add_extensions.sh
Normal file
@@ -0,0 +1,240 @@
|
||||
# Function to log result of installing extension.
|
||||
add_extension_log() {
|
||||
if check_extension ${1%%-*}; then
|
||||
add_log "${tick:?}" "$1" "$2"
|
||||
else
|
||||
add_log "${cross:?}" "$1" "${3:-Could not install $1 on PHP ${semver:?}}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to test if extension is loaded.
|
||||
check_extension() {
|
||||
local extension=$1
|
||||
local extension_list=/tmp/php${version:?}_extensions
|
||||
if [ ! -e "$extension_list" ]; then
|
||||
php -m > "$extension_list"
|
||||
fi
|
||||
if [ "$extension" != "mysql" ]; then
|
||||
grep -i -q -w "$extension" "$extension_list" || php -m | grep -i -q -w "$extension"
|
||||
else
|
||||
grep -i -q "$extension" "$extension_list" || php -m | grep -i -q "$extension"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to check if extension is shared
|
||||
shared_extension() {
|
||||
[ -e "${ext_dir:?}/$1.so" ]
|
||||
}
|
||||
|
||||
# Function to enable cached extension's dependencies.
|
||||
enable_cache_extension_dependencies() {
|
||||
if [ -d /tmp/extcache ] && shared_extension "$1"; then
|
||||
cache_dir=$(find /tmp/extcache -maxdepth 1 -type d -regex ".*$1[0-9]*")
|
||||
if [[ -n "$cache_dir" ]]; then
|
||||
IFS=" " read -r -a deps <<<"$(find "$cache_dir" -maxdepth 1 -type f -name "*" -exec basename {} \; | tr '\n' ' ')"
|
||||
IFS="#" read -r -a deps_enable <<<"$(printf -- "-d ${2}=%s.so#" "${deps[@]}")"
|
||||
if [[ -n "${deps[*]}" ]] && php "${deps_enable[@]}" -d "${2}=$1.so" -m 2>/dev/null | grep -i -q "$1"; then
|
||||
for ext in "${deps[@]}"; do
|
||||
sudo rm -rf /tmp/extcache/"$ext"
|
||||
enable_extension "$ext" "$2"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to enable existing extensions.
|
||||
enable_extension() {
|
||||
if ! check_extension "$1" && shared_extension "$1"; then
|
||||
modules_dir="/var/lib/php/modules/${version:?}"
|
||||
[ -d "$modules_dir" ] && sudo find "$modules_dir" -path "*disabled*$1" -delete
|
||||
enable_extension_dependencies "$1" "$2"
|
||||
enable_cache_extension_dependencies "$1" "$2"
|
||||
if ! [[ "${version:?}" =~ ${old_versions:?} ]] && command -v phpenmod ; then
|
||||
sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?\"?$/d" "$pecl_file"
|
||||
mod="${ini_dir:?}"/../mods-available/"$1".ini
|
||||
if ! [ -e "$mod" ]; then
|
||||
priority="${3:-20}";
|
||||
mod_priority_line="$(grep -E "^$1=" "${src:?}/configs/mod_priority")";
|
||||
[ -n "$mod_priority_line" ] && priority=$(echo "$mod_priority_line" | cut -d'=' -f 2)
|
||||
(echo "; priority=$priority"; echo "$2=${ext_dir:?}/$1.so") | sudo tee "$mod" >/dev/null
|
||||
fi
|
||||
sudo phpenmod -v "$version" "$1"
|
||||
else
|
||||
echo "$2=${ext_dir:?}/$1.so" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to enable array of extensions
|
||||
enable_extensions() {
|
||||
local extensions=("$@")
|
||||
to_wait=()
|
||||
for ext in "${extensions[@]}"; do
|
||||
enable_extension "$ext" extension &
|
||||
to_wait+=($!)
|
||||
done
|
||||
wait "${to_wait[@]}"
|
||||
}
|
||||
|
||||
# Function to get a map of extensions and their dependent shared extensions.
|
||||
get_extension_map() {
|
||||
php -d'error_reporting=0' "${src:?}"/scripts/extensions/extension_map.php /tmp/map"$version".orig
|
||||
}
|
||||
|
||||
# Function to enable extension dependencies which are also extensions.
|
||||
enable_extension_dependencies() {
|
||||
local extension=$1
|
||||
local prefix=$2
|
||||
[ -e /tmp/extdisabled/"$version"/"$extension" ] || return;
|
||||
get_extension_map
|
||||
for dependency in $(grep "$extension:" /tmp/map"$version".orig | cut -d ':' -f 2 | tr '\n' ' '); do
|
||||
enable_extension "$dependency" "$prefix"
|
||||
done
|
||||
rm /tmp/extdisabled/"$version"/"$extension"
|
||||
}
|
||||
|
||||
# Function to disable dependent extensions.
|
||||
disable_extension_dependents() {
|
||||
local extension=$1
|
||||
for dependent in $(grep -E ".*:.*\s$extension(\s|$)" /tmp/map"$version".orig | cut -d ':' -f 1 | tr '\n' ' '); do
|
||||
disable_extension_helper "$dependent" true
|
||||
add_log "${tick:?}" ":$extension" "Disabled $dependent as it depends on $extension"
|
||||
done
|
||||
}
|
||||
|
||||
# Function to disable an extension.
|
||||
disable_extension() {
|
||||
local extension=$1
|
||||
if check_extension "$extension"; then
|
||||
if shared_extension "$extension"; then
|
||||
disable_extension_helper "$extension" true
|
||||
(! check_extension "$extension" && add_log "${tick:?}" ":$extension" "Disabled") ||
|
||||
add_log "${cross:?}" ":$extension" "Could not disable $extension on PHP ${semver:?}"
|
||||
else
|
||||
add_log "${cross:?}" ":$extension" "Could not disable $extension on PHP $semver as it not a shared extension"
|
||||
fi
|
||||
elif shared_extension "$extension"; then
|
||||
add_log "${tick:?}" ":$extension" "Disabled"
|
||||
else
|
||||
add_log "${tick:?}" ":$extension" "Could not find $extension on PHP $semver"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to disable shared extensions.
|
||||
disable_all_shared() {
|
||||
get_extension_map
|
||||
sudo sed -i.orig -E -e "/^(zend_)?extension\s*=/d" "${ini_file[@]}" "$pecl_file" 2>/dev/null || true
|
||||
sudo find "${ini_dir:-$scan_dir}"/.. -name "*.ini" -not -path "*php.ini" -not -path "*phar.ini" -not -path "*pecl.ini" -not -path "*mods-available*" -delete || true
|
||||
mkdir -p /tmp/extdisabled/"$version"
|
||||
sudo rm -f /tmp/php"$version"_extensions
|
||||
sudo find "$ext_dir" -name '*.so' -print0 | xargs -0 -n 1 basename -s .so | xargs -I{} touch /tmp/extdisabled/"$version"/{}
|
||||
add_log "${tick:?}" "none" "Disabled all shared extensions"
|
||||
}
|
||||
|
||||
# Function to configure PECL.
|
||||
configure_pecl() {
|
||||
[ -z "${pecl_file:-${ini_file[@]}}" ] && return
|
||||
if ! [ -e /tmp/pecl_config ]; then
|
||||
for script in pear pecl; do
|
||||
sudo "$script" channel-update "$script".php.net
|
||||
done
|
||||
echo '' | sudo tee /tmp/pecl_config
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add an extension.
|
||||
add_extension() {
|
||||
local extension=$1
|
||||
local prefix=$2
|
||||
enable_extension "$extension" "$prefix"
|
||||
if check_extension "$extension"; then
|
||||
add_log "${tick:?}" "$extension" "Enabled"
|
||||
else
|
||||
add_extension_helper "$extension" "$prefix"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to get the PECL version of an extension.
|
||||
get_pecl_version() {
|
||||
local extension=$1
|
||||
states=("stable" "rc" "preview" "beta" "alpha" "snapshot")
|
||||
stability="$(echo "$2" | grep -m 1 -Eio "($(IFS='|' ; echo "${states[*]}"))")"
|
||||
IFS=' ' read -r -a states <<< "$(echo "${states[@]}" | grep -Eo "$stability.*")"
|
||||
major_version=${3:-'[0-9]+'}
|
||||
pecl_rest='https://pecl.php.net/rest/r/'
|
||||
response=$(get -s -n "" "$pecl_rest$extension"/allreleases.xml)
|
||||
for state in "${states[@]}"; do
|
||||
pecl_version=$(echo "$response" | grep -m 1 -Eio "($major_version\.[0-9]+\.[0-9]+${state}[0-9]+<)" | cut -d '<' -f 1)
|
||||
[ -z "$pecl_version" ] && pecl_version=$(echo "$response" | grep -m 1 -Eio "v>(.*)<\/v>.*$state<" | grep -m 1 -Eo "($major_version\.[0-9]+\.[0-9]+.*)<" | cut -d '<' -f 1)
|
||||
[ -n "$pecl_version" ] && break;
|
||||
done
|
||||
[ -z "$pecl_version" ] && pecl_version=$(echo "$response" | grep -m 1 -Eo "($major_version\.[0-9]+\.[0-9]+)<" | cut -d '<' -f 1)
|
||||
echo "$pecl_version"
|
||||
}
|
||||
|
||||
# Function to install PECL extensions and accept default options
|
||||
pecl_install() {
|
||||
local extension=$1
|
||||
local prefix=${2:-extension}
|
||||
add_pecl
|
||||
disable_extension_helper "${extension%-*}"
|
||||
# Compare version with 8.3 so it runs only on 8.4 and above
|
||||
# Install using the source interface as it allows for patching.
|
||||
if [[ $(printf "%s\n%s" "${version:?}" "8.3" | sort -V | head -n1) != "$version" ]]; then
|
||||
extension_version=${extension##*-};
|
||||
[ "$extension_version" = "${extension%-*}" ] && extension_version=$(get_pecl_version "$extension" "stable")
|
||||
add_extension_from_source "${extension%-*}" https://pecl.php.net "${extension%-*}" "${extension%-*}" "$extension_version" "$prefix" pecl
|
||||
check_extension "${extension%-*}" && return 0 || return 1;
|
||||
else
|
||||
cpu_count="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo '1')"
|
||||
prefix_opts="$(parse_args "$extension" CONFIGURE_PREFIX_OPTS) MAKEFLAGS='-j $cpu_count'"
|
||||
suffix_opts="$(parse_args "$extension" CONFIGURE_OPTS) $(parse_args "$extension" CONFIGURE_SUFFIX_OPTS)"
|
||||
IFS=' ' read -r -a libraries <<<"$(parse_args "$extension" LIBS) $(parse_args "$extension" "$(uname -s)"_LIBS)"
|
||||
(( ${#libraries[@]} )) && add_libs "${libraries[@]}"
|
||||
if [ "$version" = "5.3" ]; then
|
||||
yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f "$extension"
|
||||
else
|
||||
yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f -D "$(parse_pecl_configure_options "$suffix_opts")" "$extension"
|
||||
fi
|
||||
local exit_code=$?
|
||||
sudo pecl info "$extension" | grep -iq 'zend extension' && prefix=zend_extension
|
||||
enable_extension "${extension%-*}" "$prefix"
|
||||
return "$exit_code"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install a specific version of PECL extension.
|
||||
add_pecl_extension() {
|
||||
local extension=$1
|
||||
local pecl_version=$2
|
||||
local prefix=$3
|
||||
enable_extension "$extension" "$prefix"
|
||||
if [[ $pecl_version =~ .*(alpha|beta|rc|snapshot|preview).* ]]; then
|
||||
pecl_version=$(get_pecl_version "$extension" "$pecl_version")
|
||||
fi
|
||||
ext_version=$(php -r "echo phpversion('$extension');")
|
||||
if check_extension "$extension" && [[ -z "$pecl_version" || (-n "$pecl_version" && "${ext_version/-/}" == "$pecl_version") ]]; then
|
||||
add_log "${tick:?}" "$extension" "Enabled"
|
||||
else
|
||||
[ -n "$pecl_version" ] && pecl_version="-$pecl_version"
|
||||
pecl_install "$extension$pecl_version" || ( [ "${fail_fast:?}" = "false" ] && add_extension "$extension" "$(get_extension_prefix "$extension")" )
|
||||
extension_version="$(php -r "echo phpversion('$extension');")"
|
||||
[ -n "$extension_version" ] && extension_version="-$extension_version"
|
||||
add_extension_log "$extension$extension_version" "Installed and enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup pre-release extensions using PECL.
|
||||
add_unstable_extension() {
|
||||
local extension=$1
|
||||
local stability=$2
|
||||
local prefix=$3
|
||||
pecl_version=$(get_pecl_version "$extension" "$stability")
|
||||
add_pecl_extension "$extension" "$pecl_version" "$prefix"
|
||||
}
|
||||
|
||||
# Function to get extension prefix
|
||||
get_extension_prefix() {
|
||||
echo "$1" | grep -Eq "xdebug([2-3])?$|opcache|ioncube|eaccelerator" && echo zend_extension || echo extension
|
||||
}
|
||||
@@ -21,7 +21,9 @@ Function Add-Blackfire() {
|
||||
$status="Enabled"
|
||||
} else {
|
||||
$nts = if (!$installed.ThreadSafe) { "_nts" } else { "" }
|
||||
Invoke-WebRequest -Uri "https://packages.blackfire.io/binaries/blackfire-php/${extension_version}/blackfire-php-windows_${arch}-php-${no_dot_version}${nts}.dll" -OutFile $ext_dir\blackfire.dll > $null 2>&1
|
||||
Get-File -Url "https://packages.blackfire.io/binaries/blackfire-php/${extension_version}/blackfire-php-windows_${arch}-php-${no_dot_version}${nts}.dll" -OutFile $ext_dir\blackfire.dll > $null 2>&1
|
||||
Disable-Extension xdebug > $null 2>&1
|
||||
Disable-Extension pcov > $null 2>&1
|
||||
Enable-PhpExtension -Extension blackfire -Path $php_dir
|
||||
$status="Installed and enabled"
|
||||
}
|
||||
@@ -8,6 +8,10 @@ add_blackfire() {
|
||||
status='Enabled'
|
||||
if ! shared_extension blackfire; then
|
||||
status='Installed and enabled'
|
||||
arch="$(uname -m)"
|
||||
arch_name="amd64"
|
||||
[[ "$arch" = "aarch64" || "$arch" = "arm64" ]] && arch_name="arm64"
|
||||
[ "${ts:?}" = 'zts' ] && no_dot_version="${no_dot_version}-zts"
|
||||
if [ "$extension_version" = "blackfire" ]; then
|
||||
if [[ ${version:?} =~ 5.[3-6] ]]; then
|
||||
extension_version='1.50.0'
|
||||
@@ -15,8 +19,14 @@ add_blackfire() {
|
||||
extension_version=$(get -s -n "" https://blackfire.io/api/v1/releases | grep -Eo 'php":"([0-9]+.[0-9]+.[0-9]+)' | cut -d '"' -f 3)
|
||||
fi
|
||||
fi
|
||||
get -q -n "${ext_dir:?}/blackfire.so" https://packages.blackfire.io/binaries/blackfire-php/"$extension_version"/blackfire-php-"$platform"_amd64-php-"$no_dot_version".so >/dev/null 2>&1
|
||||
get -q -n "${ext_dir:?}/blackfire.so" https://packages.blackfire.io/binaries/blackfire-php/"$extension_version"/blackfire-php-"$platform"_"$arch_name"-php-"$no_dot_version".so
|
||||
fi
|
||||
if [ -e "${ext_dir:?}/blackfire.so" ]; then
|
||||
disable_extension xdebug
|
||||
disable_extension pcov
|
||||
enable_extension blackfire extension
|
||||
add_extension_log blackfire "$status"
|
||||
else
|
||||
add_extension_log blackfire "Could not install blackfire on PHP ${semver:?}"
|
||||
fi
|
||||
}
|
||||
98
src/scripts/extensions/couchbase.sh
Normal file
98
src/scripts/extensions/couchbase.sh
Normal file
@@ -0,0 +1,98 @@
|
||||
# Function to install libraries required by couchbase
|
||||
add_couchbase_clibs() {
|
||||
ext=$1
|
||||
trunk="https://github.com/couchbase/libcouchbase/releases"
|
||||
if [[ "$ext" =~ couchbase-2.+ ]]; then
|
||||
release="2.10.9"
|
||||
else
|
||||
release=$(get -s -n "" "$trunk"/latest | grep -Eo -m 1 "[0-9]+\.[0-9]+\.[0-9]+" | head -n 1)
|
||||
fi
|
||||
[ "$VERSION_ID" = "24.04" ] && vid=22.04 || vid="$VERSION_ID"
|
||||
[ "$VERSION_CODENAME" = "noble" ] && vcn=jammy || vcn="$VERSION_CODENAME"
|
||||
deb_url="$trunk/download/$release/libcouchbase-${release}_ubuntu${vid/./}_${vcn}_amd64.tar"
|
||||
get -q -n /tmp/libcouchbase.tar "$deb_url"
|
||||
if ! [ -e /tmp/libcouchbase.tar ] || ! file /tmp/libcouchbase.tar | grep -q 'tar archive'; then
|
||||
deb_url="$trunk/download/$release/libcouchbase-${release}_ubuntu2004_focal_amd64.tar"
|
||||
get -q -n /tmp/libcouchbase.tar "$deb_url"
|
||||
add_old_libssl
|
||||
fi
|
||||
sudo tar -xf /tmp/libcouchbase.tar -C /tmp
|
||||
install_packages libev4 libevent-dev
|
||||
sudo dpkg -i /tmp/libcouchbase-*/*.deb
|
||||
}
|
||||
|
||||
add_old_libssl() {
|
||||
if [[ "$VERSION_ID" = "24.04" ]]; then
|
||||
get -q -n /tmp/libssl.deb http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
|
||||
[ -e /tmp/libssl.deb ] && sudo dpkg -i /tmp/libssl.deb || add_extension_log "couchbase" "Could not install libssl1.1"
|
||||
fi
|
||||
}
|
||||
|
||||
add_couchbase_cxxlibs() {
|
||||
if [ "${runner:?}" = "self-hosted" ]; then
|
||||
add_list cmake https://apt.kitware.com/ubuntu/ https://apt.kitware.com/keys/kitware-archive-latest.asc "$VERSION_CODENAME" main
|
||||
fi
|
||||
install_packages cmake ccache
|
||||
}
|
||||
|
||||
get_couchbase_version() {
|
||||
if [[ "${version:?}" =~ ${old_versions:?} ]]; then
|
||||
echo couchbase-2.2.3
|
||||
elif [[ "${version:?}" =~ 5.6|7.[0-1] ]]; then
|
||||
echo couchbase-2.6.2
|
||||
elif [ "${version:?}" = '7.2' ]; then
|
||||
echo couchbase-3.0.4
|
||||
elif [ "${version:?}" = '7.3' ]; then
|
||||
echo couchbase-3.2.2
|
||||
elif [ "${version:?}" = '7.4' ]; then
|
||||
echo couchbase-4.1.1
|
||||
else
|
||||
echo couchbase
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to add couchbase.
|
||||
add_couchbase() {
|
||||
ext=$1
|
||||
if [ "$(uname -s)" = "Linux" ]; then
|
||||
if [ "$ext" = "couchbase" ]; then
|
||||
ext=$(get_couchbase_version)
|
||||
fi
|
||||
if [[ "$ext" =~ couchbase-[2-3].+ ]]; then
|
||||
add_couchbase_clibs "$ext"
|
||||
else
|
||||
add_couchbase_cxxlibs
|
||||
fi
|
||||
enable_extension "couchbase" "extension"
|
||||
if check_extension "couchbase"; then
|
||||
add_log "${tick:?}" "couchbase" "Enabled"
|
||||
else
|
||||
if [ "$ext" = "couchbase" ]; then
|
||||
ext="couchbase-$(get_pecl_version "couchbase" "stable")"
|
||||
n_proc="$(nproc)"
|
||||
export COUCHBASE_SUFFIX_OPTS="CMAKE_BUILD_TYPE=Release"
|
||||
export CMAKE_BUILD_PARALLEL_LEVEL="$n_proc"
|
||||
add_extension_from_source couchbase https://pecl.php.net couchbase couchbase "${ext##*-}" extension pecl
|
||||
else
|
||||
pecl_install "${ext}"
|
||||
fi
|
||||
add_extension_log "couchbase" "Installed and enabled"
|
||||
fi
|
||||
else
|
||||
if [ -e "${ext_dir:?}/couchbase.so" ]; then
|
||||
couchbase_rpath="$(otool -l "${ext_dir:?}/couchbase.so" 2>/dev/null | awk '$1 == "path" && $2 ~ /\/couchbase@'"${version:?}"'\// {print $2; exit}')"
|
||||
couchbase_rpath="${couchbase_rpath/@loader_path/${ext_dir:?}}"
|
||||
otool -L "${ext_dir:?}/couchbase.so" 2>/dev/null |
|
||||
awk -v rpath="$couchbase_rpath" '/libcouchbase_php.*\.dylib/ {if ($1 ~ /^@rpath\// && rpath != "") {sub(/^@rpath/, rpath, $1)}; print $1}' |
|
||||
while read -r dylib; do
|
||||
dylib="${dylib/@loader_path/${ext_dir:?}}"
|
||||
[ -e "${ext_dir:?}/$(basename "$dylib")" ] || continue
|
||||
sudo mkdir -p "$(dirname "$dylib")"
|
||||
sudo cp "${ext_dir:?}/$(basename "$dylib")" "$dylib"
|
||||
done
|
||||
fi
|
||||
add_brew_extension couchbase extension
|
||||
find "${brew_prefix:?}/lib" "${brew_prefix:?}/opt/couchbase@${version:?}" "${brew_prefix:?}/Cellar/couchbase@${version:?}" \
|
||||
-name 'libcouchbase_php*.dylib' -exec sudo cp {} "${ext_dir:?}" \;
|
||||
fi
|
||||
}
|
||||
@@ -1,19 +1,10 @@
|
||||
# Function to log license details.
|
||||
add_license_log() {
|
||||
printf "::group::\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information"
|
||||
printf "$GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information"
|
||||
printf "Cubrid CCI package is required for %s extension.\n" "$ext"
|
||||
printf "The extension %s and Cubrid CCI are provided under the license linked below.\n" "$ext"
|
||||
printf "Refer to: \033[35;1m%s \033[0m\n" "https://github.com/CUBRID/cubrid-cci/blob/develop/COPYING"
|
||||
echo "::endgroup::"
|
||||
}
|
||||
|
||||
# Function to setup gcc-7 and g++-7
|
||||
setup_compiler() {
|
||||
if ! command -v gcc-7 >/dev/null || ! command -v g++-7 >/dev/null; then
|
||||
add_ppa ubuntu-toolchain-r/test
|
||||
add_packages gcc-7 g++-7 -y
|
||||
fi
|
||||
printf "gcc g++" | xargs -d ' ' -I {} sudo update-alternatives --install /usr/bin/{} {} /usr/bin/{}-7 7
|
||||
echo "$END_GROUP"
|
||||
}
|
||||
|
||||
# Function to set cubrid repo for the extension.
|
||||
@@ -51,10 +42,10 @@ add_cubrid_helper() {
|
||||
add_cubrid() {
|
||||
ext=$1
|
||||
status='Enabled'
|
||||
add_cubrid_helper "$ext" >/dev/null 2>&1
|
||||
add_cubrid_helper "$ext"
|
||||
add_extension_log "$ext" "$status"
|
||||
check_extension "$ext" && add_license_log
|
||||
}
|
||||
|
||||
# shellcheck source=.
|
||||
. "${scripts:?}"/ext/patches/phpize.sh
|
||||
. "${scripts:?}"/extensions/patches/phpize.sh
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user