From f2dd5cc75ee7e55bcdfb7c2e9459a7aa8f198b12 Mon Sep 17 00:00:00 2001 From: Kaname <56084970+kaname-png@users.noreply.github.com> Date: Tue, 8 Nov 2022 12:39:41 -0600 Subject: [PATCH 01/13] chore: add jda icon for lavalink service --- apps/ui/static/icons/jda.png | Bin 0 -> 28418 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/ui/static/icons/jda.png diff --git a/apps/ui/static/icons/jda.png b/apps/ui/static/icons/jda.png new file mode 100644 index 0000000000000000000000000000000000000000..114458bf28106dd9a0856a629e61a096c9ac9ef6 GIT binary patch literal 28418 zcmV)lK%c*fP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 z 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 Date: Thu, 10 Nov 2022 13:57:34 +0100 Subject: [PATCH 02/13] feat: rollback coolify --- apps/api/src/lib/common.ts | 2 +- .../src/lib/components/UpdateAvailable.svelte | 4 +- apps/ui/src/routes/settings/coolify.svelte | 81 ++++++++++++++++--- package.json | 2 +- 4 files changed, 77 insertions(+), 12 deletions(-) diff --git a/apps/api/src/lib/common.ts b/apps/api/src/lib/common.ts index a96e36e91..dfdde81d2 100644 --- a/apps/api/src/lib/common.ts +++ b/apps/api/src/lib/common.ts @@ -17,7 +17,7 @@ import { day } from './dayjs'; import { saveBuildLog } from './buildPacks/common'; import { scheduler } from './scheduler'; -export const version = '3.11.4'; +export const version = '3.11.5'; export const isDev = process.env.NODE_ENV === 'development'; const algorithm = 'aes-256-ctr'; diff --git a/apps/ui/src/lib/components/UpdateAvailable.svelte b/apps/ui/src/lib/components/UpdateAvailable.svelte index 9c4fda2be..5eeacab8b 100644 --- a/apps/ui/src/lib/components/UpdateAvailable.svelte +++ b/apps/ui/src/lib/components/UpdateAvailable.svelte @@ -16,9 +16,11 @@ updateStatus.loading = true; try { if (dev) { - await asyncSleep(4000); + localStorage.setItem('lastVersion', $appSession.version); + await asyncSleep(1000); return window.location.reload(); } else { + localStorage.setItem('lastVersion', $appSession.version); await post(`/update`, { type: 'update', latestVersion }); addToast({ message: 'Update completed.

Waiting for the new version to start...', diff --git a/apps/ui/src/routes/settings/coolify.svelte b/apps/ui/src/routes/settings/coolify.svelte index cf3c21ddb..2c421751b 100644 --- a/apps/ui/src/routes/settings/coolify.svelte +++ b/apps/ui/src/routes/settings/coolify.svelte @@ -24,6 +24,7 @@ import { addToast, appSession, features } from '$lib/store'; import { asyncSleep, errorNotification, getDomain } from '$lib/common'; import Explainer from '$lib/components/Explainer.svelte'; + import { dev } from '$app/env'; let isAPIDebuggingEnabled = settings.isAPIDebuggingEnabled; let isRegistrationEnabled = settings.isRegistrationEnabled; @@ -47,7 +48,50 @@ proxyMigration: false, restart: false }; + let rollbackVersion = localStorage.getItem('lastVersion'); + async function rollback() { + const sure = confirm(`Are you sure you want rollback Coolify to ${rollbackVersion}?`); + if (sure) { + try { + if (dev) { + console.log('rolling back to', rollbackVersion); + await asyncSleep(4000); + return window.location.reload(); + } else { + await post(`/update`, { type: 'update', latestVersion: rollbackVersion }); + addToast({ + message: 'Update completed.

Waiting for the new version to start...', + type: 'success' + }); + + let reachable = false; + let tries = 0; + do { + await asyncSleep(4000); + try { + await get(`/undead`); + reachable = true; + } catch (error) { + reachable = false; + } + if (reachable) break; + tries++; + } while (!reachable || tries < 120); + addToast({ + message: 'New version reachable. Reloading...', + type: 'success' + }); + await asyncSleep(3000); + return window.location.reload(); + } + } catch (error) { + return errorNotification(error); + } finally { + loading.remove = false; + } + } + } async function removeFqdn() { if (fqdn) { loading.remove = true; @@ -281,6 +325,17 @@ {/if} +
+ !isFqdnSet && changeSettings('dualCerts')} + /> +
Default Redirect URL @@ -300,16 +355,24 @@ placeholder="{$t('forms.eg')}: https://coolify.io" />
-
- !isFqdnSet && changeSettings('dualCerts')} + +
+
+ Rollback to a specific version + +
+ +
diff --git a/package.json b/package.json index 9aff5bc8a..97e2f6861 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "coolify", "description": "An open-source & self-hostable Heroku / Netlify alternative.", - "version": "3.11.4", + "version": "3.11.5", "license": "Apache-2.0", "repository": "github:coollabsio/coolify", "scripts": { From fba305020b7dea2907d738ebfbb77a22a44556c7 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Thu, 10 Nov 2022 14:00:01 +0100 Subject: [PATCH 03/13] fix: for rollback --- apps/ui/src/routes/settings/coolify.svelte | 84 +++++++++++----------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/apps/ui/src/routes/settings/coolify.svelte b/apps/ui/src/routes/settings/coolify.svelte index 2c421751b..857a4aa63 100644 --- a/apps/ui/src/routes/settings/coolify.svelte +++ b/apps/ui/src/routes/settings/coolify.svelte @@ -51,44 +51,46 @@ let rollbackVersion = localStorage.getItem('lastVersion'); async function rollback() { - const sure = confirm(`Are you sure you want rollback Coolify to ${rollbackVersion}?`); - if (sure) { - try { - if (dev) { - console.log('rolling back to', rollbackVersion); - await asyncSleep(4000); - return window.location.reload(); - } else { - await post(`/update`, { type: 'update', latestVersion: rollbackVersion }); - addToast({ - message: 'Update completed.

Waiting for the new version to start...', - type: 'success' - }); - - let reachable = false; - let tries = 0; - do { + if (rollbackVersion) { + const sure = confirm(`Are you sure you want rollback Coolify to ${rollbackVersion}?`); + if (sure) { + try { + if (dev) { + console.log('rolling back to', rollbackVersion); await asyncSleep(4000); - try { - await get(`/undead`); - reachable = true; - } catch (error) { - reachable = false; - } - if (reachable) break; - tries++; - } while (!reachable || tries < 120); - addToast({ - message: 'New version reachable. Reloading...', - type: 'success' - }); - await asyncSleep(3000); - return window.location.reload(); + return window.location.reload(); + } else { + await post(`/update`, { type: 'update', latestVersion: rollbackVersion }); + addToast({ + message: 'Update completed.

Waiting for the new version to start...', + type: 'success' + }); + + let reachable = false; + let tries = 0; + do { + await asyncSleep(4000); + try { + await get(`/undead`); + reachable = true; + } catch (error) { + reachable = false; + } + if (reachable) break; + tries++; + } while (!reachable || tries < 120); + addToast({ + message: 'New version reachable. Reloading...', + type: 'success' + }); + await asyncSleep(3000); + return window.location.reload(); + } + } catch (error) { + return errorNotification(error); + } finally { + loading.remove = false; } - } catch (error) { - return errorNotification(error); - } finally { - loading.remove = false; } } } @@ -361,7 +363,7 @@ Rollback to a specific version
- +
From 409a5b9f99fa073fbf60df3ab69398fe96d2efba Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Thu, 10 Nov 2022 14:08:02 +0100 Subject: [PATCH 04/13] fix: n8n and weblate icon --- .../ui/src/lib/components/svg/services/ServiceIcons.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/ui/src/lib/components/svg/services/ServiceIcons.svelte b/apps/ui/src/lib/components/svg/services/ServiceIcons.svelte index d47411c1c..f0c197051 100644 --- a/apps/ui/src/lib/components/svg/services/ServiceIcons.svelte +++ b/apps/ui/src/lib/components/svg/services/ServiceIcons.svelte @@ -1,7 +1,6 @@