diff --git a/pom.xml b/pom.xml
index 57965e91..fdec2ed7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,6 +23,22 @@
spring-cloud-release-tools-spring
+
+ Edgware.BUILD-SNAPSHOT
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud-bom.version}
+ pom
+ import
+
+
+
+
spring-snapshots
diff --git a/spring-cloud-release-tools-core/pom.xml b/spring-cloud-release-tools-core/pom.xml
index 064c2b96..e62d8cd6 100644
--- a/spring-cloud-release-tools-core/pom.xml
+++ b/spring-cloud-release-tools-core/pom.xml
@@ -26,6 +26,10 @@
org.springframework.boot
spring-boot-starter
+
+ org.springframework.boot
+ spring-boot-starter-web
+
org.springframework.boot
spring-boot-configuration-processor
@@ -97,6 +101,25 @@
spring-boot-starter-test
test
+
+ org.springframework.cloud
+ spring-cloud-starter-contract-stub-runner
+ test
+
+
+
+ sagan
+ sagan-site
+ stubs
+ 1.0.0.BUILD-SNAPSHOT
+ test
+
+
+ *
+ *
+
+
+
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java
index 6ac9ce2f..5d4ac387 100644
--- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java
@@ -43,6 +43,8 @@ public class ReleaserProperties {
private Gradle gradle = new Gradle();
+ private Sagan sagan = new Sagan();
+
private Map fixedVersions = new HashMap<>();
public static class Git {
@@ -257,11 +259,11 @@ public class ReleaserProperties {
* Defaults to test projects and samples.
*/
@SuppressWarnings("unchecked")
- private List ignoredGradleRegex = Arrays.asList(new String[] {
+ private List ignoredGradleRegex = Arrays.asList(
"^.*spring-cloud-contract-maven-plugin/src/test/projects/.*$",
"^.*spring-cloud-contract-maven-plugin/target/.*$",
"^.*samples/standalone/[a-z]+/.*$"
- });
+ );
public Map getGradlePropsSubstitution() {
return this.gradlePropsSubstitution;
@@ -280,6 +282,22 @@ public class ReleaserProperties {
this.ignoredGradleRegex = ignoredGradleRegex;
}
}
+
+ public static class Sagan {
+ /**
+ * URL to the Sagan API
+ */
+ private String baseUrl;
+
+ public String getBaseUrl() {
+ return this.baseUrl;
+ }
+
+ public void setBaseUrl(String baseUrl) {
+ this.baseUrl = baseUrl;
+ }
+ }
+
public String getWorkingDir() {
return StringUtils.hasText(this.workingDir) ?
this.workingDir : System.getProperty("user.dir");
@@ -328,4 +346,12 @@ public class ReleaserProperties {
public void setFixedVersions(Map fixedVersions) {
this.fixedVersions = fixedVersions;
}
+
+ public Sagan getSagan() {
+ return this.sagan;
+ }
+
+ public void setSagan(Sagan sagan) {
+ this.sagan = sagan;
+ }
}
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/ProjectMetadata.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/ProjectMetadata.java
new file mode 100644
index 00000000..9fffa989
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/ProjectMetadata.java
@@ -0,0 +1,17 @@
+package org.springframework.cloud.release.internal.sagan;
+
+import java.util.List;
+
+/**
+ * @author Marcin Grzejszczak
+ */
+class ProjectMetadata {
+ private String id = "";
+ private String name = "";
+ private String repoUrl = "";
+ private String siteUrl = "";
+ private String category = "";
+ private String stackOverflowTags;
+ private boolean aggregator;
+ private List stackOverflowTagList;
+}
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/ReleaseMetadata.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/ReleaseMetadata.java
new file mode 100644
index 00000000..df254b61
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/ReleaseMetadata.java
@@ -0,0 +1,14 @@
+package org.springframework.cloud.release.internal.sagan;
+
+import java.util.List;
+
+/**
+ * @author Marcin Grzejszczak
+ */
+class ReleaseMetadata {
+ private String releaseStatus;
+ private String refDocUrl;
+ private String apiDocUrl;
+ private String groupId;
+ private String artifactId;
+}
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/RepositoryMetadata.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/RepositoryMetadata.java
new file mode 100644
index 00000000..a2bd7457
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/RepositoryMetadata.java
@@ -0,0 +1,54 @@
+package org.springframework.cloud.release.internal.sagan;
+
+/**
+ * @author Marcin Grzejszczak
+ */
+class RepositoryMetadata {
+ private String id;
+ private String name;
+ private String url;
+ private boolean snapshotsEnabled;
+
+ public RepositoryMetadata() {
+ }
+
+ public RepositoryMetadata(String id, String name, String url,
+ boolean snapshotsEnabled) {
+ this.id = id;
+ this.name = name;
+ this.url = url;
+ this.snapshotsEnabled = snapshotsEnabled;
+ }
+
+ public String getId() {
+ return this.id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getUrl() {
+ return this.url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public boolean isSnapshotsEnabled() {
+ return this.snapshotsEnabled;
+ }
+
+ public void setSnapshotsEnabled(boolean snapshotsEnabled) {
+ this.snapshotsEnabled = snapshotsEnabled;
+ }
+}
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/SaganClient.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/SaganClient.java
new file mode 100644
index 00000000..9f0e3094
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/sagan/SaganClient.java
@@ -0,0 +1,31 @@
+package org.springframework.cloud.release.internal.sagan;
+
+import org.springframework.cloud.release.internal.ReleaserProperties;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author Marcin Grzejszczak
+ */
+class SaganClient {
+
+ private final RestTemplate restTemplate;
+ private final String baseUrl;
+
+ SaganClient(RestTemplate restTemplate, ReleaserProperties properties) {
+ this.restTemplate = restTemplate;
+ this.baseUrl = properties.getSagan().getBaseUrl();
+ }
+
+ void getProject(String projectName) {
+ this.restTemplate.getForObject(this.baseUrl + "/project_metadata/{projectName}", Object.class, projectName);
+ }
+
+ void getRelease(String projectName, String releaseVersion) {
+
+ }
+
+ // POST
+ void createOrUpdateRelease(String projectName, Object release) {
+
+ }
+}
diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/sagan/SaganClientTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/sagan/SaganClientTests.java
new file mode 100644
index 00000000..c33e4591
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/sagan/SaganClientTests.java
@@ -0,0 +1,20 @@
+package org.springframework.cloud.release.internal.sagan;
+
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Marcin Grzejszczak
+ */
+@RunWith(SpringRunner.class)
+@AutoConfigureStubRunner(ids = "sagan:sagan-site")
+public class SaganClientTests {
+
+ @Value("${stubrunner.runningstubs.sagan-site.port}") Integer saganPort;
+
+
+}
\ No newline at end of file