From 9a46f892ab99b5cdc6be868b34a946b0fd737a29 Mon Sep 17 00:00:00 2001 From: Darko Gjorgjijoski Date: Sun, 4 Aug 2024 03:04:10 +0200 Subject: [PATCH] Add support for release channels (insider release channel) in Updater --- app/Http/Controllers/AppVersionController.php | 9 +++++- .../Admin/Update/CheckVersionController.php | 5 +-- app/Space/Updater.php | 8 ++--- lang/en.json | 1 + .../admin/views/settings/UpdateAppSetting.vue | 32 +++++++++++++------ 5 files changed, 39 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/AppVersionController.php b/app/Http/Controllers/AppVersionController.php index 3978fb3c..84cc9ad7 100644 --- a/app/Http/Controllers/AppVersionController.php +++ b/app/Http/Controllers/AppVersionController.php @@ -10,14 +10,21 @@ class AppVersionController extends Controller /** * Handle the incoming request. * - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\JsonResponse */ public function __invoke(Request $request) { $version = Setting::getSetting('version'); + $channel = Setting::getSetting('updater_channel'); + if (is_null($channel)) { + $channel = 'stable'; + Setting::setSetting('updater_channel', 'stable'); // default. + } + return response()->json([ 'version' => $version, + 'channel' => $channel, ]); } } diff --git a/app/Http/Controllers/V1/Admin/Update/CheckVersionController.php b/app/Http/Controllers/V1/Admin/Update/CheckVersionController.php index 03e75d6d..a3bbc2ac 100644 --- a/app/Http/Controllers/V1/Admin/Update/CheckVersionController.php +++ b/app/Http/Controllers/V1/Admin/Update/CheckVersionController.php @@ -25,8 +25,9 @@ class CheckVersionController extends Controller set_time_limit(600); // 10 minutes - $json = Updater::checkForUpdate(Setting::getSetting('version')); + $channel = $request->get('channel', 'stable'); + $response = Updater::checkForUpdate(Setting::getSetting('version'), $channel); - return response()->json($json); + return response()->json($response); } } diff --git a/app/Space/Updater.php b/app/Space/Updater.php index fce325b0..5b0d7310 100644 --- a/app/Space/Updater.php +++ b/app/Space/Updater.php @@ -14,19 +14,19 @@ class Updater { use SiteApi; - public static function checkForUpdate($installed_version) + public static function checkForUpdate($installed_version, $updater_channel = 'stable') { $data = null; - $url = 'releases/update-check/'.$installed_version; + $url = sprintf('releases/update-check/%s?channel=%s', $installed_version, $updater_channel); $response = static::getRemote($url, ['timeout' => 100, 'track_redirects' => true]); + $data = (object) ['success' => false, 'release' => null]; if ($response && ($response->getStatusCode() == 200)) { $data = $response->getBody()->getContents(); + $data = json_decode($data); } - $data = json_decode($data); - if ($data->success && $data->release && property_exists($data->release, 'extensions')) { $extensions = []; foreach ($data->release->extensions as $extension) { diff --git a/lang/en.json b/lang/en.json index 58c95df4..9ee17e8c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1272,6 +1272,7 @@ "title": "Update App", "description": "You can easily update InvoiceShelf by checking for a new update by clicking the button below", "check_update": "Check for updates", + "insider_consent" : "Opt-in for Insider releases. Recommended for testing purposes only.", "avail_update": "New Update available", "next_version": "Next version", "requirements": "Requirements", diff --git a/resources/scripts/admin/views/settings/UpdateAppSetting.vue b/resources/scripts/admin/views/settings/UpdateAppSetting.vue index e5948bbb..90e7a370 100644 --- a/resources/scripts/admin/views/settings/UpdateAppSetting.vue +++ b/resources/scripts/admin/views/settings/UpdateAppSetting.vue @@ -8,11 +8,12 @@ {{ $t('settings.update_app.current_version') }} -
+
- {{ currentVersion }} + > + {{ currentVersion }} +
+
+ +
+
{ axios.get('/api/v1/app/version').then((res) => { currentVersion.value = res.data.version + insiderChannel.value = res.data.channel === 'insider' }) // comapnyStore @@ -323,7 +332,11 @@ function statusClass(step) { async function checkUpdate() { try { isCheckingforUpdate.value = true - let response = await axios.get('/api/v1/check/update') + let response = await axios.get('/api/v1/check/update', { + params: { + channel: insiderChannel ? 'insider' : '' + } + }); isCheckingforUpdate.value = false if (!response.data.release) { notificationStore.showNotification({ @@ -342,6 +355,7 @@ async function checkUpdate() { requiredExtentions.value = response.data.release.extensions isUpdateAvailable.value = true minPhpVesrion.value = response.data.release.min_php_version + deletedFiles.value = response.data.release.deleted_files } } catch (e) { isUpdateAvailable.value = false