21 lines
1.1 KiB
TypeScript
21 lines
1.1 KiB
TypeScript
// A docker image regexp. We remove support for non-standard registries for simplicity.
|
|
// https://docs.docker.com/engine/reference/commandline/tag/#extended-description
|
|
//
|
|
// An image name is made up of slash-separated name components (optionally prefixed by a registry hostname).
|
|
// Name components may contain lowercase characters, digits and separators.
|
|
// A separator is defined as a period, one or two underscores, or one or more dashes. A name component may not start or end with a separator.
|
|
//
|
|
// A tag name must be valid ASCII and may contain lowercase and uppercase letters, digits, underscores, periods and dashes.
|
|
// A tag name may not start with a period or a dash and may contain a maximum of 128 characters.
|
|
const dockerImagePattern = new RegExp(
|
|
"^[a-z0-9][a-z0-9._-]*[a-z0-9](/[a-z0-9][a-z0-9._-]*[a-z0-9])+:[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,127}$",
|
|
);
|
|
|
|
/** Max length in bytes/characters (regexp enforces all ASCII, even if that is not required by the standard) */
|
|
const builderMaxLength = 128;
|
|
|
|
export function isValidBuilder(builder: string): boolean {
|
|
if (builder.length > builderMaxLength) return false;
|
|
return !!builder.match(dockerImagePattern);
|
|
}
|