From 0a9d96f773a7e4c91060dc1032354db92b1fee7a Mon Sep 17 00:00:00 2001 From: Babis Kaidos Date: Tue, 27 Oct 2026 16:45:38 +0200 Subject: [PATCH] feat(go): support go 1.27 and delve 1.27.2 Delve 1.24.1 cannot read variables of Go 1.27 binaries (it supports up to Go 1.24). Adds the Go 1.27 integration test like the earlier version bumps. --- go/helper-image/Dockerfile | 4 +- go/skaffold.yaml | 9 ++++ go/test/k8s-test-go127.yaml | 89 +++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 go/test/k8s-test-go127.yaml diff --git a/go/helper-image/Dockerfile b/go/helper-image/Dockerfile index d79a137..8d3f971 100644 --- a/go/helper-image/Dockerfile +++ b/go/helper-image/Dockerfile @@ -1,10 +1,10 @@ -ARG GOVERSION=1.24 +ARG GOVERSION=1.27 FROM --platform=$BUILDPLATFORM golang:${GOVERSION} AS delve ARG BUILDPLATFORM ARG TARGETOS ARG TARGETARCH -ARG DELVE_VERSION=1.24.1 +ARG DELVE_VERSION=1.27.2 # Patch delve to make defaults for --check-go-version and --only-same-user # to be set at build time. We must install patch(1) to apply the patch. diff --git a/go/skaffold.yaml b/go/skaffold.yaml index 682a9b8..1991137 100644 --- a/go/skaffold.yaml +++ b/go/skaffold.yaml @@ -94,6 +94,14 @@ profiles: docker: buildArgs: GOVERSION: '1.24' + - op: add + path: /build/artifacts/- + value: + image: go127app + context: test/goapp + docker: + buildArgs: + GOVERSION: '1.27' deploy: kubectl: @@ -105,6 +113,7 @@ profiles: - test/k8s-test-go122.yaml - test/k8s-test-go123.yaml - test/k8s-test-go124.yaml + - test/k8s-test-go127.yaml # release: pushes images to production with :latest - name: release diff --git a/go/test/k8s-test-go127.yaml b/go/test/k8s-test-go127.yaml new file mode 100644 index 0000000..a4e4632 --- /dev/null +++ b/go/test/k8s-test-go127.yaml @@ -0,0 +1,89 @@ +# This test approximates `skaffold debug` for a go app. +apiVersion: v1 +kind: Pod +metadata: + name: go127pod + labels: + app: hello + protocol: dlv + runtime: go127 +spec: + containers: + - name: go127app + image: go127app + args: + - /dbg/go/bin/dlv + - exec + - --log + - --headless + - --continue + - --accept-multiclient + # listen on 0.0.0.0 as it is exposed as a service + - --listen=0.0.0.0:56286 + - --api-version=2 + - ./app + ports: + - containerPort: 8080 + - containerPort: 56286 + name: dlv + readinessProbe: + httpGet: + path: / + port: 8080 + volumeMounts: + - mountPath: /dbg + name: go-debugging-support + initContainers: + - image: skaffold-debug-go + name: install-go-support + resources: {} + volumeMounts: + - mountPath: /dbg + name: go-debugging-support + volumes: + - emptyDir: {} + name: go-debugging-support + +--- +apiVersion: v1 +kind: Service +metadata: + name: hello-dlv-go127 +spec: + ports: + - name: http + port: 8080 + protocol: TCP + - name: dlv + port: 56286 + protocol: TCP + selector: + app: hello + protocol: dlv + runtime: go127 + +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: connect-to-go127 + labels: + project: container-debug-support + type: integration-test +spec: + ttlSecondsAfterFinished: 10 + backoffLimit: 1 + template: + spec: + restartPolicy: Never + initContainers: + - name: wait-for-go127 + image: kubectl + command: [sh, -c, "while ! curl -s hello-dlv-go127:8080 2>/dev/null; do echo waiting for app; sleep 1; done"] + containers: + - name: dlv-to-go127 + image: skaffold-debug-go + command: [sh, -c, ' + (echo bt; echo exit -c) > init.txt; + set -x; + /duct-tape/go/bin/dlv connect --init init.txt hello-dlv-go127:56286']