Files
TREK/server/tests/unit/app-config/image-version.test.ts
T
Maurice c6b6b83d38 fix(docker): take the version from the image, not from the container's env
Portainer's recreate and a copied run config carry the previous image's
APP_VERSION into a container built from the new one, so the server kept
announcing the old release and clients never handed over to the new
bundle. The Dockerfile now writes the version into server/VERSION, which
the server reads before APP_VERSION, and prerelease bundles take their
version from the same build argument.
2026-10-07 15:57:52 +02:00

52 lines
1.9 KiB
TypeScript

import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
import { deriveApp } from '../../../src/app-config/derive';
import { imageVersion, resetImageVersion } from '../../../src/app-config/image-version';
describe('imageVersion', () => {
const dirs: string[] = [];
const versionFile = (content: string): string => {
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'trek-image-version-'));
dirs.push(dir);
const file = path.join(dir, 'VERSION');
fs.writeFileSync(file, content);
return file;
};
beforeEach(() => resetImageVersion());
afterEach(() => {
resetImageVersion();
for (const dir of dirs.splice(0)) fs.rmSync(dir, { recursive: true, force: true });
});
it('IMGVER-001: reads the version the image was built as, trimmed', () => {
expect(imageVersion(versionFile('4.4.0-pre.3\n'))).toBe('4.4.0-pre.3');
});
it('IMGVER-002: is null outside an image and for an empty file', () => {
expect(imageVersion(path.join(os.tmpdir(), 'trek-no-such-dir', 'VERSION'))).toBeNull();
resetImageVersion();
expect(imageVersion(versionFile(' \n'))).toBeNull();
});
it('IMGVER-003: reads once, because the image does not change under a running process', () => {
const file = versionFile('4.3.3');
expect(imageVersion(file)).toBe('4.3.3');
fs.writeFileSync(file, '9.9.9');
expect(imageVersion(file)).toBe('4.3.3');
});
it("IMGVER-004: the image's version wins over an APP_VERSION a recreated container carried over", () => {
imageVersion(versionFile('4.4.0'));
expect(deriveApp({ APP_VERSION: '4.3.3' }).appVersion).toBe('4.4.0');
});
it('IMGVER-005: without an image file, APP_VERSION still decides', () => {
imageVersion(path.join(os.tmpdir(), 'trek-no-such-dir', 'VERSION'));
expect(deriveApp({ APP_VERSION: '4.3.3' }).appVersion).toBe('4.3.3');
});
});