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" + } +}