github.com/tilt-dev/tilt@v0.36.0/scripts/codegen-webview.Dockerfile (about) 1 FROM golang:1.24-alpine AS base 2 3 RUN apk add --no-cache \ 4 build-base \ 5 protobuf \ 6 protobuf-dev \ 7 git \ 8 wget \ 9 make \ 10 nodejs \ 11 yarn 12 13 # Newer versions of protoc-gen-go are stricter with the `go_package` argument, which is invalid in the K8s protobufs 14 # so we're currently locked to an older version as there's no way to suppress the error 15 # see https://github.com/golang/protobuf/issues/1316 16 RUN go install 'google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.0' 17 RUN go install 'google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2.0' 18 RUN go install 'github.com/google/wire/cmd/wire@v0.5.0' 19 RUN go install 'golang.org/x/tools/cmd/goimports@latest' 20 ARG GRPC_GATEWAY_VERSION="v1.16.0" 21 RUN go install "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway@${GRPC_GATEWAY_VERSION}" 22 RUN go install "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger@${GRPC_GATEWAY_VERSION}" 23 24 RUN wget https://github.com/grpc/grpc-web/releases/download/1.0.6/protoc-gen-grpc-web-1.0.6-linux-x86_64 \ 25 -O /usr/local/bin/protoc-gen-grpc-web && \ 26 chmod +x /usr/local/bin/protoc-gen-grpc-web 27 28 RUN yarn global add \ 29 '@manifoldco/swagger-to-ts@1.4.0' 30 31 # Stage for webview-proto task 32 FROM base AS webview-proto-build 33 WORKDIR /go/src/github.com/tilt-dev/tilt 34 COPY pkg/webview/log.proto pkg/webview/log.proto 35 COPY pkg/webview/view.proto pkg/webview/view.proto 36 COPY pkg/apis/core/v1alpha1/generated.proto pkg/apis/core/v1alpha1/generated.proto 37 COPY vendor/k8s.io/apimachinery/pkg/runtime/generated.proto vendor/k8s.io/apimachinery/pkg/runtime/generated.proto 38 COPY vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto vendor/k8s.io/apimachinery/pkg/runtime/schema/generated.proto 39 COPY vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto 40 41 RUN mkdir -p web/src && \ 42 protoc \ 43 -I. \ 44 -I./vendor \ 45 -I/usr/include \ 46 -I"$(go list -f '{{.Dir}}' -m 'github.com/grpc-ecosystem/grpc-gateway@latest')/third_party/googleapis" \ 47 --grpc-gateway_out=logtostderr=true:. \ 48 --swagger_out=logtostderr=true:. \ 49 --go_out=. --go_opt=paths=source_relative \ 50 --go-grpc_out=. --go-grpc_opt=paths=source_relative \ 51 pkg/webview/*.proto && \ 52 sed -i 's|v1alpha1 "pkg/apis/core/v1alpha1"|v1alpha1 "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1"|g' pkg/webview/*.pb.go && \ 53 sed -i 's|"$ref": "#/definitions/v1Time",|"type": "string", "format": "date-time",|g' pkg/webview/view.swagger.json && \ 54 sed -i 's|"$ref": "#/definitions/v1MicroTime",|"type": "string", "format": "date-time",|g' pkg/webview/view.swagger.json && \ 55 goimports -local github.com/tilt-dev -w pkg/webview/*.pb.go 56 57 # Output stage for webview-proto task 58 FROM scratch AS webview-proto-output 59 COPY --from=webview-proto-build /go/src/github.com/tilt-dev/tilt/pkg/webview/log.pb.go /go/src/github.com/tilt-dev/tilt/pkg/webview/log.pb.go 60 COPY --from=webview-proto-build /go/src/github.com/tilt-dev/tilt/pkg/webview/view.pb.go /go/src/github.com/tilt-dev/tilt/pkg/webview/view.pb.go 61 COPY --from=webview-proto-build /go/src/github.com/tilt-dev/tilt/pkg/webview/view_grpc.pb.go /go/src/github.com/tilt-dev/tilt/pkg/webview/view_grpc.pb.go 62 COPY --from=webview-proto-build /go/src/github.com/tilt-dev/tilt/pkg/webview/view.swagger.json /go/src/github.com/tilt-dev/tilt/pkg/webview/view.swagger.json 63 64 # Stage for proto-ts task 65 FROM base AS proto-ts-build 66 WORKDIR /go/src/github.com/tilt-dev/tilt 67 COPY --from=webview-proto-build /go/src/github.com/tilt-dev/tilt/pkg/webview/view.swagger.json pkg/webview/view.swagger.json 68 69 RUN <<EOF 70 mkdir -p web/src && \ 71 swagger-to-ts pkg/webview/view.swagger.json --camelcase --wrapper " 72 // Autogenerated: DO NOT EDIT 73 declare namespace Proto 74 " --output web/src/view.d.ts 75 EOF 76 77 # Output stage for proto-ts task 78 FROM scratch AS proto-ts-output 79 COPY --from=proto-ts-build /go/src/github.com/tilt-dev/tilt/web/src/view.d.ts /go/src/github.com/tilt-dev/tilt/web/src/view.d.ts