Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(versioning/distro): Move date handling into distro.ts #15271

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 47 additions & 22 deletions lib/modules/versioning/distro.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
import { DateTime, Settings } from 'luxon';
import { DistroInfo } from './distro';

describe('modules/versioning/distro', () => {
const dt = DateTime.fromISO('2022-03-20');

// DistroInfo constructor is dependent on the current date
Gabriel-Ladzaretti marked this conversation as resolved.
Show resolved Hide resolved
const spy = jest.spyOn(Settings, 'now').mockReturnValue(dt.valueOf());
const di = new DistroInfo('data/ubuntu-distro-info.json');
spy.mockReset();
Gabriel-Ladzaretti marked this conversation as resolved.
Show resolved Hide resolved

afterEach(() => {
jest.resetAllMocks();
});
Gabriel-Ladzaretti marked this conversation as resolved.
Show resolved Hide resolved

it.each`
version | expected
Expand Down Expand Up @@ -84,19 +94,36 @@ describe('modules/versioning/distro', () => {
${'21.10'} | ${false}
${'22.04'} | ${false}
`('isEolLts("$version") === $expected', ({ version, expected }) => {
jest.spyOn(Settings, 'now').mockReturnValue(dt.valueOf());
Gabriel-Ladzaretti marked this conversation as resolved.
Show resolved Hide resolved
expect(di.isEolLts(version)).toBe(expected);
});

it('retrieves most recent release schedule with version', () => {
it.each`
version | expected
${'focal'} | ${true}
${'groovy'} | ${true}
${'hirsute'} | ${true}
${'impish'} | ${true}
${'jammy'} | ${false}
${'20.04'} | ${true}
${'20.10'} | ${true}
${'21.04'} | ${true}
${'21.10'} | ${true}
${'22.04'} | ${false}
${'24.04'} | ${false}
`('isReleased("$version") === $expected', ({ version, expected }) => {
jest.spyOn(Settings, 'now').mockReturnValue(dt.valueOf());
Gabriel-Ladzaretti marked this conversation as resolved.
Show resolved Hide resolved
expect(di.isReleased(version)).toBe(expected);
});
viceice marked this conversation as resolved.
Show resolved Hide resolved

it('retrieves schedule of the most recent release', () => {
expect(di.getNLatest(0)).toEqual({
codename: 'Jammy Jellyfish',
created: '2021-10-14',
eol: '2027-04-21',
eol_esm: '2032-04-21',
eol_server: '2027-04-21',
release: '2022-04-21',
series: 'jammy',
version: '22.04',
codename: 'Impish Indri',
series: 'impish',
created: '2021-04-22',
release: '2021-10-14',
eol: '2022-07-14',
version: '21.10',
Gabriel-Ladzaretti marked this conversation as resolved.
Show resolved Hide resolved
});
});

Expand All @@ -106,19 +133,6 @@ describe('modules/versioning/distro', () => {

it('sends a float as an argument', () => {
expect(di.getNLatest(0.1)).toEqual({
codename: 'Jammy Jellyfish',
created: '2021-10-14',
eol: '2027-04-21',
eol_esm: '2032-04-21',
eol_server: '2027-04-21',
release: '2022-04-21',
series: 'jammy',
version: '22.04',
});
});

it('retrieves before most recent release schedule with version', () => {
expect(di.getNLatest(1)).toEqual({
codename: 'Impish Indri',
series: 'impish',
created: '2021-04-22',
Expand All @@ -128,6 +142,17 @@ describe('modules/versioning/distro', () => {
});
});

it('retrieves schedule of the previous release', () => {
expect(di.getNLatest(1)).toEqual({
codename: 'Hirsute Hippo',
created: '2020-10-22',
eol: '2022-01-20',
release: '2021-04-22',
series: 'hirsute',
version: '21.04',
});
});

it('retrieves focal release schedule', () => {
expect(di.getSchedule('20.04')).toEqual({
codename: 'Focal Fossa',
Expand Down
28 changes: 26 additions & 2 deletions lib/modules/versioning/distro.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ export class DistroInfo {
// istanbul ignore next
continue;
}

if (!this.isReleased(obj.version)) {
continue;
}

this._sortedInfo.push(obj);
}
}
Expand Down Expand Up @@ -127,15 +132,34 @@ export class DistroInfo {
}

if (end) {
const now = DateTime.now();
const eol = DateTime.fromISO(end);
const now = DateTime.now().toUTC();
const eol = DateTime.fromISO(end, { zone: 'utc' });
return eol < now;
}

// istanbul ignore next
return true;
}

/**
* Check if a given version has been released
* @param input A codename/semVer
* @returns false if unreleased or has no schedule, true otherwise
*/
public isReleased(input: string): boolean {
const ver = this.getVersionByCodename(input);
const schedule = this.getSchedule(ver);

if (!schedule) {
return false;
}

const now = DateTime.now().minus({ day: 1 }).toUTC();
const release = DateTime.fromISO(schedule.release, { zone: 'utc' });

return release < now;
}

/**
* Get distro info for the release that has N other newer releases.
* Example: n=0 corresponds to the latest available release, n=1 the release before, etc.
Expand Down
21 changes: 5 additions & 16 deletions lib/modules/versioning/ubuntu/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,40 +132,29 @@ describe('modules/versioning/ubuntu/index', () => {
${'8.10'} | ${false}
${'9.04'} | ${false}
${'9.10'} | ${false}
${'10.04.4'} | ${true}
Gabriel-Ladzaretti marked this conversation as resolved.
Show resolved Hide resolved
${'10.04'} | ${true}
${'10.10'} | ${false}
${'11.04'} | ${false}
${'11.10'} | ${false}
${'12.04.5'} | ${true}
${'12.04'} | ${true}
${'12.10'} | ${false}
${'13.04'} | ${false}
${'13.10'} | ${false}
${'14.04.6'} | ${true}
${'14.04'} | ${true}
${'14.10'} | ${false}
${'15.04'} | ${false}
${'15.10'} | ${false}
${'16.04.7'} | ${true}
${'16.04'} | ${true}
${'16.10'} | ${false}
${'17.04'} | ${false}
${'17.10'} | ${false}
${'18.04.5'} | ${true}
${'18.04'} | ${true}
${'18.10'} | ${false}
${'19.04'} | ${false}
${'19.10'} | ${false}
${'20.04'} | ${true}
${'20.10'} | ${false}
${'22.04'} | ${false}
${'42.01'} | ${false}
${'42.02'} | ${false}
${'42.03'} | ${false}
${'42.04'} | ${true}
${'42.05'} | ${false}
${'42.06'} | ${false}
${'42.07'} | ${false}
${'42.08'} | ${false}
${'42.09'} | ${false}
${'42.10'} | ${false}
${'42.11'} | ${false}
${'2020.04'} | ${false}
${'warty'} | ${false}
${'hoary'} | ${false}
Expand Down
8 changes: 1 addition & 7 deletions lib/modules/versioning/ubuntu/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { DateTime } from 'luxon';
import { regEx } from '../../../util/regex';
import { DistroInfo } from '../distro';
import type { NewValueConfig, VersioningApi } from '../types';
Expand Down Expand Up @@ -43,12 +42,7 @@ function isStable(version: string): boolean {
return false;
}

const schedule = di.getSchedule(ver);
if (
schedule &&
DateTime.fromISO(schedule.release).toUTC() >
DateTime.now().minus({ days: 1 }).toUTC()
) {
if (!di.isReleased(ver)) {
return false;
}

Expand Down