Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support disabling Maven Snapshot dependency Resolution & Set Update Policy #818

Merged
merged 1 commit into from
Feb 26, 2025
Merged
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
@@ -51,7 +51,10 @@ private List<ArtifactRepository> getRepositories() {
List<ArtifactRepository> repositories = new ArrayList<>();
ProxySelector proxySelector = new ProxySelector(resolutionHelper.getHttpProxyHost(), resolutionHelper.getHttpProxyPort(), resolutionHelper.getHttpProxyUsername(), resolutionHelper.getHttpProxyPassword(), resolutionHelper.getHttpsProxyHost(), resolutionHelper.getHttpsProxyPort(), resolutionHelper.getHttpsProxyUsername(), resolutionHelper.getHttpsProxyPassword(), resolutionHelper.getNoProxy());

ArtifactoryPluginResolution artifactoryResolution = new ArtifactoryPluginResolution(resolutionHelper.getRepoReleaseUrl(), resolutionHelper.getRepoSnapshotUrl(), resolutionHelper.getRepoUsername(), resolutionHelper.getRepoPassword(), proxySelector, resolutionHelper.getLogger());
boolean isSnapshotEnabled = !resolutionHelper.isSnapshotDisabled();
ArtifactoryPluginResolution artifactoryResolution = new ArtifactoryPluginResolution(resolutionHelper.getRepoReleaseUrl(), resolutionHelper.getRepoSnapshotUrl(), resolutionHelper.getRepoUsername(), resolutionHelper.getRepoPassword(), proxySelector, resolutionHelper.getLogger())
.setSnapshotEnabled(isSnapshotEnabled)
.setSnapshotUpdatePolicy(resolutionHelper.getSnapshotUpdatePolicy());
ArtifactRepository snapshotRepository = artifactoryResolution.createSnapshotRepository();
if (snapshotRepository != null) {
repositories.add(snapshotRepository);
Original file line number Diff line number Diff line change
@@ -43,8 +43,7 @@ void initResolutionRepositories(RepositorySystemSession session) {
List<RemoteRepository> getResolutionRepositories(RepositorySystemSession session) {
if (resolutionRepositories.isEmpty()) {
initResolutionHelper(session);
org.jfrog.build.extractor.ProxySelector proxySelector = new org.jfrog.build.extractor.ProxySelector(resolutionHelper.getHttpProxyHost(), resolutionHelper.getHttpProxyPort(), resolutionHelper.getHttpProxyUsername(), resolutionHelper.getHttpProxyPassword(), resolutionHelper.getHttpsProxyHost(), resolutionHelper.getHttpsProxyPort(), resolutionHelper.getHttpsProxyUsername(), resolutionHelper.getHttpsProxyPassword(), resolutionHelper.getNoProxy());
ArtifactoryResolution artifactoryResolution = new ArtifactoryResolution(resolutionHelper.getRepoReleaseUrl(), resolutionHelper.getRepoSnapshotUrl(), resolutionHelper.getRepoUsername(), resolutionHelper.getRepoPassword(), proxySelector, logger);
ArtifactoryResolution artifactoryResolution = getArtifactoryResolution();
snapshotRepository = artifactoryResolution.createSnapshotRepository();
if (snapshotRepository != null) {
resolutionRepositories.add(snapshotRepository);
@@ -57,6 +56,13 @@ List<RemoteRepository> getResolutionRepositories(RepositorySystemSession session
return resolutionRepositories;
}

private ArtifactoryResolution getArtifactoryResolution() {
ProxySelector proxySelector = new ProxySelector(resolutionHelper.getHttpProxyHost(), resolutionHelper.getHttpProxyPort(), resolutionHelper.getHttpProxyUsername(), resolutionHelper.getHttpProxyPassword(), resolutionHelper.getHttpsProxyHost(), resolutionHelper.getHttpsProxyPort(), resolutionHelper.getHttpsProxyUsername(), resolutionHelper.getHttpsProxyPassword(), resolutionHelper.getNoProxy());
return new ArtifactoryResolution(resolutionHelper.getRepoReleaseUrl(), resolutionHelper.getRepoSnapshotUrl(), resolutionHelper.getRepoUsername(), resolutionHelper.getRepoPassword(), proxySelector, logger)
.setSnapshotEnabled(isSnapshotEnabled())
.setSnapshotUpdatePolicy(resolutionHelper.getSnapshotUpdatePolicy());
}

private void initResolutionHelper(RepositorySystemSession session) {
if (resolutionHelper.isInitialized()) {
return;
@@ -70,8 +76,7 @@ private void initResolutionHelper(RepositorySystemSession session) {
List<ArtifactRepository> getResolutionPluginRepositories(RepositorySystemSession session) {
if (resolutionPluginRepositories.isEmpty()) {
initResolutionHelper(session);
ProxySelector proxySelector = new ProxySelector(resolutionHelper.getHttpProxyHost(), resolutionHelper.getHttpProxyPort(), resolutionHelper.getHttpProxyUsername(), resolutionHelper.getHttpProxyPassword(), resolutionHelper.getHttpsProxyHost(), resolutionHelper.getHttpsProxyPort(), resolutionHelper.getHttpsProxyUsername(), resolutionHelper.getHttpsProxyPassword(), resolutionHelper.getNoProxy());
ArtifactoryPluginResolution repositoryBuilder = new ArtifactoryPluginResolution(resolutionHelper.getRepoReleaseUrl(), resolutionHelper.getRepoSnapshotUrl(), resolutionHelper.getRepoUsername(), resolutionHelper.getRepoPassword(), proxySelector, logger);
ArtifactoryPluginResolution repositoryBuilder = getArtifactoryPluginResolution();
ArtifactRepository snapshotRepository = repositoryBuilder.createSnapshotRepository();
if (snapshotRepository != null) {
resolutionPluginRepositories.add(snapshotRepository);
@@ -84,6 +89,13 @@ List<ArtifactRepository> getResolutionPluginRepositories(RepositorySystemSession
return resolutionPluginRepositories;
}

private ArtifactoryPluginResolution getArtifactoryPluginResolution() {
ProxySelector proxySelector = new ProxySelector(resolutionHelper.getHttpProxyHost(), resolutionHelper.getHttpProxyPort(), resolutionHelper.getHttpProxyUsername(), resolutionHelper.getHttpProxyPassword(), resolutionHelper.getHttpsProxyHost(), resolutionHelper.getHttpsProxyPort(), resolutionHelper.getHttpsProxyUsername(), resolutionHelper.getHttpsProxyPassword(), resolutionHelper.getNoProxy());
return new ArtifactoryPluginResolution(resolutionHelper.getRepoReleaseUrl(), resolutionHelper.getRepoSnapshotUrl(), resolutionHelper.getRepoUsername(), resolutionHelper.getRepoPassword(), proxySelector, logger)
.setSnapshotEnabled(isSnapshotEnabled())
.setSnapshotUpdatePolicy(resolutionHelper.getSnapshotUpdatePolicy());
}

RemoteRepository getSnapshotRepository(RepositorySystemSession session) {
// Init repositories configured in the Artifactory plugin:
initResolutionRepositories(session);
@@ -99,4 +111,8 @@ RemoteRepository getReleaseRepository(RepositorySystemSession session) {

return releaseRepository;
}

private boolean isSnapshotEnabled() {
return !resolutionHelper.isSnapshotDisabled();
}
}
Original file line number Diff line number Diff line change
@@ -13,29 +13,43 @@
* Those repositories will replace the default Maven repositories.
*/
public class ArtifactoryPluginResolution extends ArtifactoryResolutionRepositoryBase {
private boolean isSnapshotEnabled;
private String snapshotUpdatePolicy;

public ArtifactoryPluginResolution(String repoReleaseUrl, String snapshotRepoUrl, String repoUsername, String repoPassword, ProxySelector proxySelector, Logger logger) {
super(repoReleaseUrl, snapshotRepoUrl, repoUsername, repoPassword, proxySelector, logger);
this.isSnapshotEnabled = true;
this.snapshotUpdatePolicy = ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY;
}

public ArtifactRepository createSnapshotRepository() {
if (super.shouldCreateSnapshotRepository()) {
return createDefaultRepository(snapshotRepoUrl, "artifactory-snapshot", false, true);
return createDefaultRepository(snapshotRepoUrl, "artifactory-snapshot", false, this.isSnapshotEnabled, this.snapshotUpdatePolicy);
}
return null;
}

public ArtifactRepository createReleaseRepository() {
if (super.shouldCreateReleaseRepository()) {
String repositoryId = snapshotPolicyEnabled() ? "artifactory-release-snapshot" : "artifactory-release";
return createDefaultRepository(releaseRepoUrl, repositoryId, true, snapshotPolicyEnabled());
return createDefaultRepository(releaseRepoUrl, repositoryId, true, snapshotPolicyEnabled(), this.snapshotUpdatePolicy);
}
return null;
}

private ArtifactRepository createDefaultRepository(String repoUrl, String repoId, boolean releasePolicy, Boolean snapshotPolicy) {
public ArtifactoryPluginResolution setSnapshotEnabled(boolean isSnapshotEnabled) {
this.isSnapshotEnabled = isSnapshotEnabled;
return this;
}

public ArtifactoryPluginResolution setSnapshotUpdatePolicy(String snapshotUpdatePolicy) {
this.snapshotUpdatePolicy = snapshotUpdatePolicy;
return this;
}

private ArtifactRepository createDefaultRepository(String repoUrl, String repoId, boolean releasePolicy, Boolean snapshotPolicy, String snapshotUpdatePolicy) {
ArtifactRepository repository = new MavenArtifactRepository();
setPolicy(repository, releasePolicy, snapshotPolicy);
setPolicy(repository, releasePolicy, snapshotPolicy, snapshotUpdatePolicy);
repository.setLayout(new DefaultRepositoryLayout());
repository.setUrl(repoUrl);
repository.setId(repoId);
@@ -44,10 +58,10 @@ private ArtifactRepository createDefaultRepository(String repoUrl, String repoId
return repository;
}

private void setPolicy(ArtifactRepository snapshotPluginRepository, boolean releasePolicyEnabled, boolean snapshotPolicyEnabled) {
private void setPolicy(ArtifactRepository snapshotPluginRepository, boolean releasePolicyEnabled, boolean snapshotPolicyEnabled, String snapshotUpdatePolicy) {
ArtifactRepositoryPolicy releasePolicy = new ArtifactRepositoryPolicy(releasePolicyEnabled, ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN);
snapshotPluginRepository.setReleaseUpdatePolicy(releasePolicy);
ArtifactRepositoryPolicy snapshotPolicy = new ArtifactRepositoryPolicy(snapshotPolicyEnabled, ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN);
ArtifactRepositoryPolicy snapshotPolicy = new ArtifactRepositoryPolicy(snapshotPolicyEnabled, snapshotUpdatePolicy, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN);
snapshotPluginRepository.setSnapshotUpdatePolicy(snapshotPolicy);
}

Original file line number Diff line number Diff line change
@@ -13,31 +13,45 @@
* Those repositories will be used instead of the default maven repositories.
*/
public class ArtifactoryResolution extends ArtifactoryResolutionRepositoryBase {
private boolean isSnapshotEnabled;
private String snapshotUpdatePolicy;

public ArtifactoryResolution(String repoReleaseUrl, String snapshotRepoUrl, String repoUsername, String repoPassword, ProxySelector proxySelector, Logger logger) {
super(repoReleaseUrl, snapshotRepoUrl, repoUsername, repoPassword, proxySelector, logger);
this.isSnapshotEnabled = true;
this.snapshotUpdatePolicy = RepositoryPolicy.UPDATE_POLICY_DAILY;
}

public RemoteRepository createSnapshotRepository() {
if (super.shouldCreateSnapshotRepository()) {
return createRepository(snapshotRepoUrl, "artifactory-snapshot", false, true);
return createRepository(snapshotRepoUrl, "artifactory-snapshot", false, this.isSnapshotEnabled, this.snapshotUpdatePolicy);
}
return null;
}

public RemoteRepository createReleaseRepository() {
if (shouldCreateReleaseRepository()) {
String repositoryId = snapshotPolicyEnabled() ? "artifactory-release-snapshot" : "artifactory-release";
return createRepository(releaseRepoUrl, repositoryId, true, snapshotPolicyEnabled());
return createRepository(releaseRepoUrl, repositoryId, true, snapshotPolicyEnabled(), this.snapshotUpdatePolicy);
}
return null;
}

private RemoteRepository createRepository(String repoUrl, String repoId, boolean releasePolicy, Boolean snapshotPolicy) {
public ArtifactoryResolution setSnapshotEnabled(boolean isSnapshotEnabled) {
this.isSnapshotEnabled = isSnapshotEnabled;
return this;
}

public ArtifactoryResolution setSnapshotUpdatePolicy(String snapshotUpdatePolicy) {
this.snapshotUpdatePolicy = snapshotUpdatePolicy;
return this;
}

private RemoteRepository createRepository(String repoUrl, String repoId, boolean releasePolicy, Boolean snapshotPolicy, String snapshotUpdatePolicy) {
RemoteRepository.Builder builder = new RemoteRepository.Builder(repoId, "default", repoUrl);
setAuthentication(builder);
setProxy(builder, repoUrl);
setPolicy(builder, releasePolicy, snapshotPolicy);
setPolicy(builder, releasePolicy, snapshotPolicy, snapshotUpdatePolicy);
return builder.build();
}

@@ -49,10 +63,10 @@ private void setAuthentication(RemoteRepository.Builder builder) {
}
}

private void setPolicy(RemoteRepository.Builder builder, boolean releasePolicyEnabled, boolean snapshotPolicyEnabled) {
private void setPolicy(RemoteRepository.Builder builder, boolean releasePolicyEnabled, boolean snapshotPolicyEnabled, String snapshotUpdatePolicy) {
RepositoryPolicy releasePolicy = new RepositoryPolicy(releasePolicyEnabled, RepositoryPolicy.UPDATE_POLICY_DAILY, RepositoryPolicy.CHECKSUM_POLICY_WARN);
builder.setReleasePolicy(releasePolicy);
RepositoryPolicy snapshotPolicy = new RepositoryPolicy(snapshotPolicyEnabled, RepositoryPolicy.UPDATE_POLICY_DAILY, RepositoryPolicy.CHECKSUM_POLICY_WARN);
RepositoryPolicy snapshotPolicy = new RepositoryPolicy(snapshotPolicyEnabled, snapshotUpdatePolicy, RepositoryPolicy.CHECKSUM_POLICY_WARN);
builder.setSnapshotPolicy(snapshotPolicy);
}

Original file line number Diff line number Diff line change
@@ -113,6 +113,10 @@ public String getHttpsProxyPassword() {
return internalConfiguration.httpsProxy.getPassword();
}

public boolean isSnapshotDisabled() { return internalConfiguration.resolver.isSnapshotDisabled(); }

public String getSnapshotUpdatePolicy() { return internalConfiguration.resolver.getSnapshotUpdatePolicy(); }

public Logger getLogger() {
return logger;
}
Original file line number Diff line number Diff line change
@@ -9,6 +9,7 @@
import org.jfrog.build.extractor.ci.Issue;
import org.jfrog.build.extractor.clientConfiguration.util.IssuesTrackerUtils;
import org.jfrog.build.extractor.clientConfiguration.util.encryption.EncryptionKeyPair;
import org.eclipse.aether.repository.RepositoryPolicy;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
@@ -786,6 +787,14 @@ public String getRepoKey() {
return getStringValue(REPO_KEY);
}

public Boolean isSnapshotDisabled() {
return getBooleanValue(SNAPSHOTS_DISABLED, false);
}

public String getSnapshotUpdatePolicy() {
return getStringValue(SNAPSHOT_UPDATE_POLICY, RepositoryPolicy.UPDATE_POLICY_DAILY);
}

public void setRepoKey(String repoKey) {
setStringValue(REPO_KEY, repoKey);
}
Original file line number Diff line number Diff line change
@@ -30,6 +30,8 @@ public interface ClientConfigurationFields {
String DOCKER_HOST = "docker.host";
String URL = "url";
String REPO_KEY = "repoKey";
String SNAPSHOTS_DISABLED = "snapshots.disabled";
String SNAPSHOT_UPDATE_POLICY = "snapshots.updatePolicy";
String DOWN_SNAPSHOT_REPO_KEY = "downSnapshotRepoKey";
// Publish fields
String PUBLISH_ARTIFACTS = "artifacts";
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -334,6 +334,7 @@ project('build-info-extractor') {
dependencies {
implementation project(':build-info-client')
implementation project(':build-info-api')
implementation "org.eclipse.aether:aether-api:$eclipseAetherVersion"

testImplementation "org.easymock:easymockclassextension:$easymockclassextensionVersion"
testImplementation('org.mock-server:mockserver-netty:5.15.0') {
Loading
Oops, something went wrong.