Skip to content

Commit 7abee8e

Browse files
committed
Add custom support for zephir parser
1 parent dd01156 commit 7abee8e

File tree

6 files changed

+135
-1
lines changed

6 files changed

+135
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ PHP extensions can be set up using the `extensions` input. It accepts a `string`
208208
- These extensions have custom support:
209209
- `cubrid` and `pdo_cubrid` on `Ubuntu`.
210210
- `event`, `gearman`, `geos` and `relay` on `Ubuntu` and `macOS`.
211-
- `blackfire`, `couchbase`, `ioncube`, `oci8`, `pdo_firebird`, `pdo_oci`, `pecl_http`, `phalcon3`, `phalcon4` and `phalcon5` on all supported OS.
211+
- `blackfire`, `couchbase`, `ioncube`, `oci8`, `pdo_firebird`, `pdo_oci`, `pecl_http`, `phalcon3`, `phalcon4`, `phalcon5`, and `zephir_parser` on all supported OS.
212212

213213
- By default, extensions which cannot be added or disabled gracefully leave an error message in the logs, the execution is not interrupted. To change this behaviour you can set `fail-fast` flag to `true`.
214214

__tests__/extensions.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ describe('Extension tests', () => {
2525
${'sqlsrv-1.2.3preview1'} | ${'7.4'} | ${'Add-Extension sqlsrv devel 1.2.3'}
2626
${'Xdebug'} | ${'7.4'} | ${'Add-Extension xdebug'}
2727
${'xdebug2'} | ${'7.2'} | ${'Add-Extension xdebug stable 2.9.8'}
28+
${'zephir_parser'} | ${'7.2'} | ${'Add-ZephirParser zephir_parser'}
2829
`(
2930
'checking addExtensionOnWindows for extension $extension on version $version',
3031
async ({extension, version, output}) => {
@@ -66,6 +67,7 @@ describe('Extension tests', () => {
6667
${'Xdebug'} | ${'7.4'} | ${'add_extension xdebug'}
6768
${'xdebug-alpha'} | ${'7.4'} | ${'add_unstable_extension xdebug alpha zend_extension'}
6869
${'xdebug2'} | ${'7.2'} | ${'add_pecl_extension xdebug 2.9.8 zend_extension'}
70+
${'zephir_parser-1.2.3'} | ${'7.2'} | ${'add_zephir_parser zephir_parser-1.2.3'}
6971
`(
7072
'checking addExtensionOnLinux for extension $extension on version $version',
7173
async ({extension, version, output}) => {
@@ -96,6 +98,7 @@ describe('Extension tests', () => {
9698
${'pecl_http'} | ${'7.3'} | ${'add_http'}
9799
${'relay-1.2.3'} | ${'7.4'} | ${'add_relay relay-1.2.3'}
98100
${'sqlite'} | ${'7.2'} | ${'add_extension sqlite3'}
101+
${'zephir_parser-v1.2.3'} | ${'7.2'} | ${'add_zephir_parser zephir_parser-v1.2.3'}
99102
`(
100103
'checking addExtensionOnDarwin for extension $extension on version $version',
101104
async ({extension, version, output}) => {

dist/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ async function addExtensionDarwin(extension_csv, version) {
254254
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
255255
case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4|(7\.4|8\.[0-2])phalcon5/.test(version_extension):
256256
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
257+
case /^(7\.[0-4]|8\.[0-2])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(version_extension):
257258
add_script += await utils.customPackage(ext_name, 'extensions', extension, 'darwin');
258259
return;
259260
case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
@@ -303,6 +304,7 @@ async function addExtensionWindows(extension_csv, version) {
303304
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
304305
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-2])phalcon5$/.test(version_extension):
305306
case /^(7\.[1-4]|8\.1)(pecl_)?http/.test(version_extension):
307+
case /^(7\.[0-4]|8\.[0-2])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(version_extension):
306308
add_script += await utils.customPackage(ext_name, 'extensions', extension, 'win32');
307309
return;
308310
case /.+-(stable|beta|alpha|devel|snapshot)/.test(extension):
@@ -371,6 +373,7 @@ async function addExtensionLinux(extension_csv, version) {
371373
case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
372374
case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$|^(7\.4|8\.[0-2])phalcon5$/.test(version_extension):
373375
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
376+
case /^(7\.[0-4]|8\.[0-2])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(version_extension):
374377
add_script += await utils.customPackage(ext_name, 'extensions', extension, 'linux');
375378
return;
376379
case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):

src/extensions.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export async function addExtensionDarwin(
3737
// match couchbase, event, geos, pdo_oci, oci8, http, pecl_http
3838
// match 5.3ioncube...7.4ioncube
3939
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.2phalcon5
40+
// match 7.0zephir_parser...8.2zephir_parser
4041
case /^(7\.4|8\.[0-2])relay(-v?\d+\.\d+\.\d+)?$/.test(version_extension):
4142
case /^(5\.[3-6]|7\.[0-4]|8\.[0-2])blackfire(-\d+\.\d+\.\d+)?$/.test(
4243
version_extension
@@ -49,6 +50,9 @@ export async function addExtensionDarwin(
4950
version_extension
5051
):
5152
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
53+
case /^(7\.[0-4]|8\.[0-2])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
54+
version_extension
55+
):
5256
add_script += await utils.customPackage(
5357
ext_name,
5458
'extensions',
@@ -136,6 +140,7 @@ export async function addExtensionWindows(
136140
// match 5.3ioncube...7.4ioncube
137141
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, and 7.4phalcon5...8.2phalcon5
138142
// match 7.1pecl_http...8.1pecl_http and 7.1http...8.1http
143+
// match 7.0zephir_parser...8.2zephir_parser
139144
case /^(5\.[3-6]|7\.[0-4]|8\.[0-2])blackfire(-\d+\.\d+\.\d+)?$/.test(
140145
version_extension
141146
):
@@ -145,6 +150,9 @@ export async function addExtensionWindows(
145150
version_extension
146151
):
147152
case /^(7\.[1-4]|8\.1)(pecl_)?http/.test(version_extension):
153+
case /^(7\.[0-4]|8\.[0-2])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
154+
version_extension
155+
):
148156
add_script += await utils.customPackage(
149157
ext_name,
150158
'extensions',
@@ -261,6 +269,7 @@ export async function addExtensionLinux(
261269
// match couchbase, geos, pdo_oci, oci8, http, pecl_http
262270
// match 5.3ioncube...7.4ioncube
263271
// match 7.0phalcon3...7.3phalcon3, 7.2phalcon4...7.4phalcon4, 7.4phalcon5...8.2phalcon5
272+
// match 7.0zephir_parser...8.2zephir_parser
264273
case /^(7\.4|8\.[0-2])relay(-v?\d+\.\d+\.\d+)?$/.test(version_extension):
265274
case /^(5\.[3-6]|7\.[0-4]|8\.[0-2])blackfire(-\d+\.\d+\.\d+)?$/.test(
266275
version_extension
@@ -277,6 +286,9 @@ export async function addExtensionLinux(
277286
version_extension
278287
):
279288
case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
289+
case /^(7\.[0-4]|8\.[0-2])zephir_parser(-v?\d+\.\d+\.\d+)?$/.test(
290+
version_extension
291+
):
280292
add_script += await utils.customPackage(
281293
ext_name,
282294
'extensions',
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Function to get the url of the phalcon release asset.
2+
Function Get-ZephirParserReleaseAssetUrl() {
3+
Param (
4+
[Parameter(Position = 0, Mandatory = $true)]
5+
[ValidateNotNull()]
6+
[string]
7+
$extension_version
8+
)
9+
$repo = 'zephir-lang/php-zephir-parser'
10+
$zp_releases = "$github/$repo/releases"
11+
try {
12+
$match = (Invoke-RestMethod -Uri "https://api.github.com/repos/$repo/tags/$extension_version").assets | Select-String -Pattern "browser_download_url=.*(zephir_parser-php-${version}.*windows.*.zip)"
13+
} catch {
14+
$match = (Invoke-WebRequest -Uri "$zp_releases/expanded_assets/$extension_version").Links.href | Select-String -Pattern "(zephir_parser-php-${version}.*windows.*.zip)"
15+
}
16+
if($NULL -ne $match) {
17+
return "$zp_releases/download/$extension_version/$($match.Matches[0].Groups[1].Value)"
18+
}
19+
return false;
20+
}
21+
22+
# Function to get zephir parser version using GitHub releases.
23+
Function Get-ZephirParserVersion() {
24+
Param (
25+
[Parameter(Position = 0, Mandatory = $true)]
26+
[ValidateNotNull()]
27+
[string]
28+
$extension
29+
)
30+
$repo = 'zephir-lang/php-zephir-parser'
31+
$zp_releases = "$github/$repo/releases"
32+
if($extension -eq 'zephir_parser') {
33+
return (Invoke-WebRequest -UseBasicParsing -Uri $zp_releases/latest).BaseResponse.RequestMessage.RequestUri.Segments[-1]
34+
} else {
35+
return 'v' + ($extension.split('-')[1] -replace 'v')
36+
}
37+
}
38+
39+
# Function to add zephir parser using GitHub releases.
40+
Function Add-ZephirParserFromGitHub() {
41+
Param (
42+
[Parameter(Position = 0, Mandatory = $true)]
43+
[ValidateNotNull()]
44+
[string]
45+
$extension
46+
)
47+
$extension_version = Get-ZephirParserVersion $extension
48+
$zip_url = Get-ZephirParserReleaseAssetUrl $extension_version
49+
if($zip_url) {
50+
Invoke-WebRequest -Uri $zip_url -OutFile $ENV:RUNNER_TOOL_CACHE\zp.zip > $null 2>&1
51+
Expand-Archive -Path $ENV:RUNNER_TOOL_CACHE\zp.zip -DestinationPath $ENV:RUNNER_TOOL_CACHE\zp -Force > $null 2>&1
52+
Copy-Item -Path "$ENV:RUNNER_TOOL_CACHE\zp\php_zephir_parser.dll" -Destination "$ext_dir\php_zephir_parser.dll"
53+
Enable-PhpExtension -Extension zephir_parser -Path $php_dir
54+
} else {
55+
throw "Unable to get zephir_parser release from the GitHub repo"
56+
}
57+
}
58+
59+
# Function to add zephir parser.
60+
Function Add-ZephirParser() {
61+
Param (
62+
[Parameter(Position = 0, Mandatory = $true)]
63+
[ValidateNotNull()]
64+
[string]
65+
$extension
66+
)
67+
try {
68+
$status = 'Enabled'
69+
if (Test-Path $ext_dir\php_zephir_parser.dll) {
70+
Enable-PhpExtension -Extension zephir_parser -Path $php_dir
71+
} else {
72+
$status = 'Installed and enabled'
73+
Add-ZephirParserFromGitHub $extension
74+
}
75+
Add-ExtensionLog zephir_parser $status
76+
} catch {
77+
Add-Log $cross $extension "Could not install $extension on PHP $($installed.FullVersion)"
78+
}
79+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Get zephir_parser version
2+
get_zephir_parser_version() {
3+
local ext=$1
4+
if [[ "$ext" =~ ^zephir_parser$ ]]; then
5+
get -s -n "" "${zp_releases:?}"/latest 2<&1 | grep -m 1 -Eo "tag/(v?[0-9]+(\.[0-9]+)?(\.[0-9]+)?)" | head -n 1 | cut -d '/' -f 2
6+
else
7+
zp_version="${ext##*-}"
8+
echo "v${zp_version/v//}"
9+
fi
10+
}
11+
12+
# Add zephir_parser helper
13+
add_zephir_parser_helper() {
14+
local ext=$1
15+
ext_version=$(get_zephir_parser_version "$ext")
16+
[ "$(uname -s)" = "Linux" ] && os_suffix=ubuntu || os_suffix=macos
17+
build_name=$(get -s -n "" https://api.github.com/repos/"$repo"/releases/tags/"$ext_version" | grep -Eo "zephir_parser-php-${version:?}.*$os_suffix-.*.zip" | head -n 1)
18+
[ -z "$build_name" ] && build_name=$(get -s -n "" "$zp_releases"/expanded_assets/"$ext_version" | grep -Eo "zephir_parser-php-${version:?}.*$os_suffix-.*.zip" | head -n 1)
19+
get -q -e "/tmp/zp.zip" "$zp_releases"/download/"$ext_version"/"$build_name"
20+
sudo unzip -o "/tmp/zp.zip" -d "${ext_dir:?}"
21+
enable_extension zephir_parser extension
22+
}
23+
24+
# Add zephir_parser
25+
add_zephir_parser() {
26+
ext=$1
27+
repo=zephir-lang/php-zephir-parser
28+
zp_releases=https://github.com/"$repo"/releases
29+
if ! shared_extension zephir_parser; then
30+
message='Installed and enabled'
31+
add_zephir_parser_helper "$ext" >/dev/null 2>&1
32+
else
33+
message='Enabled'
34+
enable_extension zephir_parser extension
35+
fi
36+
add_extension_log zephir_parser "$message"
37+
}

0 commit comments

Comments
 (0)