mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-31 17:51:49 +00:00
49e61d7a35
Drop defensive checks that can never be false: - `ansible-galaxy`: `finalize()` always returned `true`, so make it return `void` and always push the dep - `droneci`: `getDep()` with `replaceString: true` always sets `autoReplaceStringTemplate` - `gradle`: the `project '(?<name>.+?)'` regex always yields the `name` group when it matches - `npm`: use `coerceString()` for the `lastSegment` fallback - `pep621`: the `dependency-groups` schema has `.catch([])`, so it is always defined - `quadlet`: `getDep()` never returns a nullish value Co-authored-by: Claude Opus 5 <michael.kriese+claude-code@mend.io>
81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
import { logger } from '../../../logger/index.ts';
|
|
import { regEx } from '../../../util/regex.ts';
|
|
import { getDep } from '../dockerfile/extract.ts';
|
|
import type {
|
|
ExtractConfig,
|
|
PackageDependency,
|
|
PackageFileContent,
|
|
} from '../types.ts';
|
|
import { QuadletFile } from './schema.ts';
|
|
|
|
function startsWithAny(image: string, prefixes: string[]): boolean {
|
|
return !!prefixes.find((prefix) => image.startsWith(prefix));
|
|
}
|
|
|
|
function endsWithAny(image: string, suffixes: string[]): boolean {
|
|
return !!suffixes.find((suffix) => image.endsWith(suffix));
|
|
}
|
|
|
|
function getQuadletImage(
|
|
image: string | null | undefined,
|
|
ignoredSuffixes: string[],
|
|
deps: PackageDependency[],
|
|
config: ExtractConfig,
|
|
): void {
|
|
if (
|
|
image &&
|
|
// Ignore transports that do not resolve to a registry
|
|
// https://github.com/containers/image/blob/main/docs/containers-transports.5.md
|
|
!startsWithAny(image, [
|
|
'dir:',
|
|
'docker-archive:',
|
|
'oci-archive:',
|
|
'oci:',
|
|
'containers-storage:',
|
|
'sif:',
|
|
]) &&
|
|
!endsWithAny(image, ignoredSuffixes)
|
|
) {
|
|
// Remove the docker:// or docker-daemon: transport prefix, if present
|
|
const cleanedImage = image
|
|
.replace(regEx(/^docker:\/\//), '')
|
|
.replace(regEx(/^docker-daemon:/), '');
|
|
const dep = getDep(cleanedImage, true, config.registryAliases);
|
|
dep.depType = 'image';
|
|
deps.push(dep);
|
|
}
|
|
}
|
|
|
|
export function extractPackageFile(
|
|
content: string,
|
|
packageFile: string,
|
|
config: ExtractConfig,
|
|
): PackageFileContent | null {
|
|
const deps: PackageDependency[] = [];
|
|
|
|
const res = QuadletFile.safeParse(content);
|
|
if (!res.success) {
|
|
logger.debug(
|
|
{ err: res.error, packageFile },
|
|
'Error parsing Quadlet file.',
|
|
);
|
|
return null;
|
|
}
|
|
|
|
const quadletFile: QuadletFile = res.data;
|
|
|
|
getQuadletImage(
|
|
quadletFile?.Container?.Image,
|
|
['.image', '.build'],
|
|
deps,
|
|
config,
|
|
);
|
|
getQuadletImage(quadletFile?.Image?.Image, [], deps, config);
|
|
getQuadletImage(quadletFile?.Volume?.Image, ['.image'], deps, config);
|
|
|
|
if (deps.length) {
|
|
return { deps };
|
|
}
|
|
return null;
|
|
}
|