|
| 1 | +FROM debian:trixie AS builder |
| 2 | + |
| 3 | +ARG THRIFT_VERSION=0.22.0 |
| 4 | +ARG THRIFT_SOURCE_URL=https://archive.apache.org/dist/thrift/0.22.0/thrift-0.22.0.tar.gz |
| 5 | +ARG THRIFT_SOURCE_SHA256=794a0e455787960d9f27ab92c38e34da27e8deeda7a5db0e59dc64a00df8a1e5 |
| 6 | +ARG THRIFT_SOURCE_SIGNER=8CD87F186F06E958EFCA963D76BD340FC4B75865 |
| 7 | + |
| 8 | +RUN set -eux; \ |
| 9 | + apt-get update; \ |
| 10 | + apt-get install -y --no-install-recommends \ |
| 11 | + bison \ |
| 12 | + ca-certificates \ |
| 13 | + cmake \ |
| 14 | + curl \ |
| 15 | + flex \ |
| 16 | + g++ \ |
| 17 | + gnupg \ |
| 18 | + make \ |
| 19 | + ; \ |
| 20 | + rm -rf /var/lib/apt/lists/* |
| 21 | + |
| 22 | +WORKDIR /usr/src |
| 23 | + |
| 24 | +RUN set -eux; \ |
| 25 | + curl -fsSL -o thrift.tar.gz "$THRIFT_SOURCE_URL"; \ |
| 26 | + curl -fsSL -o thrift.tar.gz.asc "$THRIFT_SOURCE_URL.asc"; \ |
| 27 | + curl -fsSL -o thrift-KEYS https://downloads.apache.org/thrift/KEYS; \ |
| 28 | + echo "$THRIFT_SOURCE_SHA256 *thrift.tar.gz" | sha256sum -c -; \ |
| 29 | + export GNUPGHOME="$(mktemp -d)"; \ |
| 30 | + gpg --batch --import thrift-KEYS; \ |
| 31 | + gpg --batch --status-fd 1 --verify thrift.tar.gz.asc thrift.tar.gz > gpg.status; \ |
| 32 | + grep -F "[GNUPG:] VALIDSIG $THRIFT_SOURCE_SIGNER " gpg.status; \ |
| 33 | + gpgconf --kill all; \ |
| 34 | + rm -rf "$GNUPGHOME"; \ |
| 35 | + mkdir thrift; \ |
| 36 | + tar -xzf thrift.tar.gz -C thrift --strip-components=1; \ |
| 37 | + rm thrift.tar.gz thrift.tar.gz.asc thrift-KEYS gpg.status |
| 38 | + |
| 39 | +RUN set -eux; \ |
| 40 | + cmake -S thrift -B build \ |
| 41 | + -DCMAKE_BUILD_TYPE=Release \ |
| 42 | + -DBUILD_COMPILER=ON \ |
| 43 | + -DBUILD_LIBRARIES=OFF \ |
| 44 | + -DBUILD_TESTING=OFF \ |
| 45 | + -DBUILD_TUTORIALS=OFF; \ |
| 46 | + cmake --build build --target thrift-compiler -j "$(nproc)"; \ |
| 47 | + cmake --install build --prefix /opt/thrift |
| 48 | + |
| 49 | +FROM debian:trixie-slim |
| 50 | + |
| 51 | +ARG THRIFT_VERSION=0.22.0 |
| 52 | + |
| 53 | +LABEL org.opencontainers.image.title="Apache Thrift Compiler" \ |
| 54 | + org.opencontainers.image.version="$THRIFT_VERSION" \ |
| 55 | + org.opencontainers.image.source="https://github.com/apache/thrift" \ |
| 56 | + org.opencontainers.image.url="https://thrift.apache.org/" \ |
| 57 | + org.opencontainers.image.licenses="Apache-2.0" |
| 58 | + |
| 59 | +RUN set -eux; \ |
| 60 | + apt-get update; \ |
| 61 | + apt-get install -y --no-install-recommends libstdc++6; \ |
| 62 | + rm -rf /var/lib/apt/lists/* |
| 63 | + |
| 64 | +COPY --from=builder /opt/thrift/bin/thrift /usr/local/bin/thrift |
| 65 | +COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh |
| 66 | +COPY tests/smoke.thrift /tmp/smoke.thrift |
| 67 | + |
| 68 | +RUN set -eux; \ |
| 69 | + thrift --version | grep -F "$THRIFT_VERSION"; \ |
| 70 | + mkdir -p /tmp/smoke-out; \ |
| 71 | + thrift --gen json -o /tmp/smoke-out /tmp/smoke.thrift; \ |
| 72 | + find /tmp/smoke-out -type f | grep -q .; \ |
| 73 | + rm -rf /tmp/smoke.thrift /tmp/smoke-out |
| 74 | + |
| 75 | +WORKDIR /data |
| 76 | + |
| 77 | +ENTRYPOINT ["docker-entrypoint.sh"] |
| 78 | +CMD ["thrift"] |
0 commit comments