File: Dockerfile

package info (click to toggle)
opm-simulators 2025.10%2Bds-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 21,460 kB
  • sloc: cpp: 193,029; sh: 1,807; python: 1,704; lisp: 1,108; makefile: 31; awk: 10
file content (71 lines) | stat: -rw-r--r-- 3,911 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Dockerfile to generate PyPI packages. Needs to be run from the opm-simulators/python folder
#
# NOTE: Preferred way to build this docker image is to use docker/run-docker-build.sh
#
# Example use:
# docker build -t manylinux2014_opm:static . -f docker/Dockerfile
# docker build -t manylinux2014_opm:shared . -f docker/Dockerfile --build-arg libtype=shared
# docker build -t manylinux2014_opm:py312 . -f docker/Dockerfile --build-arg python_versions="3.12"
# docker build -t manylinux2014_opm:pr-test . -f docker/Dockerfile --build-arg version_simulators="pull/1234/head"
#
# To extract the wheel files from the final scratch image to a local directory, add --output:
# docker build -t manylinux2014_opm:static . -f docker/Dockerfile --output wheelhouse
# docker build -t manylinux2014_opm:shared . -f docker/Dockerfile --build-arg libtype=shared --output wheelhouse-shared
#
# Note: To see detailed build output instead of buildx progress, use:
# DOCKER_BUILDKIT=0 docker build -t manylinux2014_opm:built . -f docker/Dockerfile
# To redirect output to a log file for later inspection:
# docker build -t manylinux2014_opm:shared . -f docker/Dockerfile --build-arg libtype=shared 2>&1 | tee build.log

# Using manylinux_2_28 for broad compatibility (Debian 10+, Ubuntu 18.10+, CentOS/RHEL 8+)
# Newer manylinux_2_34 is available but has narrower distribution support
FROM quay.io/pypa/manylinux_2_28_x86_64 AS stage1
# Version control for each OPM repository (supports branches, tags, or PR refs like "pull/1234/head")
ARG version_common="master"
ARG version_grid="master"
ARG version_simulators="master"
ARG libtype="static"  # "static" for static libraries (.a), "shared" for shared libraries (.so)
WORKDIR /tmp/opm
RUN if [ "$libtype" != "static" ] && [ "$libtype" != "shared" ]; then \
        echo "Error: libtype must be 'static' or 'shared', got '$libtype'"; \
        exit 1; \
    fi
RUN echo "Using versions - Common: $version_common, Grid: $version_grid, Simulators: $version_simulators"
# Copy only the setup script to avoid invalidating cache with source code changes
COPY docker/scripts/setup-docker-image.sh /tmp/opm/setup-docker-image.sh
RUN /bin/bash setup-docker-image.sh $libtype

# Multi-stage build: stage1=setup, stage2=build deps, stage3=generate packages, export_stage=extract results
FROM stage1 AS stage2
ARG libtype="static"
ARG build_jobs=4
# Build dependencies in separate layers for better Docker caching
# Copy only dependency build scripts (delay "ADD . .") to preserve cache layers for better debugging
#   experience. I.e. if you change the source code, the build will not be invalidated and you have to
#   rebuild everything from scratch.
COPY docker/scripts/build-boost.sh /tmp/opm/build-boost.sh
RUN /bin/bash build-boost.sh $build_jobs $libtype
COPY docker/scripts/build-dune.sh /tmp/opm/build-dune.sh
RUN /bin/bash build-dune.sh $build_jobs $libtype

FROM stage2 AS stage3
# Version control for each OPM repository
ARG version_common="master"
ARG version_grid="master"
ARG version_simulators="master"
ARG libtype="static"
ARG build_jobs=4
ARG version_tag=""
# CMake build targets (default for master branch, may differ in PRs)
ARG target_common="opmcommon_python"
ARG target_simulators="simulators"
# Default Python versions - can be overridden via build-arg or read from docker/python_versions.json
# NOTE: The list is maintained in docker/python_versions.json and docker/scripts/sync_versions.sh
ARG python_versions="3.8,3.9,3.10,3.11,3.12,3.13"
# Finally copy all source files - only needed for wheel generation
ADD . .
RUN /bin/bash docker/scripts/generate-pypi-package.sh "$version_common" "$version_grid" "$version_simulators" "$build_jobs" "$version_tag" $libtype "$python_versions" "$target_common" "$target_simulators"

# Final stage: extract only the wheel files using minimal scratch image
FROM scratch AS export_stage
COPY --from=stage3 /tmp/opm/wheelhouse .