From c902801e1fa052673527e81e1b558b45aa72abc4 Mon Sep 17 00:00:00 2001 From: grandeljay Date: Sat, 4 Nov 2023 17:07:28 +0100 Subject: [PATCH 1/2] feat: use latest archive tag/version --- src/Classes/ModuleCreator.php | 49 ++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/src/Classes/ModuleCreator.php b/src/Classes/ModuleCreator.php index 217a9128..b91fe639 100644 --- a/src/Classes/ModuleCreator.php +++ b/src/Classes/ModuleCreator.php @@ -35,7 +35,7 @@ public function createModule($vendorPrefix, $vendorName, $moduleName) $moduleConstName = str_replace('-', '_', strtoupper('MODULE_' . $vendorPrefix . '_' . $moduleName)); $this->createFolders($archiveName, $fileName, $vendorName, $moduleNameCamelCase); - $this->createModuleInfoJsonFile($archiveName, $moduleName); + $this->createModuleInfoJsonFile($vendorName, $moduleName); $this->createSystemModuleFile($archiveName, $fileName, $className, $moduleConstName); $this->createSystemModuleLanguageDeFile($archiveName, $fileName, $moduleConstName, $vendorName); $this->createSystemModuleLanguageEnFile($archiveName, $fileName, $moduleConstName, $vendorName); @@ -76,8 +76,49 @@ public function createFolders($archiveName, $fileName, $vendorName, $moduleNameC @mkdir(App::getModulesRoot() . '/' . $archiveName . '/src-mmlc/Classes'); } - public function createModuleInfoJsonFile($archiveName, $moduleName) + private function getLatestVersion(string $archiveName): string { + $version = '0.1.0'; + + /** + * Create GitHub API reqest. + * + * GitHub requries a `User-Agent` header or it will respond with HTTP + * 403. + */ + $requestOptions = [ + 'http' => [ + 'header' => [ + 'User-Agent: PHP', + ], + ], + ]; + $requestContext = stream_context_create($requestOptions); + $requestResponse = file_get_contents( + sprintf( + 'https://api.github.com/repos/%s/tags', + $archiveName + ), + $use_include_path = false, + $requestContext + ); + + if (false !== $requestResponse) { + $archiveTags = json_decode($requestResponse, $associative = true); + $archiveTagsLatest = reset($archiveTags); + + if (isset($archiveTagsLatest['name'])) { + $version = $archiveTagsLatest['name']; + } + } + + return $version; + } + + public function createModuleInfoJsonFile($vendorName, $moduleName) + { + $archiveName = $vendorName . '/' . $moduleName; + $info = [ 'name' => $moduleName, 'archiveName' => $archiveName, @@ -96,8 +137,8 @@ public function createModuleInfoJsonFile($archiveName, $moduleName) 'price' => '', 'require' => [ - 'composer/autoload' => '^1.1.0', - 'robinthehood/modified-std-module' => '^0.1.0' + 'composer/autoload' => '^' . $this->getLatestVersion('RobinTheHood/modified-composer-autoload'), + 'robinthehood/modified-std-module' => '^' . $this->getLatestVersion('RobinTheHood/modified-std-module'), ], 'modifiedCompatibility' => [ From 599ccd74bf5b00425e2e1047f0ef661392ba18e2 Mon Sep 17 00:00:00 2001 From: grandeljay Date: Sat, 4 Nov 2023 22:36:29 +0100 Subject: [PATCH 2/2] feat: get module version from mmlc instead of github --- src/Classes/ModuleCreator.php | 37 +++++++---------------------------- 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/src/Classes/ModuleCreator.php b/src/Classes/ModuleCreator.php index b91fe639..f097c2ba 100644 --- a/src/Classes/ModuleCreator.php +++ b/src/Classes/ModuleCreator.php @@ -14,6 +14,7 @@ namespace RobinTheHood\ModifiedModuleLoaderClient; use RobinTheHood\ModifiedModuleLoaderClient\App; +use RobinTheHood\ModifiedModuleLoaderClient\Loader\RemoteModuleLoader; class ModuleCreator { @@ -78,41 +79,17 @@ public function createFolders($archiveName, $fileName, $vendorName, $moduleNameC private function getLatestVersion(string $archiveName): string { - $version = '0.1.0'; + $remoteModuleLoader = RemoteModuleLoader::create(); + $module = $remoteModuleLoader->loadLatestVersionByArchiveName($archiveName); /** - * Create GitHub API reqest. - * - * GitHub requries a `User-Agent` header or it will respond with HTTP - * 403. + * Usually the module does not exist yet, so `$module` is `null`. */ - $requestOptions = [ - 'http' => [ - 'header' => [ - 'User-Agent: PHP', - ], - ], - ]; - $requestContext = stream_context_create($requestOptions); - $requestResponse = file_get_contents( - sprintf( - 'https://api.github.com/repos/%s/tags', - $archiveName - ), - $use_include_path = false, - $requestContext - ); - - if (false !== $requestResponse) { - $archiveTags = json_decode($requestResponse, $associative = true); - $archiveTagsLatest = reset($archiveTags); - - if (isset($archiveTagsLatest['name'])) { - $version = $archiveTagsLatest['name']; - } + if (null === $module) { + return '0.1.0'; } - return $version; + return $module->getVersion(); } public function createModuleInfoJsonFile($vendorName, $moduleName)