diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 47047d6..1591857 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -32,7 +32,7 @@ jobs:
         run: sudo --preserve-env make test
 
   build:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
     steps:
       - uses: actions/checkout@v3
 
@@ -46,6 +46,11 @@ jobs:
         with:
           go-version: "1.22"
 
+      - name: Install protoc-gen-go
+        run: |
+          go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31
+          go install github.com/containerd/ttrpc/cmd/protoc-gen-go-ttrpc@v1.2.4
+
       - uses: awalsh128/cache-apt-pkgs-action@v1
         with:
           packages: protobuf-compiler libprotobuf-dev
diff --git a/Makefile b/Makefile
index 83fd6a1..2fb96ee 100644
--- a/Makefile
+++ b/Makefile
@@ -88,7 +88,7 @@ ttrpc:
 	cd api/shim/v1; protoc --go_out=. --go_opt=paths=source_relative \
 	--ttrpc_out=. --plugin=protoc-gen-ttrpc=`which protoc-gen-go-ttrpc` \
 	--ttrpc_opt=paths=source_relative *.proto -I. \
-	-I ${GOPATH}/pkg/mod/github.com/prometheus/client_model@v0.5.0
+	-I $(shell go env GOMODCACHE)/github.com/prometheus/client_model@v0.5.0
 
 # to improve reproducibility of the bpf builds, we dump the vmlinux.h and
 # store it compressed in git instead of dumping it during the build.
diff --git a/api/shim/v1/shim.pb.go b/api/shim/v1/shim.pb.go
index a60b8af..c94d8aa 100644
--- a/api/shim/v1/shim.pb.go
+++ b/api/shim/v1/shim.pb.go
@@ -1,7 +1,7 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
 // 	protoc-gen-go v1.31.0
-// 	protoc        v3.19.6
+// 	protoc        v3.21.12
 // source: shim.proto
 
 package v1