Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ public class DeployCommand implements Runnable {
@CommandLine.Option(names = "--mvn-repo")
String mvnRepo;

@CommandLine.Option(names = "--server-id")
String serverId = "indy-mvn";

@Inject
BootstrapMavenContext mvnCtx;

Expand All @@ -44,7 +47,7 @@ public void run() {
}
if (isNotEmpty(mvnRepo)) {
// Maven Repo Deployment
MavenRepositoryDeployer deployer = new MavenRepositoryDeployer(mvnCtx, mvnUser, mvnPassword.orElse(""), mvnRepo, deploymentPath);
MavenRepositoryDeployer deployer = new MavenRepositoryDeployer(mvnCtx, mvnUser, mvnPassword.orElse(""), mvnRepo, serverId, deploymentPath);
deployer.deploy();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.redhat.hacbs.container.deploy.mavenrepository;

import static org.apache.commons.lang3.StringUtils.isNotEmpty;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
Expand All @@ -11,14 +13,12 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.deployment.DeployRequest;
import org.eclipse.aether.deployment.DeploymentException;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.util.repository.AuthenticationBuilder;

Expand All @@ -37,33 +37,44 @@

private final RepositorySystem system;

private final DefaultRepositorySystemSession session;
private final RepositorySystemSession session;

private final String serverId;

public MavenRepositoryDeployer(BootstrapMavenContext mvnCtx, String username, String password, String repository, Path artifacts)
public MavenRepositoryDeployer(BootstrapMavenContext mvnCtx, String username, String password, String repository, String serverId, Path artifacts)
throws BootstrapMavenException {
this.username = username;
this.password = password;
this.repository = repository;
this.artifacts = artifacts;
this.serverId = serverId;

this.system = mvnCtx.getRepositorySystem();
this.session = MavenRepositorySystemUtils.newSession();

Log.infof("Maven credentials are username '%s' and repository '%s'", username, repository);

// https://maven.apache.org/resolver/third-party-integrations.html states a local repository manager should be added.
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, new LocalRepository(artifacts.toFile())));
// Note - we were using MavenRepositorySystemUtils.newSession but that doesn't correctly process
// the settings.xml without an active project.
this.session = mvnCtx.getRepositorySystemSession();
}

public void deploy()
throws IOException {
RemoteRepository distRepo = new RemoteRepository.Builder("repo",
RemoteRepository result;
RemoteRepository initial = new RemoteRepository.Builder(serverId,
"default",
repository)
.setAuthentication(new AuthenticationBuilder().addUsername(username)
.addPassword(password).build())
.build();
repository).build();
RemoteRepository.Builder builder = new RemoteRepository.Builder(initial);

if (isNotEmpty(username)) {
builder.setAuthentication(new AuthenticationBuilder().addUsername(username)
.addPassword(password).build());

Check warning on line 68 in java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/deploy/mavenrepository/MavenRepositoryDeployer.java

View check run for this annotation

Codecov / codecov/patch

java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/deploy/mavenrepository/MavenRepositoryDeployer.java#L67-L68

Added lines #L67 - L68 were not covered by tests
} else {
builder.setAuthentication(session.getAuthenticationSelector().getAuthentication(initial));
}
if (initial.getProxy() == null) {
builder.setProxy(session.getProxySelector().getProxy(initial));
}
result = builder.build();

Log.infof("Configured repository %s", result);

Files.walkFileTree(artifacts,
new SimpleFileVisitor<>() {
Expand All @@ -75,8 +86,11 @@
List<Path> files = stream.sorted().toList();
boolean hasPom = files.stream().anyMatch(s -> s.toString().endsWith(".pom"));
if (hasPom) {

Path relative = artifacts.relativize(dir);
if (relative.getNameCount() <= 2) {
Log.errorf("Invalid repository format. Local directory is '%s' with relative path '%s' and not enough components to calculate groupId and artifactId", artifacts, relative);

Check warning on line 91 in java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/deploy/mavenrepository/MavenRepositoryDeployer.java

View check run for this annotation

Codecov / codecov/patch

java-components/build-request-processor/src/main/java/com/redhat/hacbs/container/deploy/mavenrepository/MavenRepositoryDeployer.java#L91

Added line #L91 was not covered by tests
}
// If we're in org/foobar/artifact/1.0 then the group is two up and the artifact is one up.
String group = relative.getParent().getParent().toString().replace(File.separatorChar,
'.');
String artifact = relative.getParent().getFileName().toString();
Expand All @@ -86,16 +100,16 @@
+ version);
Pattern p = Pattern
.compile(artifact + "-" + version + "(-(\\w+))?\\.(\\w+)");

DeployRequest deployRequest = new DeployRequest();
deployRequest.setRepository(distRepo);
deployRequest.setRepository(result);
for (var i : files) {
Matcher matcher = p.matcher(i.getFileName().toString());
if (matcher.matches()) {
Artifact jarArtifact = new DefaultArtifact(group, artifact,
matcher.group(2),
matcher.group(3),
version);
Log.infof("Uploading %s", jarArtifact);
jarArtifact = jarArtifact.setFile(i.toFile());
deployRequest.addArtifact(jarArtifact);
}
Expand Down
Loading