Skip to content

Commit f8a0955

Browse files
committed
Support for configuring snapshot policy enablement and update for Maven projects
1 parent 9c9bcb5 commit f8a0955

File tree

7 files changed

+43
-20
lines changed

7 files changed

+43
-20
lines changed

build-info-extractor-maven3/src/main/java/org/jfrog/build/extractor/maven/resolver/ArtifactoryEclipseResolversHelper.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ void initResolutionRepositories(RepositorySystemSession session) {
4343
List<RemoteRepository> getResolutionRepositories(RepositorySystemSession session) {
4444
if (resolutionRepositories.isEmpty()) {
4545
initResolutionHelper(session);
46-
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());
47-
ArtifactoryResolution artifactoryResolution = new ArtifactoryResolution(resolutionHelper.getRepoReleaseUrl(), resolutionHelper.getRepoSnapshotUrl(), resolutionHelper.getRepoUsername(), resolutionHelper.getRepoPassword(), proxySelector, logger);
48-
snapshotRepository = artifactoryResolution.createSnapshotRepository();
46+
ArtifactoryResolution artifactoryResolution = getArtifactoryResolution();
47+
boolean isSnapshotEnabled = !resolutionHelper.isSnapshotDisabled();
48+
snapshotRepository = artifactoryResolution.createSnapshotRepository(isSnapshotEnabled, resolutionHelper.getSnapshotUpdatePolicy());
4949
if (snapshotRepository != null) {
5050
resolutionRepositories.add(snapshotRepository);
5151
}
@@ -57,6 +57,12 @@ List<RemoteRepository> getResolutionRepositories(RepositorySystemSession session
5757
return resolutionRepositories;
5858
}
5959

60+
private ArtifactoryResolution getArtifactoryResolution() {
61+
ProxySelector proxySelector = new ProxySelector(resolutionHelper.getHttpProxyHost(), resolutionHelper.getHttpProxyPort(), resolutionHelper.getHttpProxyUsername(), resolutionHelper.getHttpProxyPassword(), resolutionHelper.getHttpsProxyHost(), resolutionHelper.getHttpsProxyPort(), resolutionHelper.getHttpsProxyUsername(), resolutionHelper.getHttpsProxyPassword(), resolutionHelper.getNoProxy());
62+
ArtifactoryResolution artifactoryResolution = new ArtifactoryResolution(resolutionHelper.getRepoReleaseUrl(), resolutionHelper.getRepoSnapshotUrl(), resolutionHelper.getRepoUsername(), resolutionHelper.getRepoPassword(), proxySelector, logger);
63+
return artifactoryResolution;
64+
}
65+
6066
private void initResolutionHelper(RepositorySystemSession session) {
6167
if (resolutionHelper.isInitialized()) {
6268
return;

build-info-extractor-maven3/src/main/java/org/jfrog/build/extractor/maven/resolver/ArtifactoryResolution.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,26 @@ public ArtifactoryResolution(String repoReleaseUrl, String snapshotRepoUrl, Stri
1818
super(repoReleaseUrl, snapshotRepoUrl, repoUsername, repoPassword, proxySelector, logger);
1919
}
2020

21-
public RemoteRepository createSnapshotRepository() {
21+
public RemoteRepository createSnapshotRepository(boolean isSnapshotEnabled, String snapshotUpdatePolicy) {
2222
if (super.shouldCreateSnapshotRepository()) {
23-
return createRepository(snapshotRepoUrl, "artifactory-snapshot", false, true);
23+
return createRepository(snapshotRepoUrl, "artifactory-snapshot", false, isSnapshotEnabled, snapshotUpdatePolicy);
2424
}
2525
return null;
2626
}
2727

2828
public RemoteRepository createReleaseRepository() {
2929
if (shouldCreateReleaseRepository()) {
3030
String repositoryId = snapshotPolicyEnabled() ? "artifactory-release-snapshot" : "artifactory-release";
31-
return createRepository(releaseRepoUrl, repositoryId, true, snapshotPolicyEnabled());
31+
return createRepository(releaseRepoUrl, repositoryId, true, snapshotPolicyEnabled(), null);
3232
}
3333
return null;
3434
}
3535

36-
private RemoteRepository createRepository(String repoUrl, String repoId, boolean releasePolicy, Boolean snapshotPolicy) {
36+
private RemoteRepository createRepository(String repoUrl, String repoId, boolean releasePolicy, Boolean snapshotPolicy, String snapshotUpdatePolicy) {
3737
RemoteRepository.Builder builder = new RemoteRepository.Builder(repoId, "default", repoUrl);
3838
setAuthentication(builder);
3939
setProxy(builder, repoUrl);
40-
setPolicy(builder, releasePolicy, snapshotPolicy);
40+
setPolicy(builder, releasePolicy, snapshotPolicy, snapshotUpdatePolicy);
4141
return builder.build();
4242
}
4343

@@ -49,10 +49,11 @@ private void setAuthentication(RemoteRepository.Builder builder) {
4949
}
5050
}
5151

52-
private void setPolicy(RemoteRepository.Builder builder, boolean releasePolicyEnabled, boolean snapshotPolicyEnabled) {
52+
private void setPolicy(RemoteRepository.Builder builder, boolean releasePolicyEnabled, boolean snapshotPolicyEnabled, String snapshotUpdatePolicy) {
53+
snapshotUpdatePolicy = snapshotUpdatePolicy == null ? RepositoryPolicy.UPDATE_POLICY_DAILY : snapshotUpdatePolicy;
5354
RepositoryPolicy releasePolicy = new RepositoryPolicy(releasePolicyEnabled, RepositoryPolicy.UPDATE_POLICY_DAILY, RepositoryPolicy.CHECKSUM_POLICY_WARN);
5455
builder.setReleasePolicy(releasePolicy);
55-
RepositoryPolicy snapshotPolicy = new RepositoryPolicy(snapshotPolicyEnabled, RepositoryPolicy.UPDATE_POLICY_DAILY, RepositoryPolicy.CHECKSUM_POLICY_WARN);
56+
RepositoryPolicy snapshotPolicy = new RepositoryPolicy(snapshotPolicyEnabled, snapshotUpdatePolicy, RepositoryPolicy.CHECKSUM_POLICY_WARN);
5657
builder.setSnapshotPolicy(snapshotPolicy);
5758
}
5859

build-info-extractor-maven3/src/main/java/org/jfrog/build/extractor/maven/resolver/ResolutionHelper.java

+4
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ public String getHttpsProxyPassword() {
113113
return internalConfiguration.httpsProxy.getPassword();
114114
}
115115

116+
public boolean isSnapshotDisabled() { return internalConfiguration.resolver.isSnapshotDisabled(); }
117+
118+
public String getSnapshotUpdatePolicy() { return internalConfiguration.resolver.getSnapshotUpdatePolicy(); }
119+
116120
public Logger getLogger() {
117121
return logger;
118122
}

build-info-extractor-maven3/src/test/java/org/jfrog/build/extractor/maven/resolver/ArtifactoryResolutionTest.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class ArtifactoryResolutionTest {
4545
public void setup() {
4646
proxySelector = new ProxySelector(HTTP_PROXY_URL, HTTP_PROXY_PORT, HTTP_PROXY_USERNAME, HTTP_PROXY_PASSWORD, HTTPS_PROXY_URL, HTTPS_PROXY_PORT, HTTPS_PROXY_USERNAME, HTTPS_PROXY_PASSWORD, NO_PROXY_PATTERN);
4747
artifactoryResolution = new ArtifactoryResolution(HTTPS_RELEASE_URL, SNAPSHOT_URL, USERNAME, PASSWORD, proxySelector, new NullPlexusLog());
48-
snapshotRepository = artifactoryResolution.createSnapshotRepository();
48+
snapshotRepository = artifactoryResolution.createSnapshotRepository(true, null);
4949
releaseRepository = artifactoryResolution.createReleaseRepository();
5050
artifactoryResolutionOnlyRelease = new ArtifactoryResolution(HTTPS_RELEASE_URL, null, USERNAME, PASSWORD, proxySelector, new NullPlexusLog());
5151
releaseSnapshotRepository = artifactoryResolutionOnlyRelease.createReleaseRepository();
@@ -145,40 +145,40 @@ public void testNullProxyForRepoWithNoHttpInUrl() {
145145
public void testNullProxyWithNoPassword() {
146146
ProxySelector customProxySelector = new ProxySelector(HTTP_PROXY_URL, HTTP_PROXY_PORT, HTTP_PROXY_USERNAME, null, null, 0, null, null, null);
147147
ArtifactoryResolution repository = new ArtifactoryResolution(RELEASE_URL, HTTP_RELEASE_URL, USERNAME, PASSWORD, customProxySelector, new NullPlexusLog());
148-
assertNotNull(repository.createSnapshotRepository().getProxy());
148+
assertNotNull(repository.createSnapshotRepository(true, null).getProxy());
149149
}
150150

151151
@Test(description = "Check null proxy is returned if repository url does not contains http(s) prefix.")
152152
public void testNullProxyWithNoUsername() {
153153
ProxySelector customProxySelector = new ProxySelector(HTTP_PROXY_URL, HTTP_PROXY_PORT, null, HTTP_PROXY_PASSWORD, null, 0, null, null, null);
154154
ArtifactoryResolution repository = new ArtifactoryResolution(RELEASE_URL, HTTP_RELEASE_URL, USERNAME, PASSWORD, customProxySelector, new NullPlexusLog());
155-
assertNotNull(repository.createSnapshotRepository().getProxy());
155+
assertNotNull(repository.createSnapshotRepository(true, null).getProxy());
156156
}
157157

158158
@Test(description = "Check null proxy is returned if repository url does not contains http(s) prefix.")
159159
public void testNullProxyWithNoPort() {
160160
ProxySelector customProxySelector = new ProxySelector(HTTP_PROXY_URL, 0, HTTP_PROXY_USERNAME, HTTP_PROXY_PASSWORD, null, 0, null, null, null);
161161
ArtifactoryResolution repository = new ArtifactoryResolution(RELEASE_URL, HTTP_RELEASE_URL, USERNAME, PASSWORD, customProxySelector, new NullPlexusLog());
162-
assertNull(repository.createSnapshotRepository().getProxy());
162+
assertNull(repository.createSnapshotRepository(true, null).getProxy());
163163
}
164164

165165
@Test(description = "Check null proxy is returned if repository url does not contains http(s) prefix.")
166166
public void testNullProxyWithNoHost() {
167167
ProxySelector customProxySelector = new ProxySelector(null, HTTP_PROXY_PORT, HTTP_PROXY_USERNAME, HTTP_PROXY_PASSWORD, null, 0, null, null, null);
168168
ArtifactoryResolution repository = new ArtifactoryResolution(RELEASE_URL, HTTP_RELEASE_URL, USERNAME, PASSWORD, customProxySelector, new NullPlexusLog());
169-
assertNull(repository.createSnapshotRepository().getProxy());
169+
assertNull(repository.createSnapshotRepository(true, null).getProxy());
170170
}
171171

172172
@Test(description = "In the case of 'http.nonProxyHosts' matching the repository URL with 'http' prefix, null is returned from getProxy().")
173173
public void testNullProxyOnNoProxyPatternMatch() {
174174
ArtifactoryResolution artifactoryResolutionWithNoHttp = new ArtifactoryResolution(HTTP_RELEASE_URL, "http://" + NO_PROXY_PATTERN, USERNAME, PASSWORD, proxySelector, new NullPlexusLog());
175-
assertNull(artifactoryResolutionWithNoHttp.createSnapshotRepository().getProxy());
175+
assertNull(artifactoryResolutionWithNoHttp.createSnapshotRepository(true, null).getProxy());
176176
}
177177

178178
@Test(description = "In the case of 'http.nonProxyHosts' matching the repository URL with 'https' prefix, null is returned from getProxy().")
179179
public void TestNullProxyHttps() {
180180
ArtifactoryResolution artifactoryResolutionWithNoHttp = new ArtifactoryResolution(HTTP_RELEASE_URL, "https://" + NO_PROXY_PATTERN, USERNAME, PASSWORD, proxySelector, new NullPlexusLog());
181-
assertNull(artifactoryResolutionWithNoHttp.createSnapshotRepository().getProxy());
181+
assertNull(artifactoryResolutionWithNoHttp.createSnapshotRepository(true, null).getProxy());
182182
}
183183

184184
@Test(description = "In the case of 'http.nonProxyHosts' with multiple hosts that one of them is matching the repository URL, null is returned from getProxy().")
@@ -188,7 +188,7 @@ public void TestMultipleNoProxy() {
188188
// Act
189189
ArtifactoryResolution artifactoryResolutionWithNoHttp = new ArtifactoryResolution(HTTP_RELEASE_URL, "https://" + NO_PROXY_PATTERN, USERNAME, PASSWORD, multipleNoHostsProxySelector, new NullPlexusLog());
190190
// Assert
191-
assertNull(artifactoryResolutionWithNoHttp.createSnapshotRepository().getProxy());
191+
assertNull(artifactoryResolutionWithNoHttp.createSnapshotRepository(true, null).getProxy());
192192
}
193193

194194
@Test(description = "HTTP proxy is configured, but HTTPS isn't => a valid proxy return.")
@@ -208,7 +208,7 @@ public void testOnlyHttpsProxyConfigured() {
208208
// Act
209209
ArtifactoryResolution artifactoryResolutionWithNoHttp = new ArtifactoryResolution(HTTP_RELEASE_URL, SNAPSHOT_URL, USERNAME, PASSWORD, customProxySelector, new NullPlexusLog());
210210
// Assert
211-
assertNotNull(artifactoryResolutionWithNoHttp.createSnapshotRepository().getProxy());
211+
assertNotNull(artifactoryResolutionWithNoHttp.createSnapshotRepository(true, null).getProxy());
212212
}
213213

214214
@Test(description = "HTTP proxy is configured, HTTPS is not, and repository URL starts with HTTPS => no proxy return.")
@@ -218,6 +218,6 @@ public void testHttpProxyWithRepoHttps() {
218218
// Act
219219
ArtifactoryResolution resolutionRepository = new ArtifactoryResolution(HTTP_RELEASE_URL, SNAPSHOT_URL, USERNAME, PASSWORD, customProxySelector, new NullPlexusLog());
220220
// Assert
221-
assertNull(resolutionRepository.createSnapshotRepository().getProxy());
221+
assertNull(resolutionRepository.createSnapshotRepository(true, null).getProxy());
222222
}
223223
}

build-info-extractor/src/main/java/org/jfrog/build/extractor/clientConfiguration/ArtifactoryClientConfiguration.java

+9
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.jfrog.build.extractor.ci.Issue;
1010
import org.jfrog.build.extractor.clientConfiguration.util.IssuesTrackerUtils;
1111
import org.jfrog.build.extractor.clientConfiguration.util.encryption.EncryptionKeyPair;
12+
import org.eclipse.aether.repository.RepositoryPolicy;
1213

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

790+
public Boolean isSnapshotDisabled() {
791+
return getBooleanValue(SNAPSHOTS_DISABLED, false);
792+
}
793+
794+
public String getSnapshotUpdatePolicy() {
795+
return getStringValue(SNAPSHOT_UPDATE_POLICY, RepositoryPolicy.UPDATE_POLICY_DAILY);
796+
}
797+
789798
public void setRepoKey(String repoKey) {
790799
setStringValue(REPO_KEY, repoKey);
791800
}

build-info-extractor/src/main/java/org/jfrog/build/extractor/clientConfiguration/ClientConfigurationFields.java

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public interface ClientConfigurationFields {
3030
String DOCKER_HOST = "docker.host";
3131
String URL = "url";
3232
String REPO_KEY = "repoKey";
33+
String SNAPSHOTS_DISABLED = "snapshots.disabled";
34+
String SNAPSHOT_UPDATE_POLICY = "snapshots.updatePolicy";
3335
String DOWN_SNAPSHOT_REPO_KEY = "downSnapshotRepoKey";
3436
// Publish fields
3537
String PUBLISH_ARTIFACTS = "artifacts";

build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ project('build-info-extractor') {
334334
dependencies {
335335
implementation project(':build-info-client')
336336
implementation project(':build-info-api')
337+
implementation "org.eclipse.aether:aether-api:$eclipseAetherVersion"
337338

338339
testImplementation "org.easymock:easymockclassextension:$easymockclassextensionVersion"
339340
testImplementation('org.mock-server:mockserver-netty:5.15.0') {

0 commit comments

Comments
 (0)