From 320474a2459dfb72d3258a85b62edd193e9610ac Mon Sep 17 00:00:00 2001
From: Shivam Mathur
Date: Fri, 17 Jan 2020 12:58:28 +0530
Subject: [PATCH] Add support for phpize and php-config
---
README.md | 4 ++--
__tests__/tools.test.ts | 43 ++++++++++++++++++++++++++++++++++++++---
dist/index.js | 27 ++++++++++++++++++++++++++
src/scripts/linux.sh | 13 ++++++++++---
src/tools.ts | 39 +++++++++++++++++++++++++++++++++++++
5 files changed, 118 insertions(+), 8 deletions(-)
diff --git a/README.md b/README.md
index 992b6714..40dae5ec 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
-Setup PHP with required extensions, php.ini configuration, code-coverage support and tools like composer in [GitHub Actions](https://github.com/features/actions "GitHub Actions"). This action gives you a cross platform interface to setup the PHP environment you need to test your application. Refer to [Usage](#memo-usage "How to use this") section and [examples](#examples "Examples of use") to see how to use this.
+Setup PHP with required extensions, php.ini configuration, code-coverage support and various tools like composer in [GitHub Actions](https://github.com/features/actions "GitHub Actions"). This action gives you a cross platform interface to setup the PHP environment you need to test your application. Refer to [Usage](#memo-usage "How to use this") section and [examples](#examples "Examples of use") to see how to use this.
## Contents
@@ -72,7 +72,7 @@ Setup PHP with required extensions, php.ini configuration, code-coverage support
These tools can be setup globally using the `tools` input.
-`codeception`, `composer`, `composer-prefetcher`, `deployer`, `pecl`, `phinx`, `phpcbf`, `phpcpd`, `php-cs-fixer`, `phpcs`, `phpmd`, `phpstan`, `phpunit`, `prestissimo`, `psalm`
+`codeception`, `composer`, `composer-prefetcher`, `deployer`, `pecl`, `phinx`, `phpcbf`, `phpcpd`, `php-config`, `php-cs-fixer`, `phpcs`, `phpize`, `phpmd`, `phpstan`, `phpunit`, `prestissimo`, `psalm`
```yaml
uses: shivammathur/setup-php@v1
diff --git a/__tests__/tools.test.ts b/__tests__/tools.test.ts
index 11ea7a29..4ccf9658 100644
--- a/__tests__/tools.test.ts
+++ b/__tests__/tools.test.ts
@@ -239,6 +239,35 @@ describe('Tools tests', () => {
expect(script).toContain('Platform fedora is not supported');
});
+ it('checking addDevTools', async () => {
+ let script: string = await tools.addDevTools('phpize', 'linux');
+ expect(script).toContain('add_devtools');
+ expect(script).toContain('add_log "$tick" "phpize" "Added"');
+
+ script = await tools.addDevTools('php-config', 'linux');
+ expect(script).toContain('add_devtools');
+ expect(script).toContain('add_log "$tick" "php-config" "Added"');
+
+ script = await tools.addDevTools('phpize', 'darwin');
+ expect(script).toContain('add_log "$tick" "phpize" "Added"');
+
+ script = await tools.addDevTools('php-config', 'darwin');
+ expect(script).toContain('add_log "$tick" "php-config" "Added"');
+
+ script = await tools.addDevTools('phpize', 'win32');
+ expect(script).toContain(
+ 'Add-Log "$cross" "phpize" "phpize is not a windows tool"'
+ );
+
+ script = await tools.addDevTools('php-config', 'win32');
+ expect(script).toContain(
+ 'Add-Log "$cross" "php-config" "php-config is not a windows tool"'
+ );
+
+ script = await tools.addDevTools('tool', 'fedora');
+ expect(script).toContain('Platform fedora is not supported');
+ });
+
it('checking addPackage', async () => {
let script: string = await tools.addPackage(
'tool',
@@ -260,7 +289,7 @@ describe('Tools tests', () => {
it('checking addTools on linux', async () => {
const script: string = await tools.addTools(
- 'php-cs-fixer, phpstan, phpunit, pecl, phinx, phinx:1.2.3',
+ 'php-cs-fixer, phpstan, phpunit, pecl, phinx, phinx:1.2.3, php-config, phpize',
'7.4',
'linux'
);
@@ -279,10 +308,13 @@ describe('Tools tests', () => {
expect(script).toContain('add_pecl');
expect(script).toContain('add_composer_tool phinx phinx robmorgan/');
expect(script).toContain('add_composer_tool phinx phinx:1.2.3 robmorgan/');
+ expect(script).toContain('add_devtools');
+ expect(script).toContain('add_log "$tick" "php-config" "Added"');
+ expect(script).toContain('add_log "$tick" "phpize" "Added"');
});
it('checking addTools on darwin', async () => {
const script: string = await tools.addTools(
- 'phpcs, phpcbf, phpcpd, phpmd, psalm, phinx, composer-prefetcher:1.2.3',
+ 'phpcs, phpcbf, phpcpd, phpmd, psalm, phinx, composer-prefetcher:1.2.3, phpize, php-config',
'7.4',
'darwin'
);
@@ -308,10 +340,12 @@ describe('Tools tests', () => {
expect(script).toContain(
'add_composer_tool composer-prefetcher composer-prefetcher:1.2.3 narrowspark/automatic-'
);
+ expect(script).toContain('add_log "$tick" "phpize" "Added"');
+ expect(script).toContain('add_log "$tick" "php-config" "Added"');
});
it('checking addTools on windows', async () => {
const script: string = await tools.addTools(
- 'codeception, deployer, prestissimo, phpmd, phinx, does_not_exit',
+ 'codeception, deployer, prestissimo, phpmd, phinx, php-config, phpize, does_not_exit',
'7.4',
'win32'
);
@@ -325,6 +359,9 @@ describe('Tools tests', () => {
'Add-Composer-Tool prestissimo prestissimo hirak/'
);
expect(script).toContain('Add-Composer-Tool phinx phinx robmorgan/');
+ expect(script).toContain('phpize is not a windows tool');
+ expect(script).toContain('php-config is not a windows tool');
+ expect(script).toContain('Tool does_not_exit is not supported');
expect(script).toContain('Tool does_not_exit is not supported');
});
it('checking addTools with composer tool using user/tool as input', async () => {
diff --git a/dist/index.js b/dist/index.js
index 1c4ae660..555bef40 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1813,6 +1813,29 @@ function addArchive(tool, version, url, os_version) {
});
}
exports.addArchive = addArchive;
+/**
+ * Function to get the script to setup php-config and phpize
+ *
+ * @param tool
+ * @param os_version
+ */
+function addDevTools(tool, os_version) {
+ return __awaiter(this, void 0, void 0, function* () {
+ switch (os_version) {
+ case 'linux':
+ return ('add_devtools' +
+ '\n' +
+ (yield utils.addLog('$tick', tool, 'Added', 'linux')));
+ case 'darwin':
+ return yield utils.addLog('$tick', tool, 'Added', 'darwin');
+ case 'win32':
+ return yield utils.addLog('$cross', tool, tool + ' is not a windows tool', 'win32');
+ default:
+ return yield utils.log('Platform ' + os_version + ' is not supported', os_version, 'error');
+ }
+ });
+}
+exports.addDevTools = addDevTools;
/**
* Helper function to get script to setup a tool using composer
*
@@ -1902,6 +1925,10 @@ function addTools(tools_csv, php_version, os_version) {
case 'pecl':
script += yield getPECLCommand(os_version);
break;
+ case 'php-config':
+ case 'phpize':
+ script += yield addDevTools(tool, os_version);
+ break;
default:
script += yield utils.addLog('$cross', tool, 'Tool ' + tool + ' is not supported', os_version);
break;
diff --git a/src/scripts/linux.sh b/src/scripts/linux.sh
index 816466e1..89ea04be 100644
--- a/src/scripts/linux.sh
+++ b/src/scripts/linux.sh
@@ -96,6 +96,15 @@ add_composer_tool() {
) || add_log "$cross" "$tool" "Could not setup $tool"
}
+# Function to setup phpize and php-config
+add_devtools() {
+ if ! [ -e "/usr/bin/phpize$version" ] || ! [ -e "/usr/bin/php-config$version" ]; then
+ $apt_install php"$version"-dev php"$version"-xml >/dev/null 2>&1
+ fi
+ sudo update-alternatives --set php-config /usr/bin/php-config"$version" >/dev/null 2>&1
+ sudo update-alternatives --set phpize /usr/bin/phpize"$version" >/dev/null 2>&1
+}
+
# Function to setup the nightly build from master branch
setup_master() {
tar_file=php_"$version"%2Bubuntu"$(lsb_release -r -s)".tar.xz
@@ -112,9 +121,7 @@ setup_master() {
# Function to setup PECL
add_pecl() {
update_ppa
- $apt_install php"$version"-dev php"$version"-xml >/dev/null 2>&1
- sudo update-alternatives --set php-config /usr/bin/php-config"$version" >/dev/null 2>&1
- sudo update-alternatives --set phpize /usr/bin/phpize"$version" >/dev/null 2>&1
+ add_devtools
wget https://github.com/pear/pearweb_phars/raw/master/install-pear-nozlib.phar >/dev/null 2>&1
sudo php install-pear-nozlib.phar >/dev/null 2>&1
sudo rm -rf install-pear-nozlib.phar >/dev/null 2>&1
diff --git a/src/tools.ts b/src/tools.ts
index a15c7d48..d88e285c 100644
--- a/src/tools.ts
+++ b/src/tools.ts
@@ -269,6 +269,41 @@ export async function addArchive(
return (await getArchiveCommand(os_version)) + url + ' ' + tool;
}
+/**
+ * Function to get the script to setup php-config and phpize
+ *
+ * @param tool
+ * @param os_version
+ */
+export async function addDevTools(
+ tool: string,
+ os_version: string
+): Promise {
+ switch (os_version) {
+ case 'linux':
+ return (
+ 'add_devtools' +
+ '\n' +
+ (await utils.addLog('$tick', tool, 'Added', 'linux'))
+ );
+ case 'darwin':
+ return await utils.addLog('$tick', tool, 'Added', 'darwin');
+ case 'win32':
+ return await utils.addLog(
+ '$cross',
+ tool,
+ tool + ' is not a windows tool',
+ 'win32'
+ );
+ default:
+ return await utils.log(
+ 'Platform ' + os_version + ' is not supported',
+ os_version,
+ 'error'
+ );
+ }
+}
+
/**
* Helper function to get script to setup a tool using composer
*
@@ -368,6 +403,10 @@ export async function addTools(
case 'pecl':
script += await getPECLCommand(os_version);
break;
+ case 'php-config':
+ case 'phpize':
+ script += await addDevTools(tool, os_version);
+ break;
default:
script += await utils.addLog(
'$cross',