Skip to content
Snippets Groups Projects
Unverified Commit 3b97cb7c authored by Jamie Magee's avatar Jamie Magee Committed by GitHub
Browse files

fix(datasource/dotnet): account for nullable releases (#18292)

parent af019949
Branches
Tags
No related merge requests found
import is from '@sindresorhus/is';
import { cache } from '../../../util/cache/package/decorator'; import { cache } from '../../../util/cache/package/decorator';
import type { HttpResponse } from '../../../util/http/types'; import type { HttpResponse } from '../../../util/http/types';
import { Datasource } from '../datasource'; import { Datasource } from '../datasource';
import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; import type { GetReleasesConfig, Release, ReleaseResult } from '../types';
import { import {
DotnetRelease,
DotnetReleases, DotnetReleases,
DotnetReleasesIndex, DotnetReleasesIndex,
DotnetReleasesIndexSchema, DotnetReleasesIndexSchema,
...@@ -71,7 +73,8 @@ export class DotnetDatasource extends Datasource { ...@@ -71,7 +73,8 @@ export class DotnetDatasource extends Datasource {
@cache({ @cache({
namespace: `datasource-${DotnetDatasource.id}`, namespace: `datasource-${DotnetDatasource.id}`,
key: (releaseUrl: string) => releaseUrl, key: (releaseUrl: string, packageName: string) =>
`${releaseUrl}:${packageName}`,
ttlMinutes: 1440, ttlMinutes: 1440,
}) })
async getChannelReleases( async getChannelReleases(
...@@ -91,7 +94,17 @@ export class DotnetDatasource extends Datasource { ...@@ -91,7 +94,17 @@ export class DotnetDatasource extends Datasource {
if (body) { if (body) {
const type = DotnetDatasource.getType(packageName); const type = DotnetDatasource.getType(packageName);
const { releases: releases } = body; const { releases: releases } = body;
result = releases.map((release) => { result = releases
.filter(
(
release
): release is {
[P in keyof DotnetRelease]: NonNullable<DotnetRelease[P]>;
} => {
return !is.nullOrUndefined(release[type]);
}
)
.map((release) => {
return { return {
version: release[type].version, version: release[type].version,
releaseTimestamp: release['release-date'], releaseTimestamp: release['release-date'],
......
This datasource returns releases of the .NET Runtime and SDK. This datasource returns releases of the .NET Runtime and SDK.
It only accepts dependencies with the name `dotnet-sdk` or `dotnet-runtime`.
...@@ -29,13 +29,13 @@ const ReleaseDetails = z.object({ ...@@ -29,13 +29,13 @@ const ReleaseDetails = z.object({
version: z.string(), version: z.string(),
'version-display': z.string(), 'version-display': z.string(),
}); });
const Release = z.object({ const ReleaseSchema = z.object({
'release-date': z.date(), 'release-date': z.date(),
'release-version': z.string(), 'release-version': z.string(),
security: z.boolean(), security: z.boolean(),
'release-notes': z.string(), 'release-notes': z.string(),
runtime: ReleaseDetails, runtime: z.nullable(ReleaseDetails),
sdk: ReleaseDetails, sdk: z.nullable(ReleaseDetails),
}); });
export const DotnetReleasesSchema = z.object({ export const DotnetReleasesSchema = z.object({
'channel-version': z.string(), 'channel-version': z.string(),
...@@ -44,8 +44,9 @@ export const DotnetReleasesSchema = z.object({ ...@@ -44,8 +44,9 @@ export const DotnetReleasesSchema = z.object({
'latest-runtime': z.string(), 'latest-runtime': z.string(),
'latest-sdk': z.string(), 'latest-sdk': z.string(),
'support-phase': SupportPhase, 'support-phase': SupportPhase,
releases: z.array(Release), releases: z.array(ReleaseSchema),
}); });
export type DotnetReleasesIndex = z.infer<typeof DotnetReleasesIndexSchema>; export type DotnetReleasesIndex = z.infer<typeof DotnetReleasesIndexSchema>;
export type DotnetReleases = z.infer<typeof DotnetReleasesSchema>; export type DotnetReleases = z.infer<typeof DotnetReleasesSchema>;
export type DotnetRelease = z.infer<typeof ReleaseSchema>;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment