From ba65cc29b62d4a1cef1ec5b462146420519cc22c Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 12:44:33 +0100 Subject: [PATCH 01/12] prepare for release --- helper/Helper.php | 4 +- includes/Utils.php | 2 +- plugin.php | 104 +++++++++++++++++++-------------------------- 3 files changed, 47 insertions(+), 63 deletions(-) diff --git a/helper/Helper.php b/helper/Helper.php index 7e8415d..29de29d 100644 --- a/helper/Helper.php +++ b/helper/Helper.php @@ -19,12 +19,12 @@ class Helper { /** - * Flag search helper. + * Flag search helper, returns true if flag is found and enabled. * * @param array $flags flags array. * @param string $field field to search. * @param string $flag name of the flag. - * @return mixed + * @return boolean * @since 1.0.0 */ public static function search_flag( $flags, $field, $flag ) { diff --git a/includes/Utils.php b/includes/Utils.php index a1bbd91..e9f97f5 100644 --- a/includes/Utils.php +++ b/includes/Utils.php @@ -11,7 +11,7 @@ namespace MR\FeatureFlags; /** - * Class Utils + * Utils class for feature flags * * @package mr-feature-flags * @since 1.0.0 diff --git a/plugin.php b/plugin.php index 4ae63b8..d7daeff 100644 --- a/plugin.php +++ b/plugin.php @@ -36,44 +36,12 @@ include_once __DIR__ . '/vendor/autoload.php'; } -add_action( - 'wp_enqueue_scripts', - function(): void { - $plugin_url = plugin_dir_url( MR_FEATURE_FLAGS_PLUGIN_PATH ); - $script_asset_file = include_once plugin_dir_path( MR_FEATURE_FLAGS_PLUGIN_PATH ) . 'build/index.asset.php'; - - wp_enqueue_script( - 'mr-feature-flags-script', - $plugin_url . 'build/index.js', - $script_asset_file['dependencies'], - $script_asset_file['version'], - true - ); - - - $feature_flag_meta = get_option( Utils::$option_name ); - $flags_list = []; - if ( is_array( $feature_flag_meta ) ) { - $flags_list = $feature_flag_meta; - } - - - wp_localize_script( - 'mr-feature-flags-script', - 'mrFeatureFlags', - [ - 'flags' => $flags_list, - ] - ); - - } -); - +// Enqueure scripts, styles in settings page. add_action( 'admin_enqueue_scripts', function( string $page ): void { if ( 'toplevel_page_mr-feature-flags' === $page ) { - load_settings_scripts(); + mr_feature_flags_load_settings_scripts(); } } ); @@ -83,7 +51,8 @@ function( string $page ): void { * * @return void */ -function load_settings_scripts(): void { +function mr_feature_flags_load_settings_scripts(): void { + $plugin_url = plugin_dir_url( MR_FEATURE_FLAGS_PLUGIN_PATH ); $settings_asset_file = require_once plugin_dir_path( MR_FEATURE_FLAGS_PLUGIN_PATH ) . 'build/settings.asset.php'; // @phpcs:ignore @@ -106,46 +75,61 @@ function load_settings_scripts(): void { } +// Enqueue scripts and styles for front end. +add_action( + 'wp_enqueue_scripts', + __NAMESPACE__ . '\mr_feature_flags_scripts_enqueue' +); + +// Enqueue scripts and styles for wp-admin. add_action( 'admin_enqueue_scripts', - function( string $page ): void { - $plugin_url = plugin_dir_url( MR_FEATURE_FLAGS_PLUGIN_PATH ); - $script_asset_file = include_once plugin_dir_path( MR_FEATURE_FLAGS_PLUGIN_PATH ) . 'build/index.asset.php'; - - wp_enqueue_script( - 'mr-feature-flags-script', - $plugin_url . 'build/index.js', - $script_asset_file['dependencies'], - $script_asset_file['version'], - true - ); + __NAMESPACE__ . '\mr_feature_flags_scripts_enqueue' +); - $feature_flag_meta = get_option( Utils::$option_name ); - $flags_list = []; - if ( is_array( $feature_flag_meta ) ) { - $flags_list = $feature_flag_meta; - } +/** + * Enqueue scripts and assets for admin and front end + */ +function mr_feature_flags_scripts_enqueue(): void { + $plugin_url = plugin_dir_url( MR_FEATURE_FLAGS_PLUGIN_PATH ); + $script_asset_file = include_once plugin_dir_path( MR_FEATURE_FLAGS_PLUGIN_PATH ) . 'build/index.asset.php'; + wp_enqueue_script( + 'mr-feature-flags-script', + $plugin_url . 'build/index.js', + $script_asset_file['dependencies'], + $script_asset_file['version'], + true + ); - wp_localize_script( - 'mr-feature-flags-script', - 'mrFeatureFlags', - [ - 'flags' => $flags_list, - ] - ); + $feature_flag_meta = get_option( Utils::$option_name ); + $flags_list = []; + + if ( is_array( $feature_flag_meta ) ) { + $flags_list = $feature_flag_meta; } -); + wp_localize_script( + 'mr-feature-flags-script', + 'mrFeatureFlags', + [ + 'flags' => $flags_list, + ] + ); + +} + +// Registers feature flags admin setting page. $mr_feature_flags_admin_settings = new Settings(); $mr_feature_flags_admin_settings->register_feature_settings(); +// Registers feature flags API's. $mr_feature_flags_register_api = new Flags(); $mr_feature_flags_register_api->register_flags_endpoints(); - +// Displays setting page link in plugin page. add_filter( 'plugin_action_links_mr-feature-flags/plugin.php', function ( $links ) { From 94c2255c2ebe86923a4cb5ea565b7e0190fec948 Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 13:24:57 +0100 Subject: [PATCH 02/12] adds huksy --- .husky/pre-commit | 4 ++++ composer.lock | 13 +++++++------ includes/{Utils.php => Flag.php} | 4 +++- {helper => includes/helper}/Helper.php | 2 +- package.json | 4 +++- plugin.php | 6 +++--- tests/Unit/{UtilsTest.php => FlagTest.php} | 10 +++++----- tests/Unit/HelperTest.php | 2 +- yarn.lock | 5 +++++ 9 files changed, 32 insertions(+), 18 deletions(-) create mode 100644 .husky/pre-commit rename includes/{Utils.php => Flag.php} (93%) rename {helper => includes/helper}/Helper.php (95%) rename tests/Unit/{UtilsTest.php => FlagTest.php} (87%) diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..f9a9eff --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +yarn lint:js +yarn test +composer run lint:php +composer run test:php diff --git a/composer.lock b/composer.lock index ec17e42..bda98fd 100644 --- a/composer.lock +++ b/composer.lock @@ -991,16 +991,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.5", + "version": "9.6.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "86e761949019ae83f49240b2f2123fb5ab3b2fc5" + "reference": "b65d59a059d3004a040c16a82e07bbdf6cfdd115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/86e761949019ae83f49240b2f2123fb5ab3b2fc5", - "reference": "86e761949019ae83f49240b2f2123fb5ab3b2fc5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b65d59a059d3004a040c16a82e07bbdf6cfdd115", + "reference": "b65d59a059d3004a040c16a82e07bbdf6cfdd115", "shasum": "" }, "require": { @@ -1073,7 +1073,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.5" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.6" }, "funding": [ { @@ -1089,7 +1090,7 @@ "type": "tidelift" } ], - "time": "2023-03-09T06:34:10+00:00" + "time": "2023-03-27T11:43:46+00:00" }, { "name": "sebastian/cli-parser", diff --git a/includes/Utils.php b/includes/Flag.php similarity index 93% rename from includes/Utils.php rename to includes/Flag.php index e9f97f5..09155a9 100644 --- a/includes/Utils.php +++ b/includes/Flag.php @@ -10,13 +10,15 @@ namespace MR\FeatureFlags; +use MR\FeatureFlags\Helper\Helper; + /** * Utils class for feature flags * * @package mr-feature-flags * @since 1.0.0 */ -class Utils { +class Flag { /** * Name in options table. diff --git a/helper/Helper.php b/includes/helper/Helper.php similarity index 95% rename from helper/Helper.php rename to includes/helper/Helper.php index 29de29d..1edf586 100644 --- a/helper/Helper.php +++ b/includes/helper/Helper.php @@ -8,7 +8,7 @@ declare(strict_types=1); -namespace MR\FeatureFlags; +namespace MR\FeatureFlags\Helper; /** * Class FeatureFlags diff --git a/package.json b/package.json index 64c9264..c6f708d 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "build": "wp-scripts build", "lint:js": "wp-scripts lint-js", "test": "wp-scripts test-unit-js", - "test:watch": "wp-scripts test-unit-js --watch" + "test:watch": "wp-scripts test-unit-js --watch", + "prepare": "husky install" }, "devDependencies": { "@testing-library/jest-dom": "^5.16.5", @@ -32,6 +33,7 @@ "@wordpress/data": "^8.6.0", "@wordpress/i18n": "^4.29.0", "@wordpress/notices": "^3.29.0", + "husky": "^8.0.3", "react": "17.0.2", "react-dom": "17.0.2", "react-syntax-highlighter": "^15.5.0", diff --git a/plugin.php b/plugin.php index d7daeff..0a7462a 100644 --- a/plugin.php +++ b/plugin.php @@ -32,7 +32,7 @@ */ define( 'MR_FEATURE_FLAGS_PLUGIN_PATH', __FILE__ ); -if ( ! file_exists( Utils::class ) ) { +if ( ! file_exists( Flag::class ) ) { include_once __DIR__ . '/vendor/autoload.php'; } @@ -103,7 +103,7 @@ function mr_feature_flags_scripts_enqueue(): void { ); - $feature_flag_meta = get_option( Utils::$option_name ); + $feature_flag_meta = get_option( Flag::$option_name ); $flags_list = []; if ( is_array( $feature_flag_meta ) ) { @@ -157,7 +157,7 @@ function ( $links ) { * Uninstall method for the plugin. */ function mr_feature_flags_uninstall() { - delete_option( Utils::$option_name ); + delete_option( Flag::$option_name ); } diff --git a/tests/Unit/UtilsTest.php b/tests/Unit/FlagTest.php similarity index 87% rename from tests/Unit/UtilsTest.php rename to tests/Unit/FlagTest.php index 5a193f9..b21f70b 100644 --- a/tests/Unit/UtilsTest.php +++ b/tests/Unit/FlagTest.php @@ -9,7 +9,7 @@ -class UtilsTest extends \PHPUnit\Framework\TestCase +class FlagTest extends \PHPUnit\Framework\TestCase { public function setUp() : void { parent::setUp(); @@ -27,7 +27,7 @@ public function test_is_enabled_method_should_return_true_if_flag_name_present_a \Brain\Monkey\Functions\when('get_option')->justReturn($mock_option_value); - $result = Utils::is_enabled('Test'); + $result = Flag::is_enabled('Test'); $this->assertTrue($result); } @@ -36,7 +36,7 @@ public function test_is_enabled_method_should_return_false_if_no_flags_exist() { \Brain\Monkey\Functions\when('get_option')->justReturn($mock_option_value); - $result = Utils::is_enabled('Test'); + $result = Flag::is_enabled('Test'); $this->assertFalse($result); } @@ -45,7 +45,7 @@ public function test_is_enabled_method_should_return_false_if_flag_name_present_ \Brain\Monkey\Functions\when('get_option')->justReturn($mock_option_value); - $result = Utils::is_enabled('Test'); + $result = Flag::is_enabled('Test'); $this->assertFalse($result); } @@ -54,7 +54,7 @@ public function test_is_enabled_method_should_return_false_if_flag_name_nor_pres \Brain\Monkey\Functions\when('get_option')->justReturn($mock_option_value); - $result = Utils::is_enabled('Test1'); + $result = Flag::is_enabled('Test1'); $this->assertFalse($result); } diff --git a/tests/Unit/HelperTest.php b/tests/Unit/HelperTest.php index e72f74a..9290931 100644 --- a/tests/Unit/HelperTest.php +++ b/tests/Unit/HelperTest.php @@ -1,6 +1,6 @@ Date: Mon, 27 Mar 2023 13:27:53 +0100 Subject: [PATCH 03/12] adds huksy --- .husky/pre-commit | 6 +++--- package.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index f9a9eff..bfc028b 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ -yarn lint:js +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + yarn test -composer run lint:php -composer run test:php diff --git a/package.json b/package.json index c6f708d..97232ab 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-import": "^2.27.5", - "prettier": "^2.4.1" + "prettier": "^2.4.1", + "husky": "^8.0.0" }, "keywords": [], "author": "Mohan Raj ", From 3215159b8a4de1f681e4b11769898dd4faf79ec2 Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 13:29:36 +0100 Subject: [PATCH 04/12] adds js lint to husky --- .husky/pre-commit | 1 + 1 file changed, 1 insertion(+) diff --git a/.husky/pre-commit b/.husky/pre-commit index bfc028b..f465757 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -2,3 +2,4 @@ . "$(dirname -- "$0")/_/husky.sh" yarn test +yarn lint:js From e582ebb1dd72a8cded1ce2aad959527ef04ea37a Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 13:30:48 +0100 Subject: [PATCH 05/12] adds js lint to husky --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 97232ab..f0d6b33 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "start": "wp-scripts start", "build": "wp-scripts build", "lint:js": "wp-scripts lint-js", - "test": "wp-scripts test-unit-js", + "test:js": "wp-scripts test-unit-js", "test:watch": "wp-scripts test-unit-js --watch", "prepare": "husky install" }, From f565c6540599542402fd681a431da26943bfbd6c Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 13:37:46 +0100 Subject: [PATCH 06/12] adds js lint to husky --- package.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index f0d6b33..2e7a3a9 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,7 @@ "build": "wp-scripts build", "lint:js": "wp-scripts lint-js", "test:js": "wp-scripts test-unit-js", - "test:watch": "wp-scripts test-unit-js --watch", - "prepare": "husky install" + "test:watch": "wp-scripts test-unit-js --watch" }, "devDependencies": { "@testing-library/jest-dom": "^5.16.5", @@ -22,8 +21,7 @@ "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-import": "^2.27.5", - "prettier": "^2.4.1", - "husky": "^8.0.0" + "prettier": "^2.4.1" }, "keywords": [], "author": "Mohan Raj ", From f1eb8d5109e3b7360339b2df5bb8107e0835846c Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 13:38:37 +0100 Subject: [PATCH 07/12] adds js lint to husky --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2e7a3a9..5822c3f 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "build": "wp-scripts build", "lint:js": "wp-scripts lint-js", "test:js": "wp-scripts test-unit-js", - "test:watch": "wp-scripts test-unit-js --watch" + "test:watch": "wp-scripts test-unit-js --watch", + "prepare": "husky install" }, "devDependencies": { "@testing-library/jest-dom": "^5.16.5", From 2793f5ee9e268e84a649a23ba6f2bc448fc2745c Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 13:41:25 +0100 Subject: [PATCH 08/12] adds js lint to husky --- .husky/pre-commit | 3 +-- package.json | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) mode change 100644 => 100755 .husky/pre-commit diff --git a/.husky/pre-commit b/.husky/pre-commit old mode 100644 new mode 100755 index f465757..610c2a5 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,5 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -yarn test -yarn lint:js +npm test diff --git a/package.json b/package.json index 5822c3f..4374aff 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-import": "^2.27.5", - "prettier": "^2.4.1" + "prettier": "^2.4.1", + "husky": "^8.0.0" }, "keywords": [], "author": "Mohan Raj ", @@ -33,7 +34,6 @@ "@wordpress/data": "^8.6.0", "@wordpress/i18n": "^4.29.0", "@wordpress/notices": "^3.29.0", - "husky": "^8.0.3", "react": "17.0.2", "react-dom": "17.0.2", "react-syntax-highlighter": "^15.5.0", From 1c1469799c64970895c3b4a4dc59edece31d5259 Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 13:42:48 +0100 Subject: [PATCH 09/12] fix husky --- .husky/pre-commit | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 610c2a5..bb3e497 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,6 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -npm test +yarn lint:js && yarn test:js +composer run lint:php +composer run test:php From 338e7170774ab9a5be9dbc9a94d64174a9d8d139 Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 15:07:18 +0100 Subject: [PATCH 10/12] updates sdk snippets --- .DS_Store | Bin 8196 -> 0 bytes .gitignore | 1 + src/components/snippets/JsSnippet.tsx | 1 - src/components/snippets/PhpSnippet.tsx | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index fbedf6188fb53f61e72cb9cda6967c37b5b7ea98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHM&2G~`5S~ra)(HfPgw!5=LE=zF38-o%R4EGO&>K<^900X;9Fl-*N3qjTLQpQe z1MmijC*j1A2jKzWn_0KAokrq>P`fMb&c^<}{rP5WceX^NT4S$4v`Iu3D%jCQB-%`*cDho3rAJ_nF!Q!65jA>EQI7j7$6X$e|cBkyE|LvULwLtdldL#&|^4i6^~K``T0msUJ1)wCqbK*YX!_x3E5l-7CB_o z$W=O#@bfTBF1$Hhm6ZzDTQmXI#ke}0YKv>jI-5f{GeQ}wa^P+bjtd_@4&Dp{%QeL) zaM=_n>J4pj{{LwC`Tu3xw%LzSz$lPXK$Z5}`z>5J`|BWePr96I+o(sVTo^akRw!sB l9fy^49QOPlhUnXXGN+l?xwg21^6w7<%=ce}H_eq+;18%~eh~lw diff --git a/.gitignore b/.gitignore index 3064e04..61c9e30 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ build vendor yarn-error.log .phpunit.result.cache +.DS_Store diff --git a/src/components/snippets/JsSnippet.tsx b/src/components/snippets/JsSnippet.tsx index 396cba8..704eb1a 100644 --- a/src/components/snippets/JsSnippet.tsx +++ b/src/components/snippets/JsSnippet.tsx @@ -25,7 +25,6 @@ domReady(function () { float: 'right', position: 'relative', right: 40, - top: 24, }} /> diff --git a/src/components/snippets/PhpSnippet.tsx b/src/components/snippets/PhpSnippet.tsx index cd593c6..fcaeb2b 100644 --- a/src/components/snippets/PhpSnippet.tsx +++ b/src/components/snippets/PhpSnippet.tsx @@ -5,7 +5,7 @@ import Clipboard from '../common/Clipboard'; export default function ({ flag }: { flag: string }): JSX.Element { const phpSnippet = useMemo(() => { - return `if ( class_exists( '\\MR\\FeatureFlags\\Utils' ) && \\MR\\FeatureFlags\\Utils::is_enabled( '${flag}' ) ) { + return `if ( class_exists( '\\MR\\FeatureFlags\\Flag' ) && \\MR\\FeatureFlags\\Flag::is_enabled( '${flag}' ) ) { // php code goes here... }`; }, [flag]); From d0ecc721ad5d5c703d3bc68cfb7ec3749c53e1ea Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 15:15:39 +0100 Subject: [PATCH 11/12] changes command for github actions --- .github/workflows/js.yml | 2 +- .github/workflows/php.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml index f0d0b5f..8415c0c 100644 --- a/.github/workflows/js.yml +++ b/.github/workflows/js.yml @@ -24,4 +24,4 @@ jobs: - name: Test the app uses: borales/actions-yarn@v4 with: - cmd: test # will run `yarn test` command + cmd: test:js # will run `yarn test` command diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 49e09e7..e2651f4 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -34,7 +34,7 @@ jobs: run: composer install - name: PHP Lint - run: vendor/bin/phpcs + run: composer run lint:php - name: PHP test - run: vendor/bin/phpunit --testdox + run: composer run test:php From b632c1c08dbbcbde97c7e5b9f5ab4877b127ae8f Mon Sep 17 00:00:00 2001 From: Mohan Raj Date: Mon, 27 Mar 2023 15:19:27 +0100 Subject: [PATCH 12/12] changes github action composer update command --- .github/workflows/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index e2651f4..d75409f 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -31,7 +31,7 @@ jobs: restore-keys: ${{ runner.os }}-composer- - name: Install Composer dependencies - run: composer install + run: composer update - name: PHP Lint run: composer run lint:php