Skip to content

Commit 1719613

Browse files
committed
Add Dockerfile for testing, change OpenAPI generator, etc
1 parent 0ce4a84 commit 1719613

15 files changed

Lines changed: 385 additions & 430 deletions

protobuf-grpc/Dockerfile

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# This Dockerfile is here to validate that the workshop contents & instructions
2+
# behave as expected on a fresh machine. It's not meant to deploy or run
3+
# anything for use in the actual workshop
4+
5+
FROM debian:unstable
6+
7+
RUN mkdir -p /root/protobuf-grpc
8+
WORKDIR /root/protobuf-grpc
9+
10+
ENV PATH="/root/go/bin:${PATH}"
11+
12+
COPY ./proto ./proto
13+
COPY go.* .
14+
COPY *.go .
15+
COPY requirements.txt .
16+
17+
RUN apt-get update && apt-get install -y \
18+
git \
19+
golang \
20+
make \
21+
procps \
22+
protobuf-compiler \
23+
psmisc \
24+
python3 \
25+
python3-pip \
26+
python3-venv
27+
28+
COPY Makefile .
29+
RUN make setup
30+
COPY ./protoc-gen-bash ./protoc-gen-bash
31+
RUN make gen
32+
33+
# We copy these up last because they depend on the generated code (which you
34+
# will note we did not copy into this image)
35+
COPY ./clients ./clients
36+
COPY ./servers ./servers
37+
38+
# These actually run the test cases. You can ignore the errors shown for killed
39+
# processes
40+
RUN for serverlang in go py ; do \
41+
for clientlang in go py grpcurl ; do \
42+
printf 'Running server for %s\n' "${serverlang}" && \
43+
sleep 1 && \
44+
(make server-"${serverlang}" &) && \
45+
sleep 2 && \
46+
printf 'Running client for %s\n' "${clientlang}" && \
47+
sleep 1 && \
48+
make client-"${clientlang}" name=Tom && \
49+
sleep 2 && \
50+
(pgrep -fa server | grep -v 'sh -c' | awk '{ print $1 }' | xargs -I{} kill {}) && \
51+
sleep 2 ; \
52+
done ; \
53+
done
54+
RUN bash ./pb/echo/v1/echo_bash.pb.sh && \
55+
bash ./pb/employees/v1/employees_bash.pb.sh

protobuf-grpc/Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@ setup:
1717
# This target is just here to make regeneration easier without changing
1818
# directories
1919
gen:
20-
@make -s -C ./proto gen
21-
22-
gen-custom:
23-
@make -s -C ./proto gen-custom
20+
@make -s -C ./proto gen gen-custom
2421

2522
# Wrappers for running clients & servers of each language
2623
server-go:
@@ -43,3 +40,7 @@ client-grpcurl:
4340
@grpcurl -plaintext -protoset=./proto/protoset localhost:8080 employees.v1.EmployeesService/ListEmployees
4441
@printf 'GetEmployee($(name)):\n'
4542
@grpcurl -plaintext -protoset=./proto/protoset -d '{"short_name": "$(name)"}' localhost:8080 employees.v1.EmployeesService/GetEmployee
43+
44+
# Verifies behavior of tooling & other code in the repo
45+
test-docker:
46+
@docker build -t opensourcecorp.org/workshops/protobuf-grpc:latest .

protobuf-grpc/README.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ Protocol Buffers & gRPC
44
TODO: THIS WORKSHOP IS NOT READY YET
55
------------------------------------
66

7-
This directory contains samples that generate [protocol
8-
buffers](https://developers.google.com/protocol-buffers) from a `.proto` file in
9-
two different languages, and defines a server & client in both to demonstrate
7+
This directory contains samples that generate code using [protocol
8+
buffers](https://developers.google.com/protocol-buffers) in several different
9+
languages, and defines a server & client in each to demonstrate
1010
[gRPC](https://grpc.io) calls against the server regardless of which language
11-
it's running in.
11+
it's running in. For the Go server, it also demonstrates that you are able to
12+
serve gRPC as well as HTTP reqeusts from the same server program.
1213

1314
The proto definitions are found under the `proto/` directory, organized
1415
according to what is deemed best-practice -- the proto package name, and version
@@ -19,4 +20,12 @@ number. Protocol buffers themselves are generated via:
1920
run from either this root directory or the `proto/` directory. You can inspect
2021
the `proto/Makefile` to see the commands needed to generate the code.
2122

22-
The generated protobufs themselves are stored in the `pb/` directory.
23+
To generate code using the custom plugin defined in `protoc-gen-bash`, you can run:
24+
25+
make gen-custom
26+
27+
The generated protobuf code itself is stored in the `pb/` directory tree.
28+
29+
One of the plugins used (`protoc-gen-openapi`) generates OpenAPI/Swagger specs.
30+
You can view those in a more human-readable way by pasting them
31+
[here](https://editor.swagger.io/), for example.

protobuf-grpc/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.19
55
require (
66
github.com/bufbuild/buf v1.17.0
77
github.com/fullstorydev/grpcurl v1.8.7
8+
github.com/google/gnostic v0.6.10-0.20230324175454-ade94e0d08cb
89
github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2
910
google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633
1011
google.golang.org/grpc v1.54.0

protobuf-grpc/go.sum

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ github.com/bufbuild/connect-go v1.6.0 h1:OCEB8JuEuvcY5lEKZCQE95CUscqkDtLnQceNhDg
5050
github.com/bufbuild/connect-go v1.6.0/go.mod h1:GmMJYR6orFqD0Y6ZgX8pwQ8j9baizDrIQMm1/a6LnHk=
5151
github.com/bufbuild/protocompile v0.5.1 h1:mixz5lJX4Hiz4FpqFREJHIXLfaLBntfaJv1h+/jS+Qg=
5252
github.com/bufbuild/protocompile v0.5.1/go.mod h1:G5iLmavmF4NsYtpZFvE3B/zFch2GIY8+wjsYLR/lc40=
53+
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
5354
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
5455
github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
5556
github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=
@@ -95,6 +96,7 @@ github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKoh
9596
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
9697
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
9798
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
99+
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
98100
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
99101
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
100102
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -111,6 +113,7 @@ github.com/envoyproxy/protoc-gen-validate v0.9.1 h1:PS7VIOgmSVhWUEeZwTe7z7zouA22
111113
github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w=
112114
github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
113115
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
116+
github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0=
114117
github.com/fullstorydev/grpcurl v1.8.7 h1:xJWosq3BQovQ4QrdPO72OrPiWuGgEsxY8ldYsJbPrqI=
115118
github.com/fullstorydev/grpcurl v1.8.7/go.mod h1:pVtM4qe3CMoLaIzYS8uvTuDj2jVYmXqMUkZeijnXp/E=
116119
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -163,6 +166,8 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg
163166
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
164167
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
165168
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
169+
github.com/google/gnostic v0.6.10-0.20230324175454-ade94e0d08cb h1:PFP0U+Cm+9aj8jn07Uv9Ub1Gc0VdNknOVwjyULFbQxs=
170+
github.com/google/gnostic v0.6.10-0.20230324175454-ade94e0d08cb/go.mod h1:vkRAFr8xQXF9s/6OfXc18TPVlxEb2NXu0NXfiermRmQ=
166171
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
167172
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
168173
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -224,6 +229,7 @@ github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE
224229
github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
225230
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
226231
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
232+
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
227233
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
228234
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
229235
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
@@ -270,8 +276,10 @@ github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
270276
github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
271277
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
272278
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
279+
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
273280
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
274281
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
282+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
275283
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
276284
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
277285
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
@@ -282,6 +290,9 @@ github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ
282290
github.com/tetratelabs/wazero v1.0.1 h1:xyWBoGyMjYekG3mEQ/W7xm9E05S89kJ/at696d/9yuc=
283291
github.com/tetratelabs/wazero v1.0.1/go.mod h1:wYx2gNRg8/WihJfSDxA1TIL8H+GkfLYm+bIfbblu9VQ=
284292
github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME=
293+
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
294+
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
295+
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
285296
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
286297
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
287298
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -378,6 +389,7 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R
378389
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
379390
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
380391
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
392+
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
381393
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
382394
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
383395
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
@@ -560,6 +572,7 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D
560572
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
561573
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
562574
google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
575+
google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
563576
google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
564577
google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633 h1:0BOZf6qNozI3pkN3fJLwNubheHJYHhMh91GRFOWWK08=
565578
google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Generated with protoc-gen-openapi
2+
# https://github.com/google/gnostic/tree/master/cmd/protoc-gen-openapi
3+
4+
openapi: 3.0.3
5+
info:
6+
title: ""
7+
version: 0.0.1
8+
paths: {}
9+
components:
10+
schemas: {}

protobuf-grpc/pb/echo/v1/echo.swagger.json

Lines changed: 0 additions & 103 deletions
This file was deleted.

0 commit comments

Comments
 (0)