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

feat(datasource/adoptium): support jre only releases #11652

Merged
merged 3 commits into from Sep 9, 2021
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
20 changes: 20 additions & 0 deletions lib/datasource/adoptium-java/__fixtures__/jre.json
@@ -0,0 +1,20 @@
{
"versions": [
{
"build": 7,
"major": 11,
"minor": 0,
"openjdk_version": "11.0.12+7",
"security": 12,
"semver": "11.0.12+7"
},
{
"build": 8,
"major": 8,
"minor": 0,
"openjdk_version": "1.8.0_302-b08",
"security": 302,
"semver": "8.0.302+8"
}
]
}
15 changes: 15 additions & 0 deletions lib/datasource/adoptium-java/__snapshots__/index.spec.ts.snap
Expand Up @@ -159,6 +159,21 @@ Object {
}
`;

exports[`datasource/adoptium-java/index getReleases processes real data (jre) 1`] = `
Object {
"homepage": "https://adoptium.net",
"registryUrl": "https://api.adoptium.net/",
"releases": Array [
Object {
"version": "8.0.302+8",
},
Object {
"version": "11.0.12+7",
},
],
}
`;

exports[`datasource/adoptium-java/index getReleases processes real data 1`] = `
Object {
"homepage": "https://adoptium.net",
Expand Down
9 changes: 9 additions & 0 deletions lib/datasource/adoptium-java/common.ts
Expand Up @@ -4,3 +4,12 @@ export const pageSize = 50;
export const defaultRegistryUrl = 'https://api.adoptium.net/';

export const datasource = 'adoptium-java';

export function getImageType(lookupName: string): string {
switch (lookupName) {
case 'java-jre':
return 'jre';
default:
return 'jdk';
}
}
29 changes: 21 additions & 8 deletions lib/datasource/adoptium-java/index.spec.ts
Expand Up @@ -5,9 +5,10 @@ import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages';
import { datasource, defaultRegistryUrl, pageSize } from './common';

const res1 = loadFixture('page.json');
const jre = loadFixture('jre.json');

function getPath(page: number): string {
return `/v3/info/release_versions?page_size=${pageSize}&project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC&vendor=adoptium&page=${page}`;
function getPath(page: number, imageType = 'jdk'): string {
return `/v3/info/release_versions?page_size=${pageSize}&image_type=${imageType}&project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC&vendor=adoptium&page=${page}`;
}
function* range(start: number, end: number): Generator<number, number, number> {
yield start;
Expand All @@ -17,6 +18,8 @@ function* range(start: number, end: number): Generator<number, number, number> {
yield* range(start + 1, end);
}

const depName = 'java';

describe('datasource/adoptium-java/index', () => {
describe('getReleases', () => {
it('throws for error', async () => {
Expand All @@ -27,7 +30,7 @@ describe('datasource/adoptium-java/index', () => {
await expect(
getPkgReleases({
datasource,
depName: 'adoptium-java',
depName,
})
).rejects.toThrow(EXTERNAL_HOST_ERROR);
});
Expand All @@ -37,7 +40,7 @@ describe('datasource/adoptium-java/index', () => {
expect(
await getPkgReleases({
datasource,
depName: 'adoptium-java',
depName,
})
).toBeNull();
});
Expand All @@ -50,7 +53,7 @@ describe('datasource/adoptium-java/index', () => {
expect(
await getPkgReleases({
datasource,
depName: 'adoptium-java',
depName,
})
).toBeNull();
});
Expand All @@ -60,7 +63,7 @@ describe('datasource/adoptium-java/index', () => {
await expect(
getPkgReleases({
datasource,
depName: 'adoptium-java',
depName,
})
).rejects.toThrow(EXTERNAL_HOST_ERROR);
});
Expand All @@ -69,12 +72,22 @@ describe('datasource/adoptium-java/index', () => {
httpMock.scope(defaultRegistryUrl).get(getPath(0)).reply(200, res1);
const res = await getPkgReleases({
datasource,
depName: 'adoptium-java',
depName,
});
expect(res).toMatchSnapshot();
expect(res.releases).toHaveLength(3);
});

it('processes real data (jre)', async () => {
httpMock.scope(defaultRegistryUrl).get(getPath(0, 'jre')).reply(200, jre);
const res = await getPkgReleases({
datasource,
depName: 'java-jre',
});
expect(res).toMatchSnapshot();
expect(res.releases).toHaveLength(2);
});

it('pages', async () => {
httpMock
.scope(defaultRegistryUrl)
Expand All @@ -86,7 +99,7 @@ describe('datasource/adoptium-java/index', () => {
.reply(404);
const res = await getPkgReleases({
datasource,
depName: 'adoptium-java',
depName,
});
expect(res).toMatchSnapshot();
expect(res.releases).toHaveLength(50);
Expand Down
16 changes: 14 additions & 2 deletions lib/datasource/adoptium-java/index.ts
@@ -1,9 +1,15 @@
import { logger } from '../../logger';
import { ExternalHostError } from '../../types/errors/external-host-error';
import { cache } from '../../util/cache/package/decorator';
import { HttpError } from '../../util/http/types';
import { Datasource } from '../datasource';
import type { GetReleasesConfig, ReleaseResult } from '../types';
import { datasource, defaultRegistryUrl, pageSize } from './common';
import {
datasource,
defaultRegistryUrl,
getImageType,
pageSize,
} from './common';
import type { AdoptiumJavaResponse } from './types';

export class AdoptiumJavaDatasource extends Datasource {
Expand All @@ -25,9 +31,15 @@ export class AdoptiumJavaDatasource extends Datasource {
})
async getReleases({
registryUrl,
lookupName,
}: GetReleasesConfig): Promise<ReleaseResult | null> {
let page = 0;
const url = `${registryUrl}v3/info/release_versions?page_size=${pageSize}&project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC&vendor=adoptium`;
const imageType = getImageType(lookupName);
logger.trace(
{ registryUrl, lookupName, imageType },
'fetching java release'
);
const url = `${registryUrl}v3/info/release_versions?page_size=${pageSize}&image_type=${imageType}&project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC&vendor=adoptium`;

const result: ReleaseResult = {
homepage: 'https://adoptium.net',
Expand Down
7 changes: 6 additions & 1 deletion lib/datasource/adoptium-java/readme.md
@@ -1,5 +1,10 @@
This datasource returns releases from [Adoptium](https://adoptium.net/) API.

It uses `project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC&vendor=adoptium` as filter parameters.
It uses `image_type=<jre|jdk>&project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC&vendor=adoptium` as filter parameters.

It only uses the first 50 pages with 50 items per page.

Use `java-jdk` or `java` as `lookupName` to get releases which come with the Java Development Kit.

Use `java-jre` as `lookupName` if you only want releases which come with the Java Runtime Environment.
viceice marked this conversation as resolved.
Show resolved Hide resolved
Currently only the LTS releases of Java come with the JRE.