diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..9a0ff70
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,24 @@
+name: CI
+on:
+    push:
+        branches:
+            - step2
+    pull_request:
+        branches:
+            - step2
+jobs:
+    test:
+        runs-on: ubuntu-latest
+
+        steps:
+            - name: Checkout code
+              uses: actions/checkout@v4
+
+            - name: Set up JDK 17
+              uses: actions/setup-java@v4
+              with:
+                  java-version: 17
+                  distribution: 'temurin'
+
+            - name: Test consumer tests
+              run: ./gradlew consumer:test
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 74283cf..0fb8481 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,10 @@
-consumer/.gradle
+.gradle
 build/
 !../gradle/wrapper/gradle-wrapper.jar
 !**/src/main/**/build/
 !**/src/test/**/build/
+consumer/bin
+provider/bin
 
 ### STS ###
 .apt_generated
@@ -45,3 +47,7 @@ gradle-app.setting
 
 # # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
 # gradle/wrapper/gradle-wrapper.properties
+
+## MacOS
+
+.DS_Store
\ No newline at end of file
diff --git a/.java-version b/.java-version
new file mode 100644
index 0000000..03b6389
--- /dev/null
+++ b/.java-version
@@ -0,0 +1 @@
+17.0
diff --git a/README.md b/README.md
index e9edb65..5b93149 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ step of the workshop just check out the branch for that step (i.e. `git checkout
 
 ## Requirements
 
-* JDK 8+
+* JDK 17+
 * Docker for step 11
 
 ## Workshop outline:
diff --git a/consumer/build.gradle b/consumer/build.gradle
index ca81339..3f9289e 100644
--- a/consumer/build.gradle
+++ b/consumer/build.gradle
@@ -1,11 +1,13 @@
 plugins {
-	id 'org.springframework.boot' version '2.3.4.RELEASE'
-	id 'io.spring.dependency-management' version '1.0.10.RELEASE'
+	// Stopped from moving to 3.2.x due to wiremock issue
+	// https://github.com/wiremock/wiremock/issues/2395
+	id 'org.springframework.boot' version '3.1.8'
+	id 'io.spring.dependency-management' version '1.1.4'
 }
 
 group = 'au.com.dius.pactworkshop'
 version = '0.0.1-SNAPSHOT'
-sourceCompatibility = '8'
+sourceCompatibility = '17'
 
 dependencies {
 	implementation 'org.springframework.boot:spring-boot-starter'
@@ -14,7 +16,7 @@ dependencies {
 	testImplementation('org.springframework.boot:spring-boot-starter-test') {
 		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
 	}
-	testImplementation 'com.github.tomakehurst:wiremock:2.27.2'
+	testImplementation 'com.github.tomakehurst:wiremock:3.0.1'
 }
 
 test {
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 12d38de..068cdb2 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/provider/build.gradle b/provider/build.gradle
index 8626b94..700fccd 100644
--- a/provider/build.gradle
+++ b/provider/build.gradle
@@ -1,11 +1,11 @@
 plugins {
-    id 'org.springframework.boot' version '2.3.4.RELEASE'
-    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
+    id 'org.springframework.boot' version '3.2.2'
+    id 'io.spring.dependency-management' version '1.1.4'
 }
 
 group = 'au.com.dius.pactworkshop'
 version = '0.0.1-SNAPSHOT'
-sourceCompatibility = '8'
+sourceCompatibility = '17'
 
 dependencies {
     implementation 'org.springframework.boot:spring-boot-starter'