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 - build
- deploy - deploy
build: build_protoc:
stage: build stage: build
script: script:
- echo ${DOCKER_PASSWORD} | docker login vato.ddns.net:8083 --username ${DOCKER_USERNAME} --password-stdin - echo ${DOCKER_PASSWORD} | docker login vato.ddns.net:8083 --username ${DOCKER_USERNAME} --password-stdin
- docker build -t vato.ddns.net:8082/protoc:latest . - 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: deploy:
stage: deploy stage: deploy
needs: needs:
- build - build_protoc
- build_swift_web
- build_python
script: 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: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 - 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:latest
- docker push vato.ddns.net:8082/protoc:${CI_COMMIT_TAG} - 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: only:
- tags - tags

View File

@@ -2,7 +2,6 @@ FROM vato.ddns.net:8083/alpine
ARG ARCH=x86_64 ARG ARCH=x86_64
ARG PROTOC_VERSION=3.14.0 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 && \ 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 && \ 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/ && \ unzip protoc.zip -d /usr/ && \
chmod +x /usr/bin/protoc && \ chmod +x /usr/bin/protoc && \
rm protoc.zip /usr/readme.txt 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 # Protoc Docker
Docker container for generating protobuf code. Right now used in CI only for other projects. 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 ## 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 .