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