Skip to content

Commit 358909a

Browse files
author
Matthias Koeppe
committed
tox.ini (docker), build/bin/write-dockerfile.sh [DOCKER_BUILDKIT=1]: Save error status in a file
1 parent 755fd97 commit 358909a

File tree

2 files changed

+39
-21
lines changed

2 files changed

+39
-21
lines changed

build/bin/write-dockerfile.sh

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,18 @@ EOF
214214
;;
215215
esac
216216
esac
217+
218+
case ${DOCKER_BUILDKIT-0} in
219+
1)
220+
# With buildkit we cannot retrieve failed builds.
221+
# So we do not allow the main step of a build stage to fail.
222+
# Instead we record the exit code in the file STATUS.
223+
THEN_SAVE_STATUS='; echo $? > STATUS'
224+
# ... and at the beginning of the next build stage,
225+
# we check the status and exit with an error status.
226+
CHECK_STATUS_THEN='STATUS=$(cat STATUS 2>/dev/null); case "$STATUS" in ""|0) ;; *) exit $STATUS;; esac; '
227+
esac
228+
217229
cat <<EOF
218230
219231
FROM with-system-packages as bootstrapped
@@ -230,20 +242,20 @@ $ADD pkgs pkgs
230242
$ADD build ./build
231243
$ADD .upstream.d ./.upstream.d
232244
ARG BOOTSTRAP=./bootstrap
233-
$RUN sh -x -c "\${BOOTSTRAP}" $ENDRUN
245+
$RUN sh -x -c "\${BOOTSTRAP}" $ENDRUN $THEN_SAVE_STATUS
234246
235247
FROM bootstrapped as configured
236248
#:configuring:
237-
RUN mkdir -p logs/pkgs; rm -f config.log; ln -s logs/pkgs/config.log config.log
249+
RUN $CHECK_STATUS_THEN mkdir -p logs/pkgs; rm -f config.log; ln -s logs/pkgs/config.log config.log
238250
ARG EXTRA_CONFIGURE_ARGS=""
239251
EOF
240252
if [ ${WITH_SYSTEM_SPKG} = "force" ]; then
241253
cat <<EOF
242-
$RUN echo "****** Configuring: ./configure --enable-build-as-root $CONFIGURE_ARGS \${EXTRA_CONFIGURE_ARGS} *******"; ./configure --enable-build-as-root $CONFIGURE_ARGS \${EXTRA_CONFIGURE_ARGS} || (echo "********** configuring without forcing ***********"; echo "::group::config.log"; cat config.log; echo "::endgroup::"; ./configure --enable-build-as-root; echo "::group::config.log"; cat config.log; echo "::endgroup::"; exit 1) $ENDRUN
254+
$RUN echo "****** Configuring: ./configure --enable-build-as-root $CONFIGURE_ARGS \${EXTRA_CONFIGURE_ARGS} *******"; ./configure --enable-build-as-root $CONFIGURE_ARGS \${EXTRA_CONFIGURE_ARGS} || (echo "********** configuring without forcing ***********"; echo "::group::config.log"; cat config.log; echo "::endgroup::"; ./configure --enable-build-as-root; echo "::group::config.log"; cat config.log; echo "::endgroup::"; exit 1) $ENDRUN $THEN_SAVE_STATUS
243255
EOF
244256
else
245257
cat <<EOF
246-
$RUN echo "****** Configuring: ./configure --enable-build-as-root $CONFIGURE_ARGS \${EXTRA_CONFIGURE_ARGS} *******"; ./configure --enable-build-as-root $CONFIGURE_ARGS \${EXTRA_CONFIGURE_ARGS} || (echo "::group::config.log"; cat config.log; echo "::endgroup::"; exit 1) $ENDRUN
258+
$RUN echo "****** Configuring: ./configure --enable-build-as-root $CONFIGURE_ARGS \${EXTRA_CONFIGURE_ARGS} *******"; ./configure --enable-build-as-root $CONFIGURE_ARGS \${EXTRA_CONFIGURE_ARGS} || (echo "::group::config.log"; cat config.log; echo "::endgroup::"; exit 1) $ENDRUN $THEN_SAVE_STATUS
247259
EOF
248260
fi
249261
cat <<EOF
@@ -256,7 +268,7 @@ ARG USE_MAKEFLAGS="-k V=0"
256268
ENV SAGE_CHECK=warn
257269
ENV SAGE_CHECK_PACKAGES="!cython,!r,!python3,!gap,!cysignals,!linbox,!git,!ppl,!cmake,!rpy2,!sage_sws2rst"
258270
#:toolchain:
259-
$RUN make \${USE_MAKEFLAGS} base-toolchain $ENDRUN
271+
$RUN $CHECK_STATUS_THEN make \${USE_MAKEFLAGS} base-toolchain $ENDRUN $THEN_SAVE_STATUS
260272
261273
FROM with-base-toolchain as with-targets-pre
262274
ARG NUMPROC=8
@@ -266,7 +278,7 @@ ENV SAGE_CHECK=warn
266278
ENV SAGE_CHECK_PACKAGES="!cython,!r,!python3,!gap,!cysignals,!linbox,!git,!ppl,!cmake,!rpy2,!sage_sws2rst"
267279
#:make:
268280
ARG TARGETS_PRE="all-sage-local"
269-
$RUN make SAGE_SPKG="sage-spkg -y -o" \${USE_MAKEFLAGS} \${TARGETS_PRE} $ENDRUN
281+
$RUN $CHECK_STATUS_THEN make SAGE_SPKG="sage-spkg -y -o" \${USE_MAKEFLAGS} \${TARGETS_PRE} $ENDRUN $THEN_SAVE_STATUS
270282
271283
FROM with-targets-pre as with-targets
272284
ARG NUMPROC=8
@@ -276,7 +288,7 @@ ENV SAGE_CHECK=warn
276288
ENV SAGE_CHECK_PACKAGES="!cython,!r,!python3,!gap,!cysignals,!linbox,!git,!ppl,!cmake,!rpy2,!sage_sws2rst"
277289
$ADD src src
278290
ARG TARGETS="build"
279-
$RUN make SAGE_SPKG="sage-spkg -y -o" \${USE_MAKEFLAGS} \${TARGETS} $ENDRUN
291+
$RUN $CHECK_STATUS_THEN make SAGE_SPKG="sage-spkg -y -o" \${USE_MAKEFLAGS} \${TARGETS} $ENDRUN $THEN_SAVE_STATUS
280292
281293
FROM with-targets as with-targets-optional
282294
ARG NUMPROC=8
@@ -285,7 +297,7 @@ ARG USE_MAKEFLAGS="-k V=0"
285297
ENV SAGE_CHECK=warn
286298
ENV SAGE_CHECK_PACKAGES="!cython,!r,!python3,!gap,!cysignals,!linbox,!git,!ppl,!cmake,!rpy2,!sage_sws2rst"
287299
ARG TARGETS_OPTIONAL="ptest"
288-
$RUN make SAGE_SPKG="sage-spkg -y -o" \${USE_MAKEFLAGS} \${TARGETS_OPTIONAL} || echo "(error ignored)" $ENDRUN
300+
$RUN $CHECK_STATUS_THEN make SAGE_SPKG="sage-spkg -y -o" \${USE_MAKEFLAGS} \${TARGETS_OPTIONAL} || echo "(error ignored)" $ENDRUN $THEN_SAVE_STATUS
289301
290302
#:end:
291303
EOF

tox.ini

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -771,14 +771,29 @@ commands =
771771
docker: unset CONTAINER; \
772772
docker: if [ $status != 0 ]; then \
773773
docker: if [ $DOCKER_BUILDKIT = 0 ]; then \
774-
docker: BUILD_TAG="$BUILD_TAG-failed"; CONTAINER=$(docker ps -l -q); docker commit $CONTAINER $BUILD_IMAGE:$BUILD_TAG; PUSH_TAGS=$BUILD_IMAGE:$BUILD_TAG; \
774+
docker: BUILD_TAG="$BUILD_TAG-failed"; CONTAINER=$(docker ps -l -q); docker commit $CONTAINER $BUILD_IMAGE:$BUILD_TAG; \
775775
docker: else \
776-
docker: unset BUILD_TAG; unset PUSH_TAGS; echo "DOCKER_BUILDKIT=1, so we cannot commit and tag the failed image"; \
776+
docker: unset BUILD_TAG; echo "DOCKER_BUILDKIT=1, so we cannot commit and tag the failed image"; \
777777
docker: fi; \
778-
docker: else \
779-
docker: PUSH_TAGS=$(echo $BUILD_IMAGE:$BUILD_TAG; for tag in {env:EXTRA_DOCKER_TAGS:}; do echo "$BUILD_IMAGE:$tag"; done); \
780778
docker: fi; \
781779
docker: if [ -n "$BUILD_TAG" ]; then \
780+
docker: echo "Copying logs from the container to {envdir}/sage/"; \
781+
docker: rm -f {envdir}/sage/STATUS; \
782+
docker: docker run $BUILD_IMAGE:$BUILD_TAG bash -c " \
783+
docker: tar -c --ignore-failed-read -f - \
784+
docker: /sage/STATUS /sage/logs /sage/{prefix,venv}/var/lib/sage/installed \
785+
docker: ~/.sage/timings2.json /sage/pkgs/*/.tox/*/.sage/timings2.json \
786+
docker: /sage/pkgs/*/.tox/*/logs 2> /dev/null" \
787+
docker: | (cd {envdir} && tar xf -); \
788+
docker: if [ -f {envdir}/sage/STATUS ]; then status=$(cat {envdir}/sage/STATUS); fi; \
789+
docker: fi; \
790+
docker: unset PUSH_TAGS; \
791+
docker: if [ -n "$BUILD_TAG" ]; then \
792+
docker: if [ $status != 0 ]; then \
793+
docker: BUILD_TAG="${BUILD_TAG%-failed}-failed"; PUSH_TAGS=$BUILD_IMAGE:$BUILD_TAG; \
794+
docker: else \
795+
docker: PUSH_TAGS=$(echo $BUILD_IMAGE:$BUILD_TAG; for tag in {env:EXTRA_DOCKER_TAGS:}; do echo "$BUILD_IMAGE:$tag"; done); \
796+
docker: fi; \
782797
docker: echo $BUILD_IMAGE:$BUILD_TAG >> {envdir}/Dockertags; \
783798
docker: fi; \
784799
docker: if [ x"{env:DOCKER_PUSH_REPOSITORY:}" != x -a x"$PUSH_TAGS" != x ]; then \
@@ -787,15 +802,6 @@ commands =
787802
docker: if docker push $tag; then echo $tag >> {envdir}/Dockertags.pushed; else echo "(ignoring errors)"; fi; \
788803
docker: done; \
789804
docker: fi; \
790-
docker: if [ x"$BUILD_TAG" != x ]; then \
791-
docker: echo "Copying logs from the container to {envdir}/sage/"; \
792-
docker: docker run $BUILD_IMAGE:$BUILD_TAG bash -c " \
793-
docker: tar -c --ignore-failed-read -f - \
794-
docker: /sage/logs /sage/{prefix,venv}/var/lib/sage/installed \
795-
docker: ~/.sage/timings2.json /sage/pkgs/*/.tox/*/.sage/timings2.json \
796-
docker: /sage/pkgs/*/.tox/*/logs 2> /dev/null" \
797-
docker: | (cd {envdir} && tar xf -); \
798-
docker: fi; \
799805
docker: if [ $status != 0 ]; then exit $status; fi; \
800806
docker: done'
801807
# #28728: gap fails its test suite.

0 commit comments

Comments
 (0)