From 024ada822c1bc40958e594bb08707cf77d3397ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Wed, 22 Jan 2025 09:00:39 +0100 Subject: [PATCH] fix(core): Fix license CLI commands showing incorrect renewal setting (#12759) --- packages/cli/src/__tests__/license.test.ts | 16 +++++++++++++++- packages/cli/src/commands/license/clear.ts | 2 +- packages/cli/src/commands/license/info.ts | 2 +- packages/cli/src/license.ts | 14 ++++++++++---- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/packages/cli/src/__tests__/license.test.ts b/packages/cli/src/__tests__/license.test.ts index d48c361dcc1f8..0e26d0d81c513 100644 --- a/packages/cli/src/__tests__/license.test.ts +++ b/packages/cli/src/__tests__/license.test.ts @@ -251,6 +251,20 @@ describe('License', () => { expect(LicenseManager).toHaveBeenCalledWith(expect.objectContaining(expectedRenewalSettings)); }); + + it('when CLI command with N8N_LICENSE_AUTO_RENEW_ENABLED=true, should enable renewal', async () => { + const globalConfig = mock({ + license: { ...licenseConfig, autoRenewalEnabled: true }, + }); + + await new License(mockLogger(), mock(), mock(), mock(), globalConfig).init({ + isCli: true, + }); + + expect(LicenseManager).toHaveBeenCalledWith( + expect.objectContaining({ autoRenewEnabled: true, renewOnInit: true }), + ); + }); }); describe('reinit', () => { @@ -262,7 +276,7 @@ describe('License', () => { await license.reinit(); - expect(initSpy).toHaveBeenCalledWith(true); + expect(initSpy).toHaveBeenCalledWith({ forceRecreate: true }); expect(LicenseManager.prototype.reset).toHaveBeenCalled(); expect(LicenseManager.prototype.initialize).toHaveBeenCalled(); diff --git a/packages/cli/src/commands/license/clear.ts b/packages/cli/src/commands/license/clear.ts index 03a2ea4dd4726..732401ed47fe4 100644 --- a/packages/cli/src/commands/license/clear.ts +++ b/packages/cli/src/commands/license/clear.ts @@ -16,7 +16,7 @@ export class ClearLicenseCommand extends BaseCommand { // Attempt to invoke shutdown() to force any floating entitlements to be released const license = Container.get(License); - await license.init(); + await license.init({ isCli: true }); try { await license.shutdown(); } catch { diff --git a/packages/cli/src/commands/license/info.ts b/packages/cli/src/commands/license/info.ts index cc99e925f7165..f99648d0d5881 100644 --- a/packages/cli/src/commands/license/info.ts +++ b/packages/cli/src/commands/license/info.ts @@ -11,7 +11,7 @@ export class LicenseInfoCommand extends BaseCommand { async run() { const license = Container.get(License); - await license.init(); + await license.init({ isCli: true }); this.logger.info('Printing license information:\n' + license.getInfo()); } diff --git a/packages/cli/src/license.ts b/packages/cli/src/license.ts index ed9b66a1a6818..0b02e7da1a79c 100644 --- a/packages/cli/src/license.ts +++ b/packages/cli/src/license.ts @@ -43,7 +43,10 @@ export class License { this.logger = this.logger.scoped('license'); } - async init(forceRecreate = false) { + async init({ + forceRecreate = false, + isCli = false, + }: { forceRecreate?: boolean; isCli?: boolean } = {}) { if (this.manager && !forceRecreate) { this.logger.warn('License manager already initialized or shutting down'); return; @@ -73,10 +76,13 @@ export class License { const { isLeader } = this.instanceSettings; const { autoRenewalEnabled } = this.globalConfig.license; + const eligibleToRenew = isCli || isLeader; - const shouldRenew = isLeader && autoRenewalEnabled; + const shouldRenew = eligibleToRenew && autoRenewalEnabled; - if (isLeader && !autoRenewalEnabled) this.logger.warn(LICENSE_RENEWAL_DISABLED_WARNING); + if (eligibleToRenew && !autoRenewalEnabled) { + this.logger.warn(LICENSE_RENEWAL_DISABLED_WARNING); + } try { this.manager = new LicenseManager({ @@ -390,7 +396,7 @@ export class License { async reinit() { this.manager?.reset(); - await this.init(true); + await this.init({ forceRecreate: true }); this.logger.debug('License reinitialized'); } }