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