Skip to content

Commit 34f8e64

Browse files
committed
STONEBLD-1198 Use prependTag in reuse determination. Use DigestUtils
1 parent c3b4a76 commit 34f8e64

File tree

8 files changed

+65
-62
lines changed

8 files changed

+65
-62
lines changed

java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/analyser/build/LookupBuildInfoCommand.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -344,14 +344,13 @@ private void doBuildAnalysis(String scmUrl, String scmTag, String context, Build
344344
if (registries != null) {
345345
String[] splitRegistries = registries.split(";", -1);
346346

347-
String token = envToken.orElse("");
348-
349347
for (String value : splitRegistries) {
350348
ImageRegistry registry = Util.parseRegistry(value);
351349
// Meant to match Go code that does
352350
// util.HashString(abr.Status.SCMInfo.SCMURL + abr.Status.SCMInfo.Tag + abr.Status.SCMInfo.Path)
353351
String contextPath = context == null ? "" : context;
354-
String imageId = DigestUtils.md5Hex(scmUrl + tag + contextPath);
352+
String prependTag = isBlank(registry.getPrependTag()) ? "" : registry.getPrependTag() + "_";
353+
String imageId = prependTag + DigestUtils.md5Hex(scmUrl + tag + contextPath);
355354
String port = isBlank(registry.getPort()) ? "443" : registry.getPort();
356355
String fullName = registry.getHost() + (port.equals("443") ? "" : ":" + port) + "/" + registry.getOwner()
357356
+ "/" + registry.getRepository() + ":" + imageId;

java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/analyser/deploy/DeployCommand.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ private Optional<Gav> getGav(String entryName, String prependTag) {
339339
List<String> groupIdList = pathParts.subList(0, numberOfParts - 3);
340340
String groupId = String.join(DOT, groupIdList);
341341

342-
return Optional.of(Gav.create(groupId, artifactId, version, prependTag));
342+
return Optional.of(Gav.create(groupId, artifactId, version));
343343
}
344344
return Optional.empty();
345345
}

java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/analyser/deploy/DeployData.java

+2-7
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,9 @@ public final class DeployData {
1010
private final Path artifactsPath;
1111
private final Set<Gav> gavs;
1212

13-
public DeployData(Path artifactsPath, Set<Gav> gavs) {
13+
public DeployData(Path artifactsPath, Set<String> gavs) {
1414
this.artifactsPath = artifactsPath;
15-
this.gavs = gavs;
16-
}
17-
18-
public DeployData(Path artifactsPath, Set<String> gavs, String prependTag) {
19-
this.artifactsPath = artifactsPath;
20-
this.gavs = gavs.stream().map(s -> Gav.parse(s, prependTag)).collect(Collectors.toSet());
15+
this.gavs = gavs.stream().map(Gav::parse).collect(Collectors.toSet());
2116
}
2217

2318
public Path getArtifactsPath() {

java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/analyser/deploy/DeployerUtil.java

-39
This file was deleted.

java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/analyser/deploy/Gav.java

+9-10
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22

33
import java.util.Objects;
44

5+
import org.apache.commons.codec.digest.DigestUtils;
6+
57
public final class Gav {
8+
9+
private static final String GAV_FORMAT = "%s:%s:%s";
10+
611
private final String groupId;
712
private final String artifactId;
813
private final String version;
@@ -15,19 +20,13 @@ private Gav(String groupId, String artifactId, String version, String tag) {
1520
this.tag = tag;
1621
}
1722

18-
public static Gav parse(String gav, String prependTag) {
23+
public static Gav parse(String gav) {
1924
var parts = gav.split(":");
20-
return create(parts[0], parts[1], parts[2], prependTag);
25+
return create(parts[0], parts[1], parts[2]);
2126
}
2227

23-
public static Gav create(String groupId, String artifactId, String version, String prependTag) {
24-
String tag = DeployerUtil.sha256sum(groupId, artifactId, version);
25-
if (!prependTag.isBlank()) {
26-
tag = prependTag + "_" + tag;
27-
}
28-
if (tag.length() > 128) {
29-
tag = tag.substring(0, 128);
30-
}
28+
public static Gav create(String groupId, String artifactId, String version) {
29+
String tag = DigestUtils.sha256Hex(String.format(GAV_FORMAT, groupId, artifactId, version));
3130
return new Gav(groupId, artifactId, version, tag);
3231
}
3332

java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/analyser/deploy/containerregistry/ContainerRegistryDeployer.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void deployArchive(Path deployDir, Path sourcePath, Path logsPath, Set<St
9191
Log.debugf("Using Container registry %s:%d/%s/%s", host, port, owner, repository);
9292

9393
// Read the tar to get the gavs and files
94-
DeployData imageData = new DeployData(deployDir, gavs, prependTag);
94+
DeployData imageData = new DeployData(deployDir, gavs);
9595

9696
try {
9797
// Create the image layers
@@ -109,7 +109,7 @@ public void tagArchive(List<String> gavNames) throws Exception {
109109

110110
Deque<Gav> gavs = new ArrayDeque<>();
111111
for (var i : gavNames) {
112-
gavs.push(Gav.parse(i, prependTag));
112+
gavs.push(Gav.parse(i));
113113
}
114114
Gav first = gavs.pop();
115115
String existingImage = createImageName(imageId);
@@ -260,6 +260,16 @@ private String createImageName() {
260260
}
261261

262262
private String createImageName(String tag) {
263+
// As the tests utilise prependTag for uniqueness so check for that
264+
// here to avoid reusing images when we want differentiation.
265+
if (!prependTag.isBlank()) {
266+
tag = prependTag + "_" + tag;
267+
}
268+
// Docker tag maximum size is 128
269+
// https://docs.docker.com/engine/reference/commandline/tag/
270+
if (tag.length() > 128) {
271+
tag = tag.substring(0, 128);
272+
}
263273
if (port == 443) {
264274
return host + "/" + owner + "/" + repository
265275
+ ":" + tag;

pkg/reconciler/dependencybuild/buildrecipeyaml.go

+16
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ func createPipelineSpec(tool string, commitTime int64, jbsConfig *v1alpha12.JBSC
6464
gitArgs := gitArgs(db, recipe)
6565
install := additionalPackages(recipe)
6666

67+
println("PREBUILD IMAGE: " + preBuildImageName)
6768
println("HERMETIC IMAGE: " + hermeticPreBuildImageName)
6869

6970
preprocessorArgs := []string{
@@ -627,6 +628,8 @@ func imageRegistryCommands(imageId string, recipe *v1alpha12.BuildRecipe, db *v1
627628
}
628629
if jbsConfig.ImageRegistry().PrependTag != "" {
629630
registryArgs = append(registryArgs, "--registry-prepend-tag="+imageRegistry.PrependTag)
631+
preBuildImageName = prependTagToImage(preBuildImageName, jbsConfig.Spec.ImageRegistry.PrependTag)
632+
hermeticPreBuildImageName = prependTagToImage(hermeticPreBuildImageName, jbsConfig.Spec.ImageRegistry.PrependTag)
630633
}
631634
deployArgs = append(deployArgs, registryArgs...)
632635
hermeticDeployArgs = append(hermeticDeployArgs, registryArgs...)
@@ -643,9 +646,22 @@ func imageRegistryCommands(imageId string, recipe *v1alpha12.BuildRecipe, db *v1
643646
"--repository-path=$(workspaces.source.path)/build-info/",
644647
}
645648
hermeticPreBuildImageArgs = append(hermeticPreBuildImageArgs, registryArgs...)
649+
646650
return preBuildImageName, hermeticPreBuildImageName, preBuildImageArgs, deployArgs, hermeticDeployArgs, tagArgs, hermeticPreBuildImageArgs
647651
}
648652

653+
// This is equivalent to ContainerRegistryDeployer.java::createImageName with the same image tag length restriction.
654+
func prependTagToImage(imageId string, prependTag string) string {
655+
i := strings.LastIndex(imageId, ":")
656+
slice := imageId[0:i]
657+
tag := prependTag + "_" + imageId[i+1:]
658+
if len(tag) > 128 {
659+
tag = tag[0:128]
660+
}
661+
imageId = slice + ":" + tag
662+
return imageId
663+
}
664+
649665
func verifyParameters(jbsConfig *v1alpha12.JBSConfig, recipe *v1alpha12.BuildRecipe) []string {
650666
verifyBuiltArtifactsArgs := []string{
651667
"verify-built-artifacts",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package dependencybuild
2+
3+
import (
4+
. "github.com/onsi/gomega"
5+
"testing"
6+
)
7+
8+
func TestImageRegistryArrayToString(t *testing.T) {
9+
g := NewGomegaWithT(t)
10+
prependTag := "123456"
11+
imageId := "quay.io:993/foo/artifact-deployments:975ea3800099190263d38f051c1a188a-pre-build-image"
12+
imageId = prependTagToImage(imageId, prependTag)
13+
g.Expect(imageId).To(Equal("quay.io:993/foo/artifact-deployments:123456_975ea3800099190263d38f051c1a188a-pre-build-image"))
14+
imageId = "quay.io/foo/artifact-deployments:975ea3800099190263d38f051c1a188a-pre-build-image"
15+
imageId = prependTagToImage(imageId, prependTag)
16+
g.Expect(imageId).To(Equal("quay.io/foo/artifact-deployments:123456_975ea3800099190263d38f051c1a188a-pre-build-image"))
17+
imageId = "quay.io/foobar-repository/jvm-build-mxlq-tenant/jvm-build-service-artifacts/artifact-deployments:975ea3800099190263d38f051c1a188a-pre-build-image"
18+
imageId = prependTagToImage(imageId, prependTag)
19+
g.Expect(imageId).To(Equal("quay.io/foobar-repository/jvm-build-mxlq-tenant/jvm-build-service-artifacts/artifact-deployments:123456_975ea3800099190263d38f051c1a188a-pre-build-image"))
20+
imageId = "quay.io/foo/artifact-deployments:975ea3800099190263d38f051c1a188a975ea3800099190263d38f051c1a188a975ea3800099190263d38f051c1a188a975ea3800099190263d38f051c1a188a"
21+
imageId = prependTagToImage(imageId, prependTag)
22+
g.Expect(imageId).To(Equal("quay.io/foo/artifact-deployments:123456_975ea3800099190263d38f051c1a188a975ea3800099190263d38f051c1a188a975ea3800099190263d38f051c1a188a975ea3800099190263d38f051"))
23+
}

0 commit comments

Comments
 (0)