@@ -276,8 +276,36 @@ private function install_pra( $data, $tool_path ) {
276276 $ download_path = $ temp_dir . 'pra.zip ' ;
277277 $ unzip_folder = $ temp_dir . '/pra ' ;
278278 $ this ->fs ->remove ( [ $ download_path , $ unzip_folder ] );
279- $ vendor_zip = $ temp_dir . 'vendor.zip ' ;
280- $ download_url = str_replace ( '{version} ' , $ data ['version ' ], $ data ['url ' ] );
279+ $ vendor_zip = $ temp_dir . 'vendor.zip ' ;
280+
281+ // Fetch the latest release info from GitHub API to get the zipball URL.
282+ if ( 'latest ' === $ data ['version ' ] ) {
283+ $ download_url = null ;
284+ $ release_info = @file_get_contents ( $ data ['url ' ], false , stream_context_create ( [
285+ 'http ' => [
286+ 'header ' => 'User-Agent: EasyEngine ' ,
287+ ],
288+ ] ) );
289+
290+ if ( ! empty ( $ release_info ) ) {
291+ $ release_data = json_decode ( $ release_info , true );
292+ if ( ! empty ( $ release_data ['zipball_url ' ] ) ) {
293+ $ download_url = $ release_data ['zipball_url ' ];
294+ }
295+ }
296+
297+ // Fallback to a known stable version if API fails.
298+ if ( empty ( $ download_url ) ) {
299+ if ( empty ( $ data ['fallback_version ' ] ) ) {
300+ EE ::error ( 'Unable to fetch latest phpRedisAdmin release info from GitHub and no fallback version configured. ' );
301+ }
302+ EE ::warning ( 'Unable to fetch latest phpRedisAdmin release info from GitHub. Falling back to version ' . $ data ['fallback_version ' ] . '. ' );
303+ $ download_url = 'https://github.com/erikdubbelboer/phpRedisAdmin/archive/v ' . $ data ['fallback_version ' ] . '.zip ' ;
304+ }
305+ } else {
306+ $ download_url = str_replace ( '{version} ' , $ data ['version ' ], $ data ['url ' ] );
307+ }
308+
281309 download ( $ download_path , $ download_url );
282310 extract_zip ( $ download_path , $ unzip_folder );
283311 $ zip_folder_name = scandir ( $ unzip_folder );
0 commit comments