Skip to content

Commit b6e783c

Browse files
hyperpolymathclaude
andcommitted
fix(wave3): or-tools deterministic export (include/ COPY hard-failed too)
Retest showed scip PASS but or-tools still failed at a *deeper* instance of the same gap: the OR-Tools tarball download failed, so /usr/local/include/ ortools was never created and the runtime COPY of it hard-failed the whole image. Apply the tamarin/scip deterministic-export pattern: installer assembles /opt/or-tools-export/{lib,include/ortools} (real or just .keep); runtime does directory COPYs that never fail on an empty glob. Refs #53. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 55d333d commit b6e783c

1 file changed

Lines changed: 15 additions & 8 deletions

File tree

.containerization/Containerfile.wave3

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -354,10 +354,16 @@ RUN set -eux; \
354354
mkdir -p /opt/or-tools/lib; \
355355
}
356356

357-
# Copy shared libraries and headers to system locations
358-
RUN mkdir -p /usr/local/lib /usr/local/include && \
359-
cp -r /opt/or-tools/lib/. /usr/local/lib/ && \
360-
cp -r /opt/or-tools/include/. /usr/local/include/ && \
357+
# Assemble a deterministic export tree (real libs/headers if the tarball
358+
# downloaded, empty-but-present otherwise). The old step left
359+
# /usr/local/include/ortools absent on a failed download, hard-failing the
360+
# runtime COPY and breaking the whole image. Same tamarin/scip pattern.
361+
RUN set -eux; \
362+
mkdir -p /opt/or-tools-export/lib /opt/or-tools-export/include/ortools; \
363+
cp -a /opt/or-tools/lib/. /opt/or-tools-export/lib/ 2>/dev/null || true; \
364+
cp -a /opt/or-tools/include/. /opt/or-tools-export/include/ 2>/dev/null || true; \
365+
touch /opt/or-tools-export/lib/.keep /opt/or-tools-export/include/ortools/.keep; \
366+
cp -a /opt/or-tools-export/lib/. /usr/local/lib/ 2>/dev/null || true; \
361367
ldconfig || true
362368

363369
FROM docker.io/library/debian:bookworm-slim AS or-tools
@@ -386,10 +392,11 @@ WORKDIR /app
386392

387393
COPY --from=rust-builder /build/target/release/echidna /app/bin/echidna
388394

389-
# Copy OR-Tools shared libraries into the runtime image.
390-
# libortools.so and its dependencies (libCoinUtils, libClp, etc.) live in /usr/local/lib.
391-
COPY --from=ortools-installer /usr/local/lib /usr/local/lib/
392-
COPY --from=ortools-installer /usr/local/include/ortools /usr/local/include/ortools/
395+
# Copy OR-Tools libs/headers from the deterministic export tree (always
396+
# present — real content if the tarball downloaded, just .keep otherwise;
397+
# directory COPY never hard-fails on an empty glob).
398+
COPY --from=ortools-installer /opt/or-tools-export/lib/ /usr/local/lib/
399+
COPY --from=ortools-installer /opt/or-tools-export/include/ortools/ /usr/local/include/ortools/
393400

394401
ENV PATH="/app/bin:${PATH}"
395402
ENV ECHIDNA_PROVER_PATH="/usr/local/lib"

0 commit comments

Comments
 (0)