Skip to content

Commit

Permalink
refactor: redefine defaultRegistryUrls (#15856)
Browse files Browse the repository at this point in the history
Co-authored-by: Rhys Arkins <rhys@arkins.net>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
  • Loading branch information
3 people committed Jun 16, 2022
1 parent 70084a6 commit 9e28ef3
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 3 deletions.
2 changes: 1 addition & 1 deletion lib/modules/datasource/datasource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export abstract class Datasource implements DatasourceApi {

defaultConfig: Record<string, unknown> | undefined;

defaultRegistryUrls: string[] | undefined;
defaultRegistryUrls?: string[] | (() => string[]);

defaultVersioning: string | undefined;

Expand Down
65 changes: 65 additions & 0 deletions lib/modules/datasource/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,47 @@ class DummyDatasource extends Datasource {
}
}

class DummyDatasource2 extends Datasource {
override defaultRegistryUrls = function () {
return ['https://reg1.com'];
};

constructor(private registriesMock: RegistriesMock = defaultRegistriesMock) {
super(datasource);
}

override getReleases({
registryUrl,
}: GetReleasesConfig): Promise<ReleaseResult | null> {
const fn = this.registriesMock[registryUrl];
if (typeof fn === 'function') {
return Promise.resolve(fn());
}
return Promise.resolve(fn ?? null);
}
}

class DummyDatasource3 extends Datasource {
override customRegistrySupport = false;
override defaultRegistryUrls = function () {
return ['https://reg1.com'];
};

constructor(private registriesMock: RegistriesMock = defaultRegistriesMock) {
super(datasource);
}

override getReleases({
registryUrl,
}: GetReleasesConfig): Promise<ReleaseResult | null> {
const fn = this.registriesMock[registryUrl];
if (typeof fn === 'function') {
return Promise.resolve(fn());
}
return Promise.resolve(fn ?? null);
}
}

jest.mock('./metadata-manual', () => ({
manualChangelogUrls: {
dummy: {
Expand Down Expand Up @@ -212,6 +253,30 @@ describe('modules/datasource/index', () => {
expect(res).toMatchObject({ releases: [{ version: '0.0.1' }] });
});

it('defaultRegistryUrls function works', async () => {
datasources.set(datasource, new DummyDatasource2());
const res = await getPkgReleases({
datasource,
depName,
});
expect(res).toMatchObject({
releases: [{ version: '1.2.3' }],
registryUrl: 'https://reg1.com',
});
});

it('defaultRegistryUrls function with customRegistrySupport works', async () => {
datasources.set(datasource, new DummyDatasource3());
const res = await getPkgReleases({
datasource,
depName,
});
expect(res).toMatchObject({
releases: [{ version: '1.2.3' }],
registryUrl: 'https://reg1.com',
});
});

it('applies extractVersion', async () => {
const registries: RegistriesMock = {
'https://reg1.com': {
Expand Down
7 changes: 6 additions & 1 deletion lib/modules/datasource/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,9 @@ function resolveRegistryUrls(
'Custom registries are not allowed for this datasource and will be ignored'
);
}
return datasource.defaultRegistryUrls ?? [];
return is.function_(datasource.defaultRegistryUrls)
? datasource.defaultRegistryUrls()
: datasource.defaultRegistryUrls ?? [];
}
const customUrls = registryUrls?.filter(Boolean);
let resolvedUrls: string[] = [];
Expand All @@ -218,6 +220,9 @@ function resolveRegistryUrls(
} else if (is.nonEmptyArray(defaultRegistryUrls)) {
resolvedUrls = [...defaultRegistryUrls];
resolvedUrls.concat(additionalRegistryUrls ?? []);
} else if (is.function_(datasource.defaultRegistryUrls)) {
resolvedUrls = [...datasource.defaultRegistryUrls()];
resolvedUrls.concat(additionalRegistryUrls ?? []);
} else if (is.nonEmptyArray(datasource.defaultRegistryUrls)) {
resolvedUrls = [...datasource.defaultRegistryUrls];
resolvedUrls.concat(additionalRegistryUrls ?? []);
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/datasource/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ export interface DatasourceApi extends ModuleApi {
id: string;
getDigest?(config: DigestConfig, newValue?: string): Promise<string | null>;
getReleases(config: GetReleasesConfig): Promise<ReleaseResult | null>;
defaultRegistryUrls?: string[];
defaultRegistryUrls?: string[] | (() => string[]);
defaultVersioning?: string;
defaultConfig?: Record<string, unknown>;

Expand Down

0 comments on commit 9e28ef3

Please sign in to comment.