From 2d9ffd04639ad727d3af9a2478d160376d6b76b2 Mon Sep 17 00:00:00 2001 From: Roman Kostenko Date: Tue, 20 Oct 2026 16:49:22 +0300 Subject: [PATCH 1/2] Add missing Trendz 1.15.0.6 and 1.15.1.1 and a Kubernetes upgrade job for 1.15+ --- .../TrendzK8sJobSteps.astro | 74 +++++++++++++++++++ .../TrendzUpgradeSteps.astro | 65 ++++++++-------- .../docs/trendz/releases/v1-15-x.mdx | 24 ++++++ src/models/trendz-releases-table.ts | 2 + src/models/trendz-upgrade-instructions.ts | 45 +++++++---- 5 files changed, 167 insertions(+), 43 deletions(-) create mode 100644 src/components/upgrade-instructions/TrendzK8sJobSteps.astro diff --git a/src/components/upgrade-instructions/TrendzK8sJobSteps.astro b/src/components/upgrade-instructions/TrendzK8sJobSteps.astro new file mode 100644 index 0000000000..072581cd94 --- /dev/null +++ b/src/components/upgrade-instructions/TrendzK8sJobSteps.astro @@ -0,0 +1,74 @@ +--- +import { Code } from '@astrojs/starlight/components'; + +interface Props { + version: string; +} + +const { version } = Astro.props; + +// The image reads the current version from the database; the Deployment never runs the upgrade itself +const k8sUpgradeJob = `apiVersion: batch/v1 +kind: Job +metadata: + name: trendz-upgrade + namespace: trendz +spec: + backoffLimit: 0 + template: + spec: + restartPolicy: Never + containers: + - name: trendz-upgrade + image: thingsboard/trendz:${version} + env: + - name: UPGRADE_TRENDZ + value: "true" + envFrom: + - configMapRef: + name: trendz-app-db-config + volumeMounts: + - name: trendz-app-config + mountPath: /trendz-config-files + volumes: + - name: trendz-app-config + configMap: + name: trendz-app-config + items: + - key: trendz.conf + path: trendz.conf + - key: logback.xml + path: logback.xml`; +const k8sJobLogOutput = + 'Start upgrading Trendz from version …\n…\nCurrent version is …, upgrade is not needed.'; +--- + +

Update image versions

+

Set the image versions to {version}. Do not apply the files yet.

+ + +

Stop Trendz

+ + +

Create the upgrade job

+ +

The ConfigMap names, keys and namespace must match your trendz-app-deployment.yml. Installations created before 1.15 use the keys conf and logback.

+ +

Run the upgrade job

+ + +

Verify the upgrade

+ +

Expected output:

+ + +

Delete the job

+ + +

Start Trendz

+ +

If you run more than one pod, restore the replica count:

+ diff --git a/src/components/upgrade-instructions/TrendzUpgradeSteps.astro b/src/components/upgrade-instructions/TrendzUpgradeSteps.astro index 05aea92653..2c1c70f02a 100644 --- a/src/components/upgrade-instructions/TrendzUpgradeSteps.astro +++ b/src/components/upgrade-instructions/TrendzUpgradeSteps.astro @@ -3,6 +3,7 @@ import { Code } from '@astrojs/starlight/components'; import { getTrendzUpgradeStepVersions } from '~/models/trendz-upgrade-instructions'; import { getUpgradeHeading } from '~/models/upgrade-shared'; import ConfigFileNote from './ConfigFileNote.astro'; +import TrendzK8sJobSteps from '@components/upgrade-instructions/TrendzK8sJobSteps.astro'; interface Props { platform: 'ubuntu' | 'centos' | 'windows' | 'docker' | 'kubernetes'; @@ -70,6 +71,8 @@ const javaGuideLink =

Select the correct kube-config context before running any commands:

+

Back up the database

+

Back up the trendz database with pg_dump or your PostgreSQL provider's backup tools.

)} @@ -278,43 +281,45 @@ const javaGuideLink = -

Reduce pods count

-

The deployment must have exactly one running pod for the upgrade to succeed:

- - - {v.fromVersion && ( + {v.fromVersion ? ( <> +

Reduce pod count

+

Scale the deployment to one pod:

+ +

Create upgrade flag file

-

Get the current pod name:

+

Get the pod name:

-

Create the .upgradeversion flag file inside the pod, replacing <POD_NAME> with the name from the previous command. Set the version to the one you are currently running:

+

Create the flag file in the pod. Replace <POD_NAME> and set the version you are currently running:

- - - )} -

Update image version

-

Open trendz-app-deployment.yml and update the image field to thingsboard/trendz:{v.version}:

- +

Update image version

+

In trendz-app-deployment.yml, set the image to thingsboard/trendz:{v.version} and apply it:

+ -

Apply the deployment

-

Apply the updated configuration and wait until the pod is ready:

- +

Verify the upgrade

+

Check the pod logs:

+ +

Expected output:

+ -

Verify the upgrade

-

Stream the pod logs to confirm the upgrade ran successfully:

- -

Look for the following lines:

- - -

Restore pods count

-

After the upgrade is complete, restore your preferred replica count:

- +

Restore pod count

+ + + ) : ( + <> + {v.patch && v.baseVersion && ( + + )} + + + )} )} diff --git a/src/content/_includes/docs/trendz/releases/v1-15-x.mdx b/src/content/_includes/docs/trendz/releases/v1-15-x.mdx index 71c7f54f1b..3562a52c2b 100644 --- a/src/content/_includes/docs/trendz/releases/v1-15-x.mdx +++ b/src/content/_includes/docs/trendz/releases/v1-15-x.mdx @@ -25,6 +25,15 @@ --- +## v1.15.1.1 (Apr 28, 2026) + +**Bug fixes:** + +- Fixed scatter plot rendering. +- Fixed the chart options dialog. + +--- + ## v1.15.1 (Apr 15, 2026) **New features:** @@ -45,6 +54,21 @@ --- +## v1.15.0.6 (Mar 25, 2026) + +**Improvements:** + +- Improved Metric Explorer performance. + +**Bug fixes:** + +- Fixed export to dashboard with aliases. +- Fixed report REST API authentication. +- Fixed ThingsBoard version detection. +- Fixed attribute loading. + +--- + ## v1.15.0.5 (Feb 26, 2026) **Bug fixes:** diff --git a/src/models/trendz-releases-table.ts b/src/models/trendz-releases-table.ts index 851df3cec2..0bb7158dcf 100644 --- a/src/models/trendz-releases-table.ts +++ b/src/models/trendz-releases-table.ts @@ -67,7 +67,9 @@ export const TRENDZ_RELEASE_FAMILIES: TrendzReleaseFamily[] = [ patches: [ { version: 'v1.15.2.1', date: 'Jun 24, 2026' }, { version: 'v1.15.2', date: 'May 15, 2026' }, + { version: 'v1.15.1.1', date: 'Apr 28, 2026' }, { version: 'v1.15.1', date: 'Apr 15, 2026' }, + { version: 'v1.15.0.6', date: 'Mar 25, 2026' }, { version: 'v1.15.0.5', date: 'Feb 26, 2026' }, { version: 'v1.15.0.4', date: 'Feb 9, 2026' }, { version: 'v1.15.0', date: 'Jan 20, 2026' }, diff --git a/src/models/trendz-upgrade-instructions.ts b/src/models/trendz-upgrade-instructions.ts index 4ce657d652..96e2fe93b5 100644 --- a/src/models/trendz-upgrade-instructions.ts +++ b/src/models/trendz-upgrade-instructions.ts @@ -1,6 +1,6 @@ // Relative import on purpose: keeps this module loadable from the Astro // config chain, which resolves modules before tsconfig path aliases apply. -import { assertNewestFirst, latestPatchPerBaseline } from './upgrade-shared.ts'; +import { assertNewestFirst } from './upgrade-shared.ts'; export interface TrendzUpgradeVersion { /** Raw version string, e.g. "1.15.0.4", "1.13.2", "1.10.3-HF7" */ @@ -52,24 +52,19 @@ export function getTrendzFamilySlug(family: string): string { } /** - * Versions to render on a Trendz upgrade-instruction page (optionally scoped - * to a family). Only the newest patch of each `baseVersion` is kept; entries - * without a `baseVersion` are always kept. Input is assumed newest-first, - * matching the ordering of `TRENDZ_UPGRADE_VERSIONS`. + * Versions to render on a Trendz upgrade-instruction page, optionally scoped + * to a family. Every listed version gets its own section, so a patch stays on + * the page after a newer patch of the same `baseVersion` ships. */ export function getTrendzUpgradeStepVersions(family?: string): TrendzUpgradeVersion[] { - const scoped = family - ? TRENDZ_UPGRADE_VERSIONS.filter((v) => v.family === family) - : TRENDZ_UPGRADE_VERSIONS; - return latestPatchPerBaseline(scoped); + return family ? TRENDZ_UPGRADE_VERSIONS.filter((v) => v.family === family) : TRENDZ_UPGRADE_VERSIONS; } /** * All Trendz versions available for upgrade (non-vulnerable), newest-first. - * Ordering is load-bearing: TRENDZ_UPGRADE_FAMILIES dedups by position, steps - * render in array order, and getTrendzUpgradeStepVersions treats the first - * entry per baseVersion as the latest. The assertNewestFirst() call below - * fails the build on an out-of-order insert. + * Ordering is load-bearing: TRENDZ_UPGRADE_FAMILIES dedups by position and + * steps render in array order. The assertNewestFirst() call below fails the + * build on an out-of-order insert. */ export const TRENDZ_UPGRADE_VERSIONS: TrendzUpgradeVersion[] = [ { @@ -120,6 +115,18 @@ export const TRENDZ_UPGRADE_VERSIONS: TrendzUpgradeVersion[] = [ // 1.15.x uses the new upgrade mechanism — no --fromVersion flag needed haproxyNote: false, }, + { + version: '1.15.1.1', + displayVersion: '1.15.1.1', + family: '1.15', + baseVersion: '1.15.1', + releaseDate: 'Apr 28 2026', + lts: true, + patch: true, + anchor: 'v1-15-1-1', + // 1.15.x uses the new upgrade mechanism — no --fromVersion flag needed + haproxyNote: false, + }, { version: '1.15.1', displayVersion: '1.15.1', @@ -131,6 +138,18 @@ export const TRENDZ_UPGRADE_VERSIONS: TrendzUpgradeVersion[] = [ // 1.15.x uses the new upgrade mechanism — no --fromVersion flag needed haproxyNote: false, }, + { + version: '1.15.0.6', + displayVersion: '1.15.0.6', + family: '1.15', + baseVersion: '1.15.0', + releaseDate: 'Mar 25 2026', + lts: true, + patch: true, + anchor: 'v1-15-0-6', + // 1.15.x uses the new upgrade mechanism — no --fromVersion flag needed + haproxyNote: true, + }, { version: '1.15.0.5', displayVersion: '1.15.0.5', From 026003907ecb3a39d9af2f0c91a7f10a323e140d Mon Sep 17 00:00:00 2001 From: Roman Kostenko Date: Tue, 20 Oct 2026 17:54:41 +0300 Subject: [PATCH 2/2] Fix comments --- src/components/upgrade-instructions/TrendzK8sJobSteps.astro | 1 + src/components/upgrade-instructions/TrendzUpgradeSteps.astro | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/components/upgrade-instructions/TrendzK8sJobSteps.astro b/src/components/upgrade-instructions/TrendzK8sJobSteps.astro index 072581cd94..851f7edf73 100644 --- a/src/components/upgrade-instructions/TrendzK8sJobSteps.astro +++ b/src/components/upgrade-instructions/TrendzK8sJobSteps.astro @@ -52,6 +52,7 @@ const k8sJobLogOutput =

Stop Trendz

+

If the pods are already gone, kubectl wait may print no matching resources found. This is expected.

Create the upgrade job

diff --git a/src/components/upgrade-instructions/TrendzUpgradeSteps.astro b/src/components/upgrade-instructions/TrendzUpgradeSteps.astro index 2c1c70f02a..9ed2a9a4d5 100644 --- a/src/components/upgrade-instructions/TrendzUpgradeSteps.astro +++ b/src/components/upgrade-instructions/TrendzUpgradeSteps.astro @@ -71,6 +71,8 @@ const javaGuideLink =

Select the correct kube-config context before running any commands:

+

Set trendz as the default namespace, so the commands below run in it:

+

Back up the database

Back up the trendz database with pg_dump or your PostgreSQL provider's backup tools.

@@ -314,6 +316,7 @@ const javaGuideLink =

No upgrade job is needed. Set the image versions to {v.version} in trendz-app-deployment.yml and trendz-python-executor-deployment.yml, then apply them:

+

From any other version, follow the steps below.

)}