diff --git a/.github/workflows/flarum-package-manager-backend.yml b/.github/workflows/flarum-package-manager-backend.yml new file mode 100644 index 000000000..bb82c74d3 --- /dev/null +++ b/.github/workflows/flarum-package-manager-backend.yml @@ -0,0 +1,15 @@ +name: Package Manager PHP + +on: [workflow_dispatch, push, pull_request] + +# The reusable workflow definitions will be moved to the `flarum/framework` repo soon. +# This will break your current script. +# When this happens, run `flarum-cli audit infra --fix` to update your infrastructure. + +jobs: + run: + uses: flarum/.github/.github/workflows/REUSABLE_backend.yml@main + with: + enable_backend_testing: true + + backend_directory: ./extensions/package-manager diff --git a/extensions/package-manager/composer.json b/extensions/package-manager/composer.json index d8e7493d0..449c0a4e7 100755 --- a/extensions/package-manager/composer.json +++ b/extensions/package-manager/composer.json @@ -23,7 +23,7 @@ }, "require": { "flarum/core": "^1.0.0", - "composer/composer": "^2.0" + "composer/composer": "^2.3" }, "require-dev": { "flarum/testing": "^1.0.0", @@ -86,7 +86,7 @@ "test:integration": "phpunit -c tests/phpunit.integration.xml", "test:setup": [ "@php tests/integration/setup.php", - "cd $FLARUM_TEST_TMP_DIR_LOCAL && composer install" + "cd ${FLARUM_TEST_TMP_DIR_LOCAL:-${FLARUM_TEST_TMP_DIR:-./tests/integration/tmp}} && composer install" ] }, "scripts-descriptions": { diff --git a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php index 2b396a0c8..8bc9a1acd 100755 --- a/extensions/package-manager/src/Command/CheckForUpdatesHandler.php +++ b/extensions/package-manager/src/Command/CheckForUpdatesHandler.php @@ -58,7 +58,7 @@ class CheckForUpdatesHandler $actor->assertAdmin(); $firstOutput = $this->runComposerCommand(false); - $firstOutput = json_decode($firstOutput, true); + $firstOutput = json_decode($this->cleanJson($firstOutput), true); $majorUpdates = false; @@ -71,7 +71,7 @@ class CheckForUpdatesHandler if ($majorUpdates) { $secondOutput = $this->runComposerCommand(true); - $secondOutput = json_decode($secondOutput, true); + $secondOutput = json_decode($this->cleanJson($secondOutput), true); } if (! isset($secondOutput)) { @@ -101,6 +101,15 @@ class CheckForUpdatesHandler ->save(); } + /** + * Composer can sometimes return text above the JSON. + * This method tries to remove such occurences. + */ + protected function cleanJson(string $composerOutput): string + { + return preg_replace('/^[^{]+\n({.*)/ms', '$1', $composerOutput); + } + /** * @throws ComposerCommandFailedException */ diff --git a/extensions/package-manager/tests/integration/SetupComposer.php b/extensions/package-manager/tests/integration/SetupComposer.php index 9a1080ce4..fb021faf9 100644 --- a/extensions/package-manager/tests/integration/SetupComposer.php +++ b/extensions/package-manager/tests/integration/SetupComposer.php @@ -15,27 +15,11 @@ class SetupComposer { use UsesTmpDir; - private $config = [ - 'require' => [ - 'flarum/core' => '1.0.0', - 'flarum/tags' => '1.0.3', - 'flarum/lang-english' => '*', - ], - 'config' => [ - 'preferred-install' => 'dist', - 'sort-packages' => true, - ], - 'repositories' => [ - [ - 'type' => 'path', - 'url' => __DIR__.'/tmp/packages/*', - ] - ] - ]; + private $config; public function __construct(array $config = null) { - $this->config = array_merge($this->config, $config ?? []); + $this->config = $config; } public function run() @@ -44,7 +28,7 @@ class SetupComposer $composerLock = $this->tmpDir().'/composer.lock'; $packages = $this->tmpDir().'/packages'; - file_put_contents($composerJson, json_encode($this->config, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); + file_put_contents($composerJson, json_encode($this->getConfig(), JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); if (! file_exists($packages)) { mkdir($packages); @@ -53,5 +37,28 @@ class SetupComposer if (file_exists($composerLock)) { unlink($composerLock); } + + echo 'composer.json created with testing packages directory.'; + } + + private function getConfig(): array + { + return array_merge([ + 'require' => [ + 'flarum/core' => '1.0.0', + 'flarum/tags' => '1.0.3', + 'flarum/lang-english' => '*', + ], + 'config' => [ + 'preferred-install' => 'dist', + 'sort-packages' => true, + ], + 'repositories' => [ + [ + 'type' => 'path', + 'url' => realpath($this->tmpDir()).'/packages/*', + ] + ] + ], $this->config ?? []); } } diff --git a/extensions/package-manager/tests/phpunit.integration.xml b/extensions/package-manager/tests/phpunit.integration.xml index 2d2b64c39..89f91a4d1 100644 --- a/extensions/package-manager/tests/phpunit.integration.xml +++ b/extensions/package-manager/tests/phpunit.integration.xml @@ -19,10 +19,7 @@ ./integration - ./integration/tmp + ./integration/tmp - - -