From 139458e1cf2ba8f0a46c7cbd40ded3ecce750f81 Mon Sep 17 00:00:00 2001 From: "Philip K. Warren" Date: Tue, 12 Nov 2024 17:17:02 -0600 Subject: [PATCH] Improve docker build and bump deps (#19) Update Dockerfile to use best practices for cross compiling Go code to other architectures. Add a dependabot config to keep GitHub actions and Docker versions up to date. Update BUFSTREAM_VERSION in Makefile to match the version used in the docker-compose.yaml file. Update Go dependencies to the latest. --- .dockerignore | 7 +++++++ .github/dependabot.yml | 13 ++++++++++++ Dockerfile.consume | 9 +++++---- Dockerfile.produce | 9 +++++---- Makefile | 2 +- cmd/bufstream-demo-consume/main.go | 2 +- docker-compose.yaml | 2 +- go.mod | 14 ++++++------- go.sum | 32 +++++++++++++++--------------- 9 files changed, 56 insertions(+), 34 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/dependabot.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..38e5b44 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +* +!Dockerfile* +!go.mod +!go.sum +!cmd +!gen +!pkg diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..95284be --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +version: 2 +updates: + - package-ecosystem: "docker" + directories: + - "/" + registries: + - dockerhub + schedule: + interval: "weekly" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/Dockerfile.consume b/Dockerfile.consume index 30374de..942eb8f 100644 --- a/Dockerfile.consume +++ b/Dockerfile.consume @@ -3,16 +3,17 @@ # # This allows users to try out this demo without needing to have Go installed, as well # as makes the demo runnable within docker compose. -FROM golang:1.23-alpine3.20 AS builder +FROM --platform=$BUILDPLATFORM golang:1.23-alpine3.20 AS builder + +ARG TARGETOS TARGETARCH +ENV CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH WORKDIR /app COPY go.mod go.sum /app/ RUN go mod download -COPY cmd /app/cmd -COPY gen /app/gen -COPY pkg /app/pkg +COPY . /app RUN go build -ldflags "-s -w" -trimpath -buildvcs=false -o /go/bin/bufstream-demo-consume ./cmd/bufstream-demo-consume FROM alpine:3.20.3 diff --git a/Dockerfile.produce b/Dockerfile.produce index 07b4a99..ee34654 100644 --- a/Dockerfile.produce +++ b/Dockerfile.produce @@ -3,16 +3,17 @@ # # This allows users to try out this demo without needing to have Go installed, as well # as makes the demo runnable within docker compose. -FROM golang:1.23-alpine3.20 AS builder +FROM --platform=$BUILDPLATFORM golang:1.23-alpine3.20 AS builder + +ARG TARGETOS TARGETARCH +ENV CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH WORKDIR /app COPY go.mod go.sum /app/ RUN go mod download -COPY cmd /app/cmd -COPY gen /app/gen -COPY pkg /app/pkg +COPY . /app RUN go build -ldflags "-s -w" -trimpath -buildvcs=false -o /go/bin/bufstream-demo-produce ./cmd/bufstream-demo-produce FROM alpine:3.20.3 diff --git a/Makefile b/Makefile index 31bbecc..3123130 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -BUFSTREAM_VERSION := 0.1.0 +BUFSTREAM_VERSION := 0.2.0 .DEFAULT_GOAL := docker-compose-run diff --git a/cmd/bufstream-demo-consume/main.go b/cmd/bufstream-demo-consume/main.go index 82afaf0..6975e2b 100644 --- a/cmd/bufstream-demo-consume/main.go +++ b/cmd/bufstream-demo-consume/main.go @@ -40,7 +40,7 @@ func run(ctx context.Context, config app.Config) error { } defer func() { _ = deserializer.Close() }() - consumer := consume.NewConsumer[*demov1.EmailUpdated]( + consumer := consume.NewConsumer( client, deserializer, config.Kafka.Topic, diff --git a/docker-compose.yaml b/docker-compose.yaml index 2029cbb..7a3bce1 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -4,7 +4,7 @@ services: # # This is an image optimized for the demo; it is purposefully not a production image. bufstream: - image: us-docker.pkg.dev/buf-images-1/bufstream-public/images/bufstream:0.1.3 + image: us-docker.pkg.dev/buf-images-1/bufstream-public/images/bufstream:0.2.0 hostname: bufstream container_name: bufstream ports: diff --git a/go.mod b/go.mod index 1022749..0e64654 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,14 @@ module github.com/bufbuild/bufstream-demo go 1.22 require ( - buf.build/gen/go/bufbuild/confluent/protocolbuffers/go v1.34.2-20240926213411-65369e65bbcd.2 - buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240920164238-5a7b106cbb87.2 - github.com/brianvoe/gofakeit/v7 v7.0.4 - github.com/confluentinc/confluent-kafka-go/v2 v2.5.4 + buf.build/gen/go/bufbuild/confluent/protocolbuffers/go v1.35.1-20240926213411-65369e65bbcd.1 + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.35.1-20240920164238-5a7b106cbb87.1 + github.com/brianvoe/gofakeit/v7 v7.1.2 + github.com/confluentinc/confluent-kafka-go/v2 v2.6.0 github.com/google/uuid v1.6.0 github.com/spf13/pflag v1.0.5 - github.com/twmb/franz-go v1.17.1 - google.golang.org/protobuf v1.34.2 + github.com/twmb/franz-go v1.18.0 + google.golang.org/protobuf v1.35.1 ) require ( @@ -19,7 +19,7 @@ require ( github.com/jhump/protoreflect v1.17.0 // indirect github.com/klauspost/compress v1.17.10 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect - github.com/twmb/franz-go/pkg/kmsg v1.8.0 // indirect + github.com/twmb/franz-go/pkg/kmsg v1.9.0 // indirect golang.org/x/sync v0.8.0 // indirect google.golang.org/genproto v0.0.0-20240924160255-9d4c2d233b61 // indirect ) diff --git a/go.sum b/go.sum index 9cc7e78..253763b 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ -buf.build/gen/go/bufbuild/confluent/protocolbuffers/go v1.34.2-20240926213411-65369e65bbcd.2 h1:1aIXijUHtpg3HcM6nDff+RbCUWe8fId2s606XtFAFHo= -buf.build/gen/go/bufbuild/confluent/protocolbuffers/go v1.34.2-20240926213411-65369e65bbcd.2/go.mod h1:kYsA0v3y6HUJ2e/f23S/daR89+KFp6m/TgmfvsR4Ofs= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240920164238-5a7b106cbb87.2 h1:hl0FrmGlNpQZIGvU1/jDz0lsPDd0BhCE0QDRwPfLZcA= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240920164238-5a7b106cbb87.2/go.mod h1:ylS4c28ACSI59oJrOdW4pHS4n0Hw4TgSPHn8rpHl4Yw= +buf.build/gen/go/bufbuild/confluent/protocolbuffers/go v1.35.1-20240926213411-65369e65bbcd.1 h1:KJYasqgDkSKQAj5sCL9wXm6+mAahDxA3Avp+H/rcbDU= +buf.build/gen/go/bufbuild/confluent/protocolbuffers/go v1.35.1-20240926213411-65369e65bbcd.1/go.mod h1:frfi8hzbBoLplcRIDVAEfgGcx0SlsSdreGr7QPpPHGQ= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.35.1-20240920164238-5a7b106cbb87.1 h1:9wP6ZZYWnF2Z0TxmII7m3XNykxnP4/w8oXeth6ekcRI= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.35.1-20240920164238-5a7b106cbb87.1/go.mod h1:Duw/9JoXkXIydyASnLYIiufkzySThoqavOsF+IihqvM= cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= cloud.google.com/go/compute v1.28.1 h1:XwPcZjgMCnU2tkwY10VleUjSAfpTj9RDn+kGrbYsi8o= cloud.google.com/go/compute v1.28.1/go.mod h1:b72iXMY4FucVry3NR3Li4kVyyTvbMDE7x5WsqvxjsYk= @@ -51,14 +51,14 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= -github.com/brianvoe/gofakeit/v7 v7.0.4 h1:Mkxwz9jYg8Ad8NvT9HA27pCMZGFQo08MK6jD0QTKEww= -github.com/brianvoe/gofakeit/v7 v7.0.4/go.mod h1:QXuPeBw164PJCzCUZVmgpgHJ3Llj49jSLVkKPMtxtxA= +github.com/brianvoe/gofakeit/v7 v7.1.2 h1:vSKaVScNhWVpf1rlyEKSvO8zKZfuDtGqoIHT//iNNb8= +github.com/brianvoe/gofakeit/v7 v7.1.2/go.mod h1:QXuPeBw164PJCzCUZVmgpgHJ3Llj49jSLVkKPMtxtxA= github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw= github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/confluentinc/confluent-kafka-go/v2 v2.5.4 h1:wqTPWwIQYguGIBL8XOJv0txVSHiAGkHuaFlZBQ76MRE= -github.com/confluentinc/confluent-kafka-go/v2 v2.5.4/go.mod h1:UupuBgPAYzqS+I2P0H9zEUCqoFei2JSkBjTTtpNN454= +github.com/confluentinc/confluent-kafka-go/v2 v2.6.0 h1:VKnMT71Tl0dCp3lfGBp2D8eqQwc+amoDY5EeUgFHDDE= +github.com/confluentinc/confluent-kafka-go/v2 v2.6.0/go.mod h1:hScqtFIGUI1wqHIgM3mjoqEou4VweGGGX7dMpcUKves= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -141,10 +141,10 @@ github.com/tink-crypto/tink-go-hcvault/v2 v2.1.0 h1:REG5YX2omhgPmiIT7GLqmzWFnIks github.com/tink-crypto/tink-go-hcvault/v2 v2.1.0/go.mod h1:OJLS+EYJo/BTViJj7EBG5deKLeQfYwVNW8HMS1qHAAo= github.com/tink-crypto/tink-go/v2 v2.1.0 h1:QXFBguwMwTIaU17EgZpEJWsUSc60b1BAGTzBIoMdmok= github.com/tink-crypto/tink-go/v2 v2.1.0/go.mod h1:y1TnYFt1i2eZVfx4OGc+C+EMp4CoKWAw2VSEuoicHHI= -github.com/twmb/franz-go v1.17.1 h1:0LwPsbbJeJ9R91DPUHSEd4su82WJWcTY1Zzbgbg4CeQ= -github.com/twmb/franz-go v1.17.1/go.mod h1:NreRdJ2F7dziDY/m6VyspWd6sNxHKXdMZI42UfQ3GXM= -github.com/twmb/franz-go/pkg/kmsg v1.8.0 h1:lAQB9Z3aMrIP9qF9288XcFf/ccaSxEitNA1CDTEIeTA= -github.com/twmb/franz-go/pkg/kmsg v1.8.0/go.mod h1:HzYEb8G3uu5XevZbtU0dVbkphaKTHk0X68N5ka4q6mU= +github.com/twmb/franz-go v1.18.0 h1:25FjMZfdozBywVX+5xrWC2W+W76i0xykKjTdEeD2ejw= +github.com/twmb/franz-go v1.18.0/go.mod h1:zXCGy74M0p5FbXsLeASdyvfLFsBvTubVqctIaa5wQ+I= +github.com/twmb/franz-go/pkg/kmsg v1.9.0 h1:JojYUph2TKAau6SBtErXpXGC7E3gg4vGZMv9xFU/B6M= +github.com/twmb/franz-go/pkg/kmsg v1.9.0/go.mod h1:CMbfazviCyY6HM0SXuG5t9vOwYDHRCSrJJyBAe5paqg= github.com/xiatechs/jsonata-go v1.8.5 h1:m1NaokPKD6LPaTPRl674EQz5mpkJvM3ymjdReDEP6/A= github.com/xiatechs/jsonata-go v1.8.5/go.mod h1:yGEvviiftcdVfhSRhRSpgyTel89T58f+690iB0fp2Vk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= @@ -163,8 +163,8 @@ golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= -golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= -golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= +golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= @@ -185,7 +185,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=