Files
Alexander Gil Casas b7294ce5a2 feat(versioning/debian): port Ubuntu date versioning support (#40499)
* feat: port Ubuntu versioning support to Debian container images

Resolves #27862.

Signed-off-by: Alexander Gil <pando855@gmail.com>

* refactor: Remove dead code in debian versioning

Signed-off-by: Alexander Gil <pando855@gmail.com>

* refactor: Rename groups to match

* perf: optimize isStable method by reusing getVersionByCodename result

* fix(debian): specify radix in parseInt for dated container image version

---------

Signed-off-by: Alexander Gil <pando855@gmail.com>
Co-authored-by: Jamie Tanna <jamie.tanna@mend.io>
2026-03-19 16:05:04 +00:00

105 lines
3.5 KiB
TypeScript

import dataFiles from '../../../data-files.generated.ts';
import { logger } from '../../../logger/index.ts';
import { DistroInfo } from '../distro.ts';
import {
RollingReleasesData,
getDatedContainerImageCodename,
getDatedContainerImageSuffix,
getDatedContainerImageVersion,
isDatedCodeName,
} from './common.ts';
describe('modules/versioning/debian/common', () => {
const distroInfo = new DistroInfo('data/debian-distro-info.json');
it('no rolling release data', () => {
dataFiles.set('data/debian-distro-info.json', '{}');
const distroInfo = new DistroInfo('data/debian-distro-info.json');
const rollingReleases = new RollingReleasesData(distroInfo);
expect(rollingReleases.has('buster')).toBeFalse();
expect(rollingReleases.has('trixie')).toBeFalse();
expect(logger.debug).toHaveBeenCalledTimes(1);
expect(logger.debug).toHaveBeenCalledWith(
'RollingReleasesData - data written',
);
});
describe('isDatedCodeName', () => {
it.each`
input | expected
${'buster'} | ${false}
${'buster-20220101'} | ${true}
${'bullseye-20220101'} | ${true}
${'bookworm-20230816'} | ${true}
${'bookworm-20230816.1'} | ${true}
${'invalid-20220101'} | ${false}
${'buster-2022010'} | ${false}
${'buster-202201011'} | ${false}
${'buster-20220101.123'} | ${false}
`('isDatedCodeName("$input") === $expected', ({ input, expected }) => {
expect(isDatedCodeName(input, distroInfo)).toBe(expected);
});
});
describe('getDatedContainerImageCodename', () => {
it.each`
input | expected
${'buster-20220101'} | ${'buster'}
${'bullseye-20220101'} | ${'bullseye'}
${'bookworm-20230816'} | ${'bookworm'}
${'bookworm-20230816.1'} | ${'bookworm'}
${'buster'} | ${null}
${'invalid-20220101'} | ${'invalid'}
${'buster-2022010'} | ${null}
${'buster-20220101.123'} | ${null}
${'buster-20220101a'} | ${null}
${'buster-20220101-'} | ${null}
`(
'getDatedContainerImageCodename("$input") === $expected',
({ input, expected }) => {
expect(getDatedContainerImageCodename(input)).toBe(expected);
},
);
});
describe('getDatedContainerImageVersion', () => {
it.each`
input | expected
${'buster-20220101'} | ${20220101}
${'bullseye-20220101'} | ${20220101}
${'bookworm-20230816'} | ${20230816}
${'bookworm-20230816.1'} | ${20230816}
${'buster'} | ${null}
${'invalid-20220101'} | ${20220101}
${'buster-2022010'} | ${null}
`(
'getDatedContainerImageVersion("$input") === $expected',
({ input, expected }) => {
expect(getDatedContainerImageVersion(input)).toBe(expected);
},
);
});
describe('getDatedContainerImageSuffix', () => {
it.each`
input | expected
${'buster-20220101'} | ${null}
${'bullseye-20220101'} | ${null}
${'bookworm-20230816'} | ${null}
${'bookworm-20230816.1'} | ${'.1'}
${'buster-20220101.2'} | ${'.2'}
${'buster'} | ${null}
${'invalid-20220101'} | ${null}
${'buster-2022010'} | ${null}
`(
'getDatedContainerImageSuffix("$input") === $expected',
({ input, expected }) => {
expect(getDatedContainerImageSuffix(input)).toBe(expected);
},
);
});
});