7 Commits
0.0.1 ... main

Author SHA1 Message Date
Michael Pivato
cb9ed04ffc Merge branch 'dockerfile-split' into 'main'
Dockerfile split

See merge request vato007/protoc-docker!2
2021-02-02 13:08:29 +00:00
Michael Pivato
d0af2e21ba Split up python/swift dockerfiles
Doing this as I don't need to have both in a single container (not needed)
2021-02-02 13:08:29 +00:00
Michael Pivato
983a1460d8 Merge branch 'compile-swift' into 'main'
See merge request vato007/protoc-docker!1
2020-11-29 11:16:50 +00:00
Michael Pivato
d805586f15 Compile grpc-swift plugins in Dockerfile 2020-11-29 11:16:49 +00:00
Piv
24bc8259bd Use protoc as entrypoint 2020-11-24 12:45:48 +10:30
Piv
d0ce4a41a3 Update readme 2020-11-24 12:42:04 +10:30
Piv
423db22640 Add grpc python build 2020-11-23 21:54:39 +10:30
8 changed files with 101 additions and 14 deletions

View File

@@ -4,20 +4,45 @@ stages:
- build
- deploy
build:
build_protoc:
stage: build
script:
- echo ${DOCKER_PASSWORD} | docker login vato.ddns.net:8083 --username ${DOCKER_USERNAME} --password-stdin
- docker build -t vato.ddns.net:8082/protoc:latest .
build_swift_web:
stage: build
rules:
- changes:
- swift_web/*
script:
- echo ${DOCKER_PASSWORD} | docker login vato.ddns.net:8083 --username ${DOCKER_USERNAME} --password-stdin
- docker build -t vato.ddns.net:8082/protoc-grpc-swift-web:latest -f swift_web/Dockerfile swift_web
build_python:
stage: build
rules:
- changes:
- python/*
script:
- echo ${DOCKER_PASSWORD} | docker login vato.ddns.net:8083 --username ${DOCKER_USERNAME} --password-stdin
- docker build -t vato.ddns.net:8082/protoc-grpc-python:latest -f python/Dockerfile .
deploy:
stage: deploy
needs:
- build
- build_protoc
- build_swift_web
- build_python
script:
- docker image tag vato.ddns.net:8082/protoc:latest vato.ddns.net:8082/protoc:${CI_COMMIT_TAG}
- docker image tag vato.ddns.net:8082/protoc-grpc-swift-web:latest vato.ddns.net:8082/protoc-grpc-swift-web:${CI_COMMIT_TAG}
- echo ${DOCKER_PASSWORD} | docker login vato.ddns.net:8082 --username ${DOCKER_USERNAME} --password-stdin
- docker push vato.ddns.net:8082/protoc:latest
- docker push vato.ddns.net:8082/protoc:${CI_COMMIT_TAG}
- docker push vato.ddns.net:8082/protoc-swift-web:latest
- docker push vato.ddns.net:8082/protoc-grpc-swift-web:${CI_COMMIT_TAG}
- docker push vato.ddns.net:8082/protoc-grpc-python:latest
- docker push vato.ddns.net:8082/protoc-grpc-python:${CI_COMMIT_TAG}
only:
- tags

View File

@@ -2,7 +2,6 @@ FROM vato.ddns.net:8083/alpine
ARG ARCH=x86_64
ARG PROTOC_VERSION=3.14.0
ARG GRPC_WEB_VERSION=1.2.1
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-2.32-r0.apk && \
@@ -12,13 +11,3 @@ RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC
unzip protoc.zip -d /usr/ && \
chmod +x /usr/bin/protoc && \
rm protoc.zip /usr/readme.txt
RUN wget https://github.com/grpc/grpc-web/releases/download/${GRPC_WEB_VERSION}/protoc-gen-grpc-web-${GRPC_WEB_VERSION}-linux-${ARCH} && \
wget https://github.com/grpc/grpc-web/releases/download/${GRPC_WEB_VERSION}/protoc-gen-grpc-web-${GRPC_WEB_VERSION}-linux-${ARCH}.sha256 && \
cat protoc-gen-grpc-web-*.sha256 | sha256sum -c
RUN rm protoc-gen-grpc-web-*.sha256 && \
mv protoc-gen-grpc-web-* /usr/bin/protoc-gen-grpc-web && \
chmod +x /usr/bin/protoc-gen-grpc-web
COPY ./protoc-gen-* /usr/bin/

View File

@@ -1,7 +1,10 @@
# Protoc Docker
Docker container for generating protobuf code. Right now used in CI only for other projects.
Smallish image size (~220mb); unfortunately the grpc-swift plugins cause it to blow out as they're statically linked (so don't need foundation or the swift dependencies).
Not copying them across will save ~100mb in space.
## TODOS
- Build the swift plugins inside this repo, rather than committing the built plugins
- Build the grpc-web plugins in the dockerfile, rather than downloading built versions
- Use CMake/Bazel for building the c grpc plugins - [CMake dockerfile](https://hub.docker.com/r/kitware/cmake)

Binary file not shown.

Binary file not shown.

26
python/Dockerfile Normal file
View File

@@ -0,0 +1,26 @@
FROM vato.ddns.net:8083/python AS CGRPC_BUILDER
ARG CGRPC_VERSION=v1.35.0
RUN apt update -y && apt install git build-essential autoconf libtool pkg-config zlib1g-dev curl clang -y
RUN git clone -b ${CGRPC_VERSION} --recursive https://github.com/grpc/grpc
RUN cd grpc && tools/bazel build //src/compiler:grpc_python_plugin
FROM vato.ddns.net:8083/alpine
ARG ARCH=x86_64
ARG PROTOC_VERSION=3.14.0
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-2.32-r0.apk && \
apk add glibc-2.32-r0.apk && \
rm glibc-2.32-r0.apk
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-${ARCH}.zip -O protoc.zip && \
unzip protoc.zip -d /usr/ && \
chmod +x /usr/bin/protoc && \
rm protoc.zip /usr/readme.txt
COPY --from=CGRPC_BUILDER /grpc/bazel-bin/src/compiler/grpc_python_plugin /usr/bin/protoc-gen-grpc-python

34
swift_web/Dockerfile Normal file
View File

@@ -0,0 +1,34 @@
FROM vato.ddns.net:8083/swift AS SWIFT_BUILDER
ARG GRPC_SWIFT_VERSION=1.0.0-alpha.21
RUN git clone -b ${GRPC_SWIFT_VERSION} https://github.com/grpc/grpc-swift.git grpc-swift
COPY ./build_grpc_swift_plugins_static.sh grpc-swift/
RUN cd grpc-swift && chmod +x build_grpc_swift_plugins_static.sh && ./build_grpc_swift_plugins_static.sh && rm -rf .build
FROM vato.ddns.net:8083/alpine
ARG ARCH=x86_64
ARG PROTOC_VERSION=3.14.0
ARG GRPC_WEB_VERSION=1.2.1
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-2.32-r0.apk && \
apk add glibc-2.32-r0.apk
RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-${ARCH}.zip -O protoc.zip && \
unzip protoc.zip -d /usr/ && \
chmod +x /usr/bin/protoc && \
rm protoc.zip /usr/readme.txt
RUN wget https://github.com/grpc/grpc-web/releases/download/${GRPC_WEB_VERSION}/protoc-gen-grpc-web-${GRPC_WEB_VERSION}-linux-${ARCH} && \
wget https://github.com/grpc/grpc-web/releases/download/${GRPC_WEB_VERSION}/protoc-gen-grpc-web-${GRPC_WEB_VERSION}-linux-${ARCH}.sha256 && \
cat protoc-gen-grpc-web-*.sha256 | sha256sum -c
RUN rm protoc-gen-grpc-web-*.sha256 && \
mv protoc-gen-grpc-web-* /usr/bin/protoc-gen-grpc-web && \
chmod +x /usr/bin/protoc-gen-grpc-web
COPY --from=SWIFT_BUILDER /grpc-swift/protoc-gen-* /usr/bin/

View File

@@ -0,0 +1,10 @@
SWIFT_BUILD_PATH=./.build
PROTOC_GEN_SWIFT=${SWIFT_BUILD_PATH}/release/protoc-gen-swift
PROTOC_GEN_GRPC_SWIFT=${SWIFT_BUILD_PATH}/release/protoc-gen-grpc-swift
MAIN_SCRIPT="swift build --configuration=release --build-path=${SWIFT_BUILD_PATH} -Xswiftc -static-executable"
${MAIN_SCRIPT} --product protoc-gen-swift
${MAIN_SCRIPT} --product protoc-gen-grpc-swift
cp ${SWIFT_BUILD_PATH}/release/protoc-gen-swift .
cp ${SWIFT_BUILD_PATH}/release/protoc-gen-grpc-swift .