Skip to content

Commit 9c47b6d

Browse files
committed
GAP-138 - Support new Ivy publishing mechanism
Basic tests and fixes
1 parent 33d8f9c commit 9c47b6d

File tree

6 files changed

+144
-60
lines changed

6 files changed

+144
-60
lines changed

Diff for: build-info-extractor-gradle/src/main/groovy/org/jfrog/gradle/plugin/artifactory/task/BuildInfoPublicationsTask.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.gradle.api.logging.Logging;
2727
import org.gradle.api.publish.Publication;
2828
import org.gradle.api.publish.PublicationContainer;
29+
import org.gradle.api.publish.PublishingExtension;
2930
import org.gradle.api.publish.ivy.IvyArtifact;
3031
import org.gradle.api.publish.ivy.IvyArtifactSet;
3132
import org.gradle.api.publish.ivy.IvyPublication;
@@ -76,7 +77,7 @@ public void publications(Object... publications) {
7677
for (Object publication : publications) {
7778
if (publication instanceof CharSequence) {
7879
Publication publicationObj = getProject().getExtensions()
79-
.getByType(PublicationContainer.class).findByName(publication.toString());
80+
.getByType(PublishingExtension.class).getPublications().findByName(publication.toString());
8081
if (publicationObj != null) {
8182
addPublication(publicationObj);
8283
} else {
@@ -104,6 +105,14 @@ private void addPublication(Publication publicationObj) {
104105
}
105106
}
106107

108+
public Set<IvyPublication> getIvyPublications() {
109+
return ivyPublications;
110+
}
111+
112+
public Set<MavenPublication> getMavenPublications() {
113+
return mavenPublications;
114+
}
115+
107116
public boolean hasPublications() {
108117
return !ivyPublications.isEmpty() || !mavenPublications.isEmpty();
109118
}

Diff for: build-info-extractor-gradle/src/test/groovy/org/jfrog/build/ArtifactoryConfigurationsPluginTest.groovy

+15-9
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ import org.jfrog.gradle.plugin.artifactory.task.BuildInfoConfigurationsTask
1414

1515
import static BuildInfoConfigurationsTask.BUILD_INFO_TASK_NAME
1616
import static org.jfrog.build.api.BuildInfoConfigProperties.PROP_PROPS_FILE
17+
import static org.jfrog.build.client.ClientConfigurationFields.ARTIFACT_SPECS
18+
import static org.jfrog.build.client.ClientConfigurationFields.IVY
19+
import static org.jfrog.build.client.ClientConfigurationFields.MAVEN
20+
import static org.jfrog.build.client.ClientConfigurationFields.PUBLISH_ARTIFACTS
21+
import static org.jfrog.build.client.ClientConfigurationFields.REPO_KEY
22+
import static org.jfrog.build.client.ClientProperties.PROP_PUBLISH_PREFIX
1723

1824
/**
1925
* @author freds
@@ -32,9 +38,9 @@ public class ArtifactoryConfigurationsPluginTest extends PluginTestBase {
3238
ArtifactoryConfigurationsPlugin artifactoryPlugin = new ArtifactoryConfigurationsPlugin()
3339

3440
// Disable resolving
35-
project.setProperty(ClientConfigurationFields.REPO_KEY, '')
36-
project.setProperty(ClientProperties.PROP_PUBLISH_PREFIX + ClientConfigurationFields.IVY, 'true')
37-
project.setProperty(ClientProperties.PROP_PUBLISH_PREFIX + ClientConfigurationFields.MAVEN, 'false')
41+
project.setProperty(REPO_KEY, '')
42+
project.setProperty(PROP_PUBLISH_PREFIX + IVY, 'true')
43+
project.setProperty(PROP_PUBLISH_PREFIX + MAVEN, 'false')
3844
javaPlugin.apply(project)
3945
artifactoryPlugin.apply(project)
4046

@@ -50,10 +56,10 @@ public class ArtifactoryConfigurationsPluginTest extends PluginTestBase {
5056
ArtifactoryConfigurationsPlugin artifactoryPlugin = new ArtifactoryConfigurationsPlugin()
5157

5258
// Disable resolving
53-
project.setProperty(ClientConfigurationFields.REPO_KEY, '')
54-
project.setProperty(ClientProperties.PROP_PUBLISH_PREFIX + ClientConfigurationFields.IVY, 'false')
55-
project.setProperty(ClientProperties.PROP_PUBLISH_PREFIX + ClientConfigurationFields.MAVEN, 'false')
56-
project.setProperty(ClientProperties.PROP_PUBLISH_PREFIX + ClientConfigurationFields.PUBLISH_ARTIFACTS, 'false')
59+
project.setProperty(REPO_KEY, '')
60+
project.setProperty(PROP_PUBLISH_PREFIX + IVY, 'false')
61+
project.setProperty(PROP_PUBLISH_PREFIX + MAVEN, 'false')
62+
project.setProperty(PROP_PUBLISH_PREFIX + PUBLISH_ARTIFACTS, 'false')
5763
javaPlugin.apply(project)
5864
artifactoryPlugin.apply(project)
5965

@@ -75,7 +81,7 @@ public class ArtifactoryConfigurationsPluginTest extends PluginTestBase {
7581
if (System.getProperty(PROP_PROPS_FILE)) {
7682
System.clearProperty(PROP_PROPS_FILE)
7783
}
78-
URL resource = getClass().getResource('/org/jfrog/build/build.gradle')
84+
URL resource = getClass().getResource('/org/jfrog/build/confPluginDslTest/build.gradle')
7985
def projDir = new File(resource.toURI()).getParentFile()
8086

8187
Project project = ProjectBuilder.builder().withProjectDir(projDir).build()
@@ -84,7 +90,7 @@ public class ArtifactoryConfigurationsPluginTest extends PluginTestBase {
8490
project.setProperty('ppom', false)
8591

8692
//Set artifact specs
87-
project.setProperty(ClientProperties.PROP_PUBLISH_PREFIX + ClientConfigurationFields.ARTIFACT_SPECS,
93+
project.setProperty(PROP_PUBLISH_PREFIX + ARTIFACT_SPECS,
8894
'archives com.jfrog:*:*:doc@* key1: val1, key2: val2\n' +
8995
'archives com.jfrog:*:*:src@* key3: val 3')
9096

Diff for: build-info-extractor-gradle/src/test/groovy/org/jfrog/build/ArtifactoryPublicationsPluginTest.groovy

+53-49
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package org.jfrog.build
33
import org.gradle.api.Project
44
import org.gradle.api.Task
55
import org.gradle.api.plugins.JavaPlugin
6+
import org.gradle.api.publish.PublishingExtension
7+
import org.gradle.api.publish.ivy.plugins.IvyPublishPlugin
8+
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin
69
import org.gradle.testfixtures.ProjectBuilder
710
import org.jfrog.build.client.ArtifactSpec
811
import org.jfrog.build.client.ClientConfigurationFields
@@ -27,6 +30,56 @@ public class ArtifactoryPublicationsPluginTest extends PluginTestBase {
2730
new ArtifactoryPublicationsPlugin()
2831
}
2932

33+
def populatePublicationFromDsl() {
34+
// Make sure no system props are set
35+
def propFileEnv = System.getenv(PROP_PROPS_FILE)
36+
if (propFileEnv != null && propFileEnv.length() > 0) {
37+
throw new RuntimeException("Cannot run test if environment variable " + PROP_PROPS_FILE + " is set")
38+
}
39+
if (System.getProperty(PROP_PROPS_FILE)) {
40+
System.clearProperty(PROP_PROPS_FILE)
41+
}
42+
URL resource = getClass().getResource('/org/jfrog/build/publishPluginDslTest/build.gradle')
43+
def projDir = new File(resource.toURI()).getParentFile()
44+
45+
Project project = ProjectBuilder.builder().withProjectDir(projDir).build()
46+
project.setProperty('testUserName', 'user1')
47+
project.setProperty('testPassword', 'p33p')
48+
project.setProperty('ppom', false)
49+
50+
//Set artifact specs
51+
project.setProperty(ClientProperties.PROP_PUBLISH_PREFIX + ClientConfigurationFields.ARTIFACT_SPECS,
52+
'archives com.jfrog:*:*:doc@* key1: val1, key2: val2\n' +
53+
'archives com.jfrog:*:*:src@* key3: val 3')
54+
55+
project.plugins.apply(JavaPlugin)
56+
project.plugins.apply(IvyPublishPlugin)
57+
project.plugins.apply(MavenPublishPlugin)
58+
project.plugins.apply(ArtifactoryPublicationsPlugin)
59+
60+
BuildInfoPublicationsTask buildInfoTask = project.tasks.findByName(BUILD_INFO_TASK_NAME)
61+
def clientConfig = ArtifactoryPluginUtil.getArtifactoryConvention(project).getClientConfig()
62+
project.evaluate()
63+
projectEvaluated(project)
64+
65+
expect:
66+
buildInfoTask.hasPublications()
67+
'[ext]user1' == clientConfig.publisher.username
68+
'p33p' == clientConfig.publisher.password
69+
!clientConfig.resolver.maven
70+
buildInfoTask.ivyPublications.size() == 1
71+
buildInfoTask.mavenPublications.size() == 1
72+
buildInfoTask.ivyPublications.iterator().next().name == 'ivyJava'
73+
buildInfoTask.mavenPublications.iterator().next().name == 'mavenJava'
74+
buildInfoTask.artifactSpecs[0].group == 'com.jfrog'
75+
buildInfoTask.artifactSpecs[0].classifier == 'doc'
76+
buildInfoTask.artifactSpecs[1].group == 'com.jfrog'
77+
buildInfoTask.artifactSpecs[1].classifier == 'src'
78+
buildInfoTask.artifactSpecs[1].properties['key3'] == 'val 3'
79+
buildInfoTask.artifactSpecs[2].group == 'org.jfrog'
80+
buildInfoTask.artifactSpecs[2].classifier == ArtifactSpec.WILDCARD
81+
}
82+
3083
/*
3184
def buildInfoTaskConfiguration() {
3285
Project project = ProjectBuilder.builder().build()
@@ -68,54 +121,5 @@ public class ArtifactoryPublicationsPluginTest extends PluginTestBase {
68121
buildInfoTask.dependsOn.size() == 2
69122
}
70123
71-
def populateConfigurationFromDsl() {
72-
// Make sure no system props are set
73-
def propFileEnv = System.getenv(PROP_PROPS_FILE)
74-
if (propFileEnv != null && propFileEnv.length() > 0) {
75-
throw new RuntimeException("Cannot run test if environment variable " + PROP_PROPS_FILE + " is set")
76-
}
77-
if (System.getProperty(PROP_PROPS_FILE)) {
78-
System.clearProperty(PROP_PROPS_FILE)
79-
}
80-
URL resource = getClass().getResource('/org/jfrog/build/build.gradle')
81-
def projDir = new File(resource.toURI()).getParentFile()
82-
83-
Project project = ProjectBuilder.builder().withProjectDir(projDir).build()
84-
project.setProperty('testUserName', 'user1')
85-
project.setProperty('testPassword', 'p33p')
86-
project.setProperty('ppom', false)
87-
88-
//Set artifact specs
89-
project.setProperty(ClientProperties.PROP_PUBLISH_PREFIX + ClientConfigurationFields.ARTIFACT_SPECS,
90-
'archives com.jfrog:*:*:doc@* key1: val1, key2: val2\n' +
91-
'archives com.jfrog:*:*:src@* key3: val 3')
92-
93-
JavaPlugin javaPlugin = new JavaPlugin()
94-
ArtifactoryPluginBase artifactoryPlugin = createPlugin()
95-
96-
//project.setProperty(ClientProperties.PROP_PUBLISH_PREFIX + ClientConfigurationFields.MAVEN, 'true')
97-
javaPlugin.apply(project)
98-
artifactoryPlugin.apply(project)
99-
100-
BuildInfoPublicationsTask buildInfoTask = project.tasks.findByName(BUILD_INFO_TASK_NAME)
101-
def clientConfig = ArtifactoryPluginUtil.getArtifactoryConvention(project).getClientConfig()
102-
project.evaluate()
103-
projectEvaluated(project)
104-
105-
expect:
106-
!buildInfoTask.publishConfigurations.isEmpty()
107-
'[ext]user1' == clientConfig.publisher.username
108-
'p33p' == clientConfig.publisher.password
109-
!clientConfig.resolver.maven
110-
//Cannot call clientConfig.publisher.isMaven() since it is only assigned at task execution
111-
!buildInfoTask.getPublishPom()
112-
buildInfoTask.artifactSpecs[0].group == 'com.jfrog'
113-
buildInfoTask.artifactSpecs[0].classifier == 'doc'
114-
buildInfoTask.artifactSpecs[1].group == 'com.jfrog'
115-
buildInfoTask.artifactSpecs[1].classifier == 'src'
116-
buildInfoTask.artifactSpecs[1].properties['key3'] == 'val 3'
117-
buildInfoTask.artifactSpecs[2].group == 'org.jfrog'
118-
buildInfoTask.artifactSpecs[2].classifier == ArtifactSpec.WILDCARD
119-
}
120124
*/
121125
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* Copyright (C) 2011 JFrog Ltd.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
// Root project version should not be used
18+
version = '2'
19+
20+
//apply plugin: 'java'
21+
//apply plugin: 'artifactory-publish'
22+
//apply plugin: 'ivy-publish'
23+
//apply plugin: 'maven-publish'
24+
publishing {
25+
publications {
26+
ivyJava(IvyPublication) {
27+
from components.java
28+
}
29+
mavenJava(MavenPublication) {
30+
from components.java
31+
}
32+
}
33+
}
34+
35+
artifactory {
36+
contextUrl = 'http://localhost:8080/artifactory'
37+
//clientConfig.info.licenseControl.violationRecipients = 'yoavl@jfrog.com'
38+
publish {
39+
repository {
40+
repoKey = 'libs-snapshot-local' //The Artifactory repository key to publish to
41+
username = "[ext]${testUserName}" //The publisher user name
42+
password = testPassword //The publisher password
43+
}
44+
defaults {
45+
publishPom = ppom
46+
publications('ivyJava', 'mavenJava')
47+
properties = ['qa.level': 'basic']
48+
properties {
49+
archives 'org.jfrog:*:*:*@*', key1: 'val1', key2: false
50+
}
51+
}
52+
}
53+
resolve {
54+
repository {
55+
repoKey = 'repo'
56+
addMatrixParams(['key': 'value'])
57+
maven = false
58+
ivy {
59+
//An optional section for configuring Ivy publication. If not specified, assume maven repo layout
60+
ivyLayout = '[organization]/[module]/[revision]/[type]s/ivy-[revision].xml'
61+
artifactLayout = '[organization]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]'
62+
}
63+
}
64+
}
65+
}

Diff for: gradle/wrapper/gradle-wrapper.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=http://services.gradle.org/distributions/gradle-1.5-rc-3-all.zip
6+
distributionUrl=http://services.gradle.org/distributions/gradle-1.5-all.zip

0 commit comments

Comments
 (0)