diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 15f0e0d6b1aeb4d7ca397f049d4224c7f7c19a67..164d89b6edc8ac9b451f5c3291136b902d2a8a8d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,6 +17,8 @@ stages: DUNECONTROL: dunecontrol BASE_IMAGE_VERSION: v0.4.0-git DUNE_COPASI_SD_EXECUTABLE: 'ON' + CPACK_GENERATORS: 'DEB' + CPACK_PACKAGE_DIRECTORY: $CI_PROJECT_DIR/packages .docker_variables: &docker_variables DOCKER_BUILDKIT: 1 @@ -81,6 +83,10 @@ stages: - ./.ci/install /duneci/dune.opts - ./.ci/test /duneci/dune.opts <<: *default_tags + artifacts: + paths: + - packages + expire_in: 1h .deploy: &deploy image: ${DOCKER_IMAGE} @@ -92,27 +98,11 @@ stages: - DOCKER_DEPLOY_IMAGE=$CI_REGISTRY/copasi/dune-copasi/dune-copasi:${DOCKER_TAG} # set directory to get packages from the image - mkdir -p $CI_PROJECT_DIR/packages - # build dockerfile from repositroy + # build final production image using packages from artifacts - docker build - --build-arg BASE_IMAGE=${BASE_IMAGE} - --build-arg TOOLCHAIN=${TOOLCHAIN} - --target build-env - --cache-from ${DEPENDENCIES_IMAGE} - -t build-image . - # run image and get its id - - DOCKER_ID=$(eval docker run -t -d --entrypoint bash build-image) - # move runtime files in packages folder into a local artifact folder - - mkdir -p -m o+w $CI_PROJECT_DIR/packages - - PACKAGE=$(docker exec ${DOCKER_ID} sh -c "ls /duneci/packages/dune-copasi-*-Runtime.deb") - - docker cp ${DOCKER_ID}:${PACKAGE} ${CI_PROJECT_DIR}/packages - - docker stop ${DOCKER_ID} - # build final production image - - docker build - --build-arg BASE_IMAGE=${BASE_IMAGE} - --build-arg TOOLCHAIN=${TOOLCHAIN} - --target production-env - --cache-from build-image - -t ${DOCKER_DEPLOY_IMAGE} . + --build-arg PRODUCTION_BASE_IMAGE=${BASE_IMAGE} + --file docker/deploy.dockerfile + --tag ${DOCKER_DEPLOY_IMAGE} . # push images into registry - docker push ${DOCKER_DEPLOY_IMAGE} # set alternative and simpler names @@ -132,10 +122,6 @@ stages: - if: '$CI_COMMIT_TAG' - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' - if: '$CI_COMMIT_BRANCH == "latest"' - artifacts: - paths: - - packages - expire_in: never <<: *dind_docker_tags # debian gcc @@ -158,7 +144,7 @@ deploy:debian_gcc: <<: *debian_gcc <<: *deploy dependencies: - - setup:debian_gcc + - build:debian_gcc # # ubuntu gcc # setup:ubuntu_gcc: @@ -180,7 +166,7 @@ deploy:debian_gcc: # <<: *ubuntu_gcc # <<: *deploy # dependencies: -# - setup:ubuntu_gcc +# - build:ubuntu_gcc # debian clang setup:debian_clang: @@ -202,7 +188,7 @@ deploy:debian_clang: <<: *debian_clang <<: *deploy dependencies: - - setup:debian_clang + - build:debian_clang # # ubuntu clang # setup:ubuntu_clang: @@ -219,4 +205,4 @@ deploy:debian_clang: # <<: *ubuntu_clang # <<: *deploy # dependencies: -# - setup:ubuntu_clang +# - build:ubuntu_clang diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 34b5d6dc4af12a1198cad099f6dee1196868c877..0000000000000000000000000000000000000000 --- a/Dockerfile +++ /dev/null @@ -1,72 +0,0 @@ -ARG BASE_IMAGE=debian:10 - -ARG SETUP_BASE_IMAGE=registry.dune-project.org/docker/ci/${BASE_IMAGE} -ARG BUILD_BASE_IMAGE=setup-env -ARG PRODUCTION_BASE_IMAGE=${BASE_IMAGE} - -# setup of dune dependencies -FROM ${SETUP_BASE_IMAGE} AS setup-env - -ARG TOOLCHAIN=clang-6-17 - -ENV PATH=/duneci/install/bin:$PATH -ENV TERM=xterm-256color -ENV CMAKE_INSTALL_PREFIX=/duneci/install -ENV SETUP_DUNE_TESTTOOLS=ON -ENV DUNE_VENDOR_FMT=ON - -COPY --chown=duneci ./dune-copasi.opts /duneci/cmake-flags/ -COPY --chown=duneci ./.ci /duneci/modules/dune-copasi/.ci - -RUN ln -s /duneci/toolchains/${TOOLCHAIN} /duneci/toolchain \ - && export PATH=/duneci/install/bin:$PATH -WORKDIR /duneci/modules -RUN mkdir -p /duneci/modules/dune-copasi/.ci -RUN ./dune-copasi/.ci/setup_dune /duneci/dune.opts - -# build and install dune-copasi from the setup-env -FROM ${BUILD_BASE_IMAGE} AS build-env - -ENV DUNE_COPASI_SD_EXECUTABLE='ON' -ENV CPACK_GENERATORS=DEB -ENV CPACK_PACKAGE_DIRECTORY=/duneci/packages - -WORKDIR /duneci/modules - -# move source files into the image -COPY --chown=duneci ./ /duneci/modules/dune-copasi - -# run installer -RUN ./dune-copasi/.ci/install /duneci/dune.opts - -# tests installer -RUN ./dune-copasi/.ci/test /duneci/dune.opts - -# move results to a -lighter- production image -FROM ${PRODUCTION_BASE_IMAGE} AS production-env -LABEL maintainer="santiago.ospina@iwr.uni-heidelberg.de" - -# get package from build-env and install it -COPY --from=build-env /duneci/packages/dune-copasi*Runtime.deb /packages/ -WORKDIR /packages/ -RUN rm -f /etc/apt/apt.conf.d/docker-gzip-indexes \ - && rm -rf /var/lib/apt/lists/* -RUN export DEBIAN_FRONTEND=noninteractive; \ - apt-get update && apt-get dist-upgrade --no-install-recommends --yes \ - && apt-get install --no-install-recommends --yes ./dune-copasi-*-Runtime.deb \ - && apt-get clean && rm -rf /var/lib/apt/lists/* -RUN rm -rf /packages - -# disable sudo user -RUN adduser --disabled-password --home /dunecopasi --uid 50000 dunecopasi -USER dunecopasi -WORKDIR /dunecopasi - -# run help and expect no error signal -RUN dune-copasi-md --help -RUN dune-copasi-sd --help - -# set default mout point to be /dunecopasi (same as workdir!) -VOLUME ["/dunecopasi"] -# run dune-copasi-md by default when running the image -ENTRYPOINT ["dune-copasi-md"] diff --git a/Dockerfile b/Dockerfile new file mode 120000 index 0000000000000000000000000000000000000000..ae4f636572528fe841946fb229fbb57647dc360f --- /dev/null +++ b/Dockerfile @@ -0,0 +1 @@ +docker/dune-copasi.dockerfile \ No newline at end of file diff --git a/docker/deploy.dockerfile b/docker/deploy.dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..82e6589b26da8cf96f075c575f8f9368fa368536 --- /dev/null +++ b/docker/deploy.dockerfile @@ -0,0 +1,30 @@ +ARG PRODUCTION_BASE_IMAGE=${BASE_IMAGE} + +# move results to a -lighter- production image +FROM ${PRODUCTION_BASE_IMAGE} AS production-env +LABEL maintainer="santiago.ospina@iwr.uni-heidelberg.de" + +# get package from host 'packages' directory and install it +COPY ./packages /packages/ +WORKDIR /packages/ +RUN rm -f /etc/apt/apt.conf.d/docker-gzip-indexes \ + && rm -rf /var/lib/apt/lists/* +RUN export DEBIAN_FRONTEND=noninteractive; \ + apt-get update && apt-get dist-upgrade --no-install-recommends --yes \ + && apt-get install --no-install-recommends --yes ./dune-copasi-*-Runtime.deb \ + && apt-get clean && rm -rf /var/lib/apt/lists/* +RUN rm -rf /packages + +# disable sudo user +RUN adduser --disabled-password --home /dunecopasi --uid 50000 dunecopasi +USER dunecopasi +WORKDIR /dunecopasi + +# run help and expect no error signal +RUN dune-copasi-md --help +RUN dune-copasi-sd --help + +# set default mout point to be /dunecopasi (same as workdir!) +VOLUME ["/dunecopasi"] +# run dune-copasi-md by default when running the image +ENTRYPOINT ["dune-copasi-md"] diff --git a/docker/dune-copasi.dockerfile b/docker/dune-copasi.dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..34b5d6dc4af12a1198cad099f6dee1196868c877 --- /dev/null +++ b/docker/dune-copasi.dockerfile @@ -0,0 +1,72 @@ +ARG BASE_IMAGE=debian:10 + +ARG SETUP_BASE_IMAGE=registry.dune-project.org/docker/ci/${BASE_IMAGE} +ARG BUILD_BASE_IMAGE=setup-env +ARG PRODUCTION_BASE_IMAGE=${BASE_IMAGE} + +# setup of dune dependencies +FROM ${SETUP_BASE_IMAGE} AS setup-env + +ARG TOOLCHAIN=clang-6-17 + +ENV PATH=/duneci/install/bin:$PATH +ENV TERM=xterm-256color +ENV CMAKE_INSTALL_PREFIX=/duneci/install +ENV SETUP_DUNE_TESTTOOLS=ON +ENV DUNE_VENDOR_FMT=ON + +COPY --chown=duneci ./dune-copasi.opts /duneci/cmake-flags/ +COPY --chown=duneci ./.ci /duneci/modules/dune-copasi/.ci + +RUN ln -s /duneci/toolchains/${TOOLCHAIN} /duneci/toolchain \ + && export PATH=/duneci/install/bin:$PATH +WORKDIR /duneci/modules +RUN mkdir -p /duneci/modules/dune-copasi/.ci +RUN ./dune-copasi/.ci/setup_dune /duneci/dune.opts + +# build and install dune-copasi from the setup-env +FROM ${BUILD_BASE_IMAGE} AS build-env + +ENV DUNE_COPASI_SD_EXECUTABLE='ON' +ENV CPACK_GENERATORS=DEB +ENV CPACK_PACKAGE_DIRECTORY=/duneci/packages + +WORKDIR /duneci/modules + +# move source files into the image +COPY --chown=duneci ./ /duneci/modules/dune-copasi + +# run installer +RUN ./dune-copasi/.ci/install /duneci/dune.opts + +# tests installer +RUN ./dune-copasi/.ci/test /duneci/dune.opts + +# move results to a -lighter- production image +FROM ${PRODUCTION_BASE_IMAGE} AS production-env +LABEL maintainer="santiago.ospina@iwr.uni-heidelberg.de" + +# get package from build-env and install it +COPY --from=build-env /duneci/packages/dune-copasi*Runtime.deb /packages/ +WORKDIR /packages/ +RUN rm -f /etc/apt/apt.conf.d/docker-gzip-indexes \ + && rm -rf /var/lib/apt/lists/* +RUN export DEBIAN_FRONTEND=noninteractive; \ + apt-get update && apt-get dist-upgrade --no-install-recommends --yes \ + && apt-get install --no-install-recommends --yes ./dune-copasi-*-Runtime.deb \ + && apt-get clean && rm -rf /var/lib/apt/lists/* +RUN rm -rf /packages + +# disable sudo user +RUN adduser --disabled-password --home /dunecopasi --uid 50000 dunecopasi +USER dunecopasi +WORKDIR /dunecopasi + +# run help and expect no error signal +RUN dune-copasi-md --help +RUN dune-copasi-sd --help + +# set default mout point to be /dunecopasi (same as workdir!) +VOLUME ["/dunecopasi"] +# run dune-copasi-md by default when running the image +ENTRYPOINT ["dune-copasi-md"]