diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000..203f3c889b
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,6 @@
+version: 2
+updates:
+- package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml
new file mode 100644
index 0000000000..4e33500e74
--- /dev/null
+++ b/.github/workflows/codeql.yaml
@@ -0,0 +1,44 @@
+name: "Code Scanning - Action"
+
+on:
+ pull_request:
+ push:
+
+jobs:
+ CodeQL-Build:
+ # CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
+ runs-on: ubuntu-latest
+
+ permissions:
+ # required for all workflows
+ security-events: write
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v2
+ # Override language selection by uncommenting this and choosing your languages
+ # with:
+ # languages: go, javascript, csharp, python, cpp, java
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
+ # If this step fails, then you should remove it and run the build manually (see below).
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v2
+
+ # âšī¸ Command-line programs to run using the OS shell.
+ # đ See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+
+ # âī¸ If the Autobuild fails above, remove it and uncomment the following
+ # three lines and modify them (or add more) to build your code if your
+ # project uses a compiled language
+
+ #- run: |
+ # make bootstrap
+ # make release
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v2
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 2b0e5ab60e..2ea294bf0b 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -21,7 +21,7 @@ jobs:
with:
java-version: 17
- name: Cache local Maven repository
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
diff --git a/spring-cloud-contract-dependencies/pom.xml b/spring-cloud-contract-dependencies/pom.xml
index d24a7002b6..e4cc022d1e 100644
--- a/spring-cloud-contract-dependencies/pom.xml
+++ b/spring-cloud-contract-dependencies/pom.xml
@@ -16,7 +16,7 @@
Spring Cloud Contract Dependencies
2.33.2
- 0.6.1
+ 0.6.2
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties
index e7c340560c..d28f4141bd 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties
@@ -14,6 +14,6 @@
# limitations under the License.
#
wiremockVersion=2.30.1
-jsonAssertVersion=0.6.1
+jsonAssertVersion=0.6.2
verifierVersion=4.0.0-SNAPSHOT
groovyVersion=2.4.17
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/gradle.properties b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/gradle.properties
index 11e1baaa21..888c061e83 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/gradle.properties
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/gradle.properties
@@ -14,7 +14,7 @@
# limitations under the License.
#
wiremockVersion=2.30.1
-jsonAssertVersion=0.6.1
+jsonAssertVersion=0.6.2
verifierVersion=4.0.0-SNAPSHOT
bootVersion=3.0.0-SNAPSHOT
groovyVersion=2.4.17
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/gradle.properties b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/gradle.properties
index 11e1baaa21..888c061e83 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/gradle.properties
+++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProjectKotlin/gradle.properties
@@ -14,7 +14,7 @@
# limitations under the License.
#
wiremockVersion=2.30.1
-jsonAssertVersion=0.6.1
+jsonAssertVersion=0.6.2
verifierVersion=4.0.0-SNAPSHOT
bootVersion=3.0.0-SNAPSHOT
groovyVersion=2.4.17
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml
index 364a66cf86..50c0ed45b2 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml
+++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml
@@ -64,7 +64,7 @@
com.toomuchcoding.jsonassert
jsonassert
- 0.6.1
+ 0.6.2
test
diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/different-module-configuration/module/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/different-module-configuration/module/pom.xml
index 3d14e0f239..a2d72cfb32 100644
--- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/different-module-configuration/module/pom.xml
+++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/different-module-configuration/module/pom.xml
@@ -63,7 +63,7 @@
com.toomuchcoding.jsonassert
jsonassert
- 0.6.1
+ 0.6.2
test
diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java
index 5a7ab3219c..e56cfb481f 100644
--- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java
+++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java
@@ -277,7 +277,7 @@ public final class WireMockRestServiceServer {
if (indexOfBaseUrl == -1) {
return url;
}
- return url.substring(indexOfBaseUrl + this.baseUrl.length() + 1);
+ return url.substring(indexOfBaseUrl + this.baseUrl.length());
}
private Matcher requestMatcher(RequestPattern request) {
diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java
index 19902f659b..0acb663193 100644
--- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java
+++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java
@@ -411,6 +411,24 @@ public class WiremockMockServerApplicationTests {
server.verify();
}
+ @Test
+ public void getWithSimpleUrlPathMatchingWithTrailingSlashInBaseUrl() throws Exception {
+ MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate).baseUrl("https://example.org/")
+ .stubs("classpath:/mappings/url-simple-path-pattern-without-leading-slash.json").build();
+ assertThat(this.restTemplate.getForObject("https://example.org/my/api", String.class))
+ .isEqualTo("Hello Url Path Matcher");
+ server.verify();
+ }
+
+ @Test
+ public void getWithSimpleUrlPathMatchingWithLeadingSlashInPattern() throws Exception {
+ MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate).baseUrl("https://example.org")
+ .stubs("classpath:/mappings/url-simple-path-pattern-with-leading-slash.json").build();
+ assertThat(this.restTemplate.getForObject("https://example.org/my/api", String.class))
+ .isEqualTo("Hello Url Path Matcher");
+ server.verify();
+ }
+
@Test
public void getWithUrlMatching() throws Exception {
MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate) //
diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json
index 58f58debed..26fccb5a45 100644
--- a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json
+++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json
@@ -1,7 +1,7 @@
{
"request": {
"method": "GET",
- "urlPathPattern": "([a-zA-Z0-9/-]*)/url-path-pattern/"
+ "urlPathPattern": "/([0-9]+)/url-path-pattern/"
},
"response": {
"status": 200,
diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json
new file mode 100644
index 0000000000..ce37ae8b9f
--- /dev/null
+++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json
@@ -0,0 +1,10 @@
+{
+ "request": {
+ "method": "GET",
+ "urlPathPattern": "/my/api"
+ },
+ "response": {
+ "status": 200,
+ "body": "Hello Url Path Matcher"
+ }
+}
diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json
new file mode 100644
index 0000000000..db22373c33
--- /dev/null
+++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json
@@ -0,0 +1,10 @@
+{
+ "request": {
+ "method": "GET",
+ "urlPathPattern": "my/api"
+ },
+ "response": {
+ "status": 200,
+ "body": "Hello Url Path Matcher"
+ }
+}