Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c279dbd55e | |||
| 7b7064864e |
@@ -1,5 +1,12 @@
|
||||
# Changelog
|
||||
|
||||
## 2026-02-04 - 1.4.3 - fix(dockerfile)
|
||||
fix matching of base images to local Dockerfiles by stripping registry prefixes when comparing image references
|
||||
|
||||
- Added Dockerfile.extractRepoVersion(imageRef) to normalize image references by removing registry prefixes (detects registries containing '.' or ':' or 'localhost').
|
||||
- Use extractRepoVersion when checking tagToDockerfile and when mapping local base dockerfiles to ensure comparisons use repo:tag keys rather than full registry-prefixed references.
|
||||
- Prevents mismatches when baseImage includes a registry (e.g. "host.today/repo:version") so it correctly matches a local cleanTag like "repo:version".
|
||||
|
||||
## 2026-01-21 - 1.4.2 - fix(classes.dockerfile)
|
||||
use a single top-level fs import instead of requiring fs inside methods
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@git.zone/tsdocker",
|
||||
"version": "1.4.2",
|
||||
"version": "1.4.3",
|
||||
"private": false,
|
||||
"description": "develop npm modules cross platform with docker",
|
||||
"main": "dist_ts/index.js",
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@git.zone/tsdocker',
|
||||
version: '1.4.2',
|
||||
version: '1.4.3',
|
||||
description: 'develop npm modules cross platform with docker'
|
||||
}
|
||||
|
||||
@@ -58,9 +58,14 @@ export class Dockerfile {
|
||||
const dependencies: Dockerfile[] = [];
|
||||
const baseImage = dockerfile.baseImage;
|
||||
|
||||
// Extract repo:version from baseImage for comparison with cleanTag
|
||||
// baseImage may include a registry prefix (e.g., "host.today/repo:version")
|
||||
// but cleanTag is just "repo:version", so we strip the registry prefix
|
||||
const baseImageKey = Dockerfile.extractRepoVersion(baseImage);
|
||||
|
||||
// Check if the baseImage is among the local Dockerfiles
|
||||
if (tagToDockerfile.has(baseImage)) {
|
||||
const baseDockerfile = tagToDockerfile.get(baseImage)!;
|
||||
if (tagToDockerfile.has(baseImageKey)) {
|
||||
const baseDockerfile = tagToDockerfile.get(baseImageKey)!;
|
||||
dependencies.push(baseDockerfile);
|
||||
dockerfile.localBaseImageDependent = true;
|
||||
dockerfile.localBaseDockerfile = baseDockerfile;
|
||||
@@ -116,8 +121,10 @@ export class Dockerfile {
|
||||
public static async mapDockerfiles(sortedDockerfileArray: Dockerfile[]): Promise<Dockerfile[]> {
|
||||
sortedDockerfileArray.forEach((dockerfileArg) => {
|
||||
if (dockerfileArg.localBaseImageDependent) {
|
||||
// Extract repo:version from baseImage for comparison with cleanTag
|
||||
const baseImageKey = Dockerfile.extractRepoVersion(dockerfileArg.baseImage);
|
||||
sortedDockerfileArray.forEach((dockfile2: Dockerfile) => {
|
||||
if (dockfile2.cleanTag === dockerfileArg.baseImage) {
|
||||
if (dockfile2.cleanTag === baseImageKey) {
|
||||
dockerfileArg.localBaseDockerfile = dockfile2;
|
||||
}
|
||||
});
|
||||
@@ -231,6 +238,34 @@ export class Dockerfile {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the repo:version part from a full image reference, stripping any registry prefix.
|
||||
* Examples:
|
||||
* "registry.example.com/repo:version" -> "repo:version"
|
||||
* "repo:version" -> "repo:version"
|
||||
* "host.today/ht-docker-node:npmci" -> "ht-docker-node:npmci"
|
||||
*/
|
||||
private static extractRepoVersion(imageRef: string): string {
|
||||
const parts = imageRef.split('/');
|
||||
if (parts.length === 1) {
|
||||
// No registry prefix: "repo:version"
|
||||
return imageRef;
|
||||
}
|
||||
|
||||
// Check if first part looks like a registry (contains '.' or ':' or is 'localhost')
|
||||
const firstPart = parts[0];
|
||||
const looksLikeRegistry =
|
||||
firstPart.includes('.') || firstPart.includes(':') || firstPart === 'localhost';
|
||||
|
||||
if (looksLikeRegistry) {
|
||||
// Strip registry: "registry.example.com/repo:version" -> "repo:version"
|
||||
return parts.slice(1).join('/');
|
||||
}
|
||||
|
||||
// No registry prefix, could be "org/repo:version"
|
||||
return imageRef;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the docker tag string for a given registry and repo
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user