|
1 | | -# This Dockerfile can be used to build lilvlib using: |
2 | | -# - Ubuntu 18 |
3 | | -# - Python 3.6 |
| 1 | +# Multi-stage Dockerfile for building and testing lilvlib |
| 2 | +# Usage: |
| 3 | +# docker build -t lilvlib-build . |
| 4 | +# docker run --rm -v $(pwd)/dist:/dist lilvlib-build |
| 5 | +# |
| 6 | +# To run only the build stage (skip tests): |
| 7 | +# docker build --target builder -t lilvlib-builder . |
4 | 8 |
|
5 | | -FROM moddevices/devtools:ub18-py36 |
| 9 | +# ============================================================================= |
| 10 | +# Stage 1: Builder - compile python3-lilv and build wheel |
| 11 | +# ============================================================================= |
| 12 | +FROM ubuntu:22.04 AS builder |
6 | 13 |
|
7 | | -LABEL Alexandre Cunha <ale@moddevices.com> |
| 14 | +ENV DEBIAN_FRONTEND=noninteractive |
8 | 15 |
|
9 | | -RUN mkdir /root/.ssh |
10 | | -RUN touch /root/.ssh/known_hosts |
11 | | -RUN ssh-keyscan github.com >> /root/.ssh/known_hosts |
| 16 | +RUN apt-get update && apt-get install -y --no-install-recommends \ |
| 17 | + ca-certificates \ |
| 18 | + curl \ |
| 19 | + debhelper \ |
| 20 | + devscripts \ |
| 21 | + dpkg-dev \ |
| 22 | + git \ |
| 23 | + libpcre3-dev \ |
| 24 | + meson \ |
| 25 | + pkg-config \ |
| 26 | + python3-all-dev \ |
| 27 | + python3-pip \ |
| 28 | + python3-setuptools \ |
| 29 | + python3-wheel \ |
| 30 | + && rm -rf /var/lib/apt/lists/* |
12 | 31 |
|
13 | | -RUN apt-get install --no-install-recommends -qy libpcre3-dev \ |
14 | | - devscripts pkg-config swig debhelper python3-numpy \ |
15 | | - && apt-get clean |
| 32 | +# Ubuntu 22.04's meson (0.61.2) is incompatible with the build |
| 33 | +RUN curl -sLO https://launchpad.net/~kxstudio-debian/+archive/ubuntu/toolchain/+files/meson_1.9.1-1kxstudio2_all.deb \ |
| 34 | + && dpkg -i meson_1.9.1-1kxstudio2_all.deb \ |
| 35 | + && rm meson_1.9.1-1kxstudio2_all.deb |
16 | 36 |
|
17 | | -COPY . /lilvlib |
18 | | -WORKDIR /lilvlib |
| 37 | +WORKDIR /src |
| 38 | +COPY . . |
19 | 39 |
|
20 | | -RUN ./build-python3-lilv.sh |
21 | | -RUN pip3 wheel -w wheelhouse . |
| 40 | +ENV DIST_DIR=/artifacts |
| 41 | +RUN ./scripts/build.sh |
| 42 | + |
| 43 | +# ============================================================================= |
| 44 | +# Stage 2: Tester - validate artifacts in a clean environment |
| 45 | +# ============================================================================= |
| 46 | +FROM ubuntu:22.04 AS tester |
| 47 | + |
| 48 | +ENV DEBIAN_FRONTEND=noninteractive |
| 49 | + |
| 50 | +RUN apt-get update && apt-get install -y --no-install-recommends \ |
| 51 | + python3 \ |
| 52 | + python3-pip \ |
| 53 | + python3-venv \ |
| 54 | + && rm -rf /var/lib/apt/lists/* |
| 55 | + |
| 56 | +WORKDIR /src |
| 57 | +COPY --from=builder /artifacts /artifacts |
| 58 | +COPY --from=builder /src/test.py /src/ |
| 59 | +COPY --from=builder /src/lilvlib /src/lilvlib |
| 60 | +COPY --from=builder /src/scripts /src/scripts |
| 61 | + |
| 62 | +ENV DIST_DIR=/artifacts |
| 63 | +RUN apt-get update && ./scripts/test.sh && rm -rf /var/lib/apt/lists/* |
| 64 | + |
| 65 | +# ============================================================================= |
| 66 | +# Final Stage: Artifacts - extract build outputs (runs after tests pass) |
| 67 | +# ============================================================================= |
| 68 | +FROM ubuntu:22.04 |
| 69 | + |
| 70 | +WORKDIR /artifacts |
| 71 | +COPY --from=tester /artifacts /artifacts |
| 72 | + |
| 73 | +CMD ["sh", "-c", "cp -v /artifacts/* /dist/ 2>/dev/null || echo 'Mount a volume to /dist to extract artifacts: docker run --rm -v $(pwd)/dist:/dist <image>'"] |
0 commit comments