diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ea458f5bfe75c2780302ebea4337ed72bf222e2b..2bea5123022c047325bdb11d6e81d6c1422e7708 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,5 @@ # List of the CI build stages. stages: - - step-pre - step-A - step-B - step-C @@ -47,7 +46,7 @@ workflow: # general Ubuntu job template .ubuntu-template-job-base: &ubuntu-job-base - image: ubuntu:22.04 + image: gitlab-registry.cern.ch/geomodeldev/ubuntu-geant4-image:main-base rules: - when: always @@ -58,85 +57,9 @@ workflow: # of the build, by using the 'standalone' job only .ubuntu-template-job-default: &ubuntu-job <<: *ubuntu-job-base - before_script: - - apt-get update -qq && apt-get install -y -qq apt-utils git wget unzip build-essential freeglut3-dev libboost-all-dev qtbase5-dev libqt5opengl5-dev mercurial libeigen3-dev libsqlite3-dev nlohmann-json3-dev libexpat1-dev libxerces-c-dev libhdf5-dev libhepmc3-dev cmake - - -# .ubuntu-template-job-registry: &ubuntu-job-registry -# image: gitlab-registry.cern.ch/mbandier/geant4-ubuntu/base-image:1.1 -# before_script: -# - apt-get update -qq && apt-get install -y -qq libeigen3-dev libsqlite3-dev # TEMPLATES FOR BUILDING PACKAGES - -.coin-build-template: &coin-job - variables: - CMAKE_ARGS: ${CMAKE_DEPS_BASE_ARGS} - script: - - pwd; ls - - wget https://atlas-vp1.web.cern.ch/atlas-vp1/sources/coin-4.0.0-src.zip - - unzip coin-4.0.0-src.zip -d coin-sources - - mv coin-sources/* coin - - mkdir build_coin - - cd build_coin - - cmake ${CMAKE_ARGS} ../coin - - make -j2 - - make install - artifacts: - paths: - - install - expire_in: 1 day - -.soqt-build-template: &soqt-job - variables: - CMAKE_ARGS: ${CMAKE_DEPS_BASE_ARGS} - script: - - pwd; ls - - wget https://atlas-vp1.web.cern.ch/atlas-vp1/sources/soqt.zip - - unzip soqt.zip - - mkdir build_soqt - - cd build_soqt - - echo "CMAKE_ARGS - ${CMAKE_ARGS}" - - cmake ${CMAKE_ARGS} ../soqt - - make -j2 - - make install - - pwd; ls # CI debug only - - ls ../ # CI debug only - - ls ../../ # CI debug only - artifacts: - paths: - - install - expire_in: 1 day - - - - -.geant4-build-template-job: &geant4-job - variables: - CMAKE_ARGS: ${CMAKE_BASE_ARGS} - script: - - pwd; ls - - git clone https://gitlab.cern.ch/geant4/geant4.git - - cd geant4 - - git checkout tags/v11.0.2 - - cd ../ - - mkdir Geant4-build - - cd Geant4-build - - ls; - - ls ../ - - if [ -d "../install" ]; then ls ../install; fi - - cmake ${CMAKE_ARGS} -DGEANT4_INSTALL_DATA=ON -DGEANT4_USE_GDML=ON -DGEANT4_BUILD_MULTITHREADED=ON ../geant4 - - make -j4 - - make install - artifacts: - paths: - - install - expire_in: 1 day - - - - .geomodel-build-template: &geomodel-job variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} @@ -286,17 +209,6 @@ debug-job: ### These jobs build the various GeoModel sub-packages with the use of the CMake ### build options. -ubu-coin: - <<: *ubuntu-job - <<: *coin-job - stage: step-A - -ubu-soqt: - <<: *ubuntu-job - <<: *soqt-job - stage: step-B - needs: ["ubu-coin"] - ubu-gm-base: <<: *ubuntu-job <<: *geomodel-job @@ -316,7 +228,6 @@ ubu-gm-tools: ubu-gm-visualization: <<: *ubuntu-job <<: *geomodel-job - needs: ["ubu-coin", "ubu-soqt"] stage: step-C variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} @@ -331,18 +242,10 @@ ubu-gm-examples: CMAKE_CONFIG_FLAGS: -DGEOMODEL_BUILD_EXAMPLES=TRUE - -ubu-geant4: - <<: *ubuntu-job - <<: *geant4-job - stage: step-A - - ubu-gm-examples-gmg4: <<: *ubuntu-job <<: *geomodel-job stage: step-B - needs: ["ubu-geant4"] variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} CMAKE_CONFIG_FLAGS: -DGEOMODEL_BUILD_EXAMPLES_W_GEANT4=TRUE @@ -351,7 +254,6 @@ ubu-gm-gmg4: <<: *ubuntu-job <<: *geomodel-job stage: step-B - needs: ["ubu-geant4"] variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} CMAKE_CONFIG_FLAGS: -DGEOMODEL_BUILD_GEOMODELG4=TRUE @@ -361,7 +263,6 @@ ubu-gm-fullsimlight: <<: *ubuntu-job <<: *geomodel-job stage: step-B - needs: ["ubu-geant4"] variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} CMAKE_CONFIG_FLAGS: -DGEOMODEL_BUILD_FULLSIMLIGHT=TRUE @@ -371,7 +272,6 @@ ubu-gm-fsl: <<: *ubuntu-job <<: *geomodel-job stage: step-B - needs: ["ubu-geant4"] variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} CMAKE_CONFIG_FLAGS: -DGEOMODEL_BUILD_FSL=TRUE @@ -381,7 +281,6 @@ ubu-gm-all: <<: *ubuntu-job <<: *geomodel-job stage: step-C - needs: ["ubu-coin", "ubu-soqt", "ubu-geant4"] variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} CMAKE_CONFIG_FLAGS: -DGEOMODEL_BUILD_ALL=TRUE @@ -395,7 +294,6 @@ ubu-gm-atlasextras: <<: *ubuntu-job <<: *geomodel-job stage: step-B - needs: ["ubu-geant4"] variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} CMAKE_CONFIG_FLAGS: -DGEOMODEL_BUILD_ATLASEXTENSIONS=TRUE @@ -405,7 +303,6 @@ ubu-gm-atlasextras: # <<: *ubuntu-job # <<: *geomodel-job # stage: step-C -# needs: ["ubu-geant4"] # variables: # XERCESC_VERSION: 3.2.3 # CMAKE_ARGS: ${CMAKE_BASE_ARGS} @@ -462,7 +359,7 @@ ubu-single-gmtools: ubu-single-gmviz: <<: *ubuntu-job stage: step-C - needs: ["ubu-single-gmbase", "ubu-soqt"] + needs: ["ubu-single-gmbase"] variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} script: @@ -479,7 +376,7 @@ ubu-single-gmviz: ubu-single-gmg4: <<: *ubuntu-job stage: step-C - needs: ["ubu-single-gmbase", "ubu-geant4"] + needs: ["ubu-single-gmbase"] variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} script: @@ -496,7 +393,7 @@ ubu-single-gmg4: ubu-single-gmfullsimlight: <<: *ubuntu-job stage: step-D - needs: ["ubu-single-gmg4", "ubu-geant4"] + needs: ["ubu-single-gmg4"] variables: CMAKE_ARGS: ${CMAKE_BASE_ARGS} script: @@ -589,52 +486,19 @@ docs-deploy: ## - https://gitlab.cern.ch/gitlabci-examples/build_docker_image/-/blob/master/.gitlab-ci.yml#L11-27 ## --- -# Build the 'base' image containing the system packages +# Build the 'full' docker image containing the system packages ## Note: ## - we build the docker image only from 'main' and tags -## - image's final name is, e.g., "geomodel:main-base" +## - image's final name is, e.g., "gitlab-registry.cern.ch/geomodeldev/geomodel:ci-with-docker-g4-ubuntu-full" build_docker_system: stage: step-A only: refs: - main - tags - variables: - # To push to a specific docker tag other than latest(the default), amend the --destination parameter, e.g. --destination $CI_REGISTRY_IMAGE:$CI_BUILD_REF_NAME - # See https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#variables-reference for available variables - IMAGE_DESTINATION: ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}-base - # === Git-related variables - # all submodules will be cloned recursively upon start of CI job - GIT_SUBMODULE_STRATEGY: recursive - GIT_SSL_NO_VERIFY: "true" - image: - # The kaniko debug image is recommended because it has a shell, and a shell is required for an image to be used with GitLab CI/CD. - name: gcr.io/kaniko-project/executor:debug - entrypoint: [""] - script: - # Prepare Kaniko configuration file - - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - # Build and push the image from the Dockerfile at the root of the project. - - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/CI/DockerfileBase --destination $IMAGE_DESTINATION - # Print the full registry path of the pushed image - - echo "Image pushed successfully to ${IMAGE_DESTINATION}" -## Build a Docker image containing Geant4, too -## (a quite large image, then!) -## Note: -## - we build the docker image only from 'main' and tags -## - image's final name is, e.g., "geomodel:main-full" -## -build_docker_full: - stage: step-B - allow_failure: true - needs: - - build_docker_system - timeout: 2h 0m - only: - refs: - - main - - tags +# rules: +# - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' variables: # To push to a specific docker tag other than latest(the default), amend the --destination parameter, e.g. --destination $CI_REGISTRY_IMAGE:$CI_BUILD_REF_NAME # See https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#variables-reference for available variables @@ -651,58 +515,10 @@ build_docker_full: # Prepare Kaniko configuration file - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json # Build and push the image from the Dockerfile at the root of the project. - - /kaniko/executor - --context $CI_PROJECT_DIR - --dockerfile $CI_PROJECT_DIR/CI/DockerfileFull - --destination $IMAGE_DESTINATION - --build-arg "BASEIMAGE=$CI_REGISTRY_IMAGE:${CI_COMMIT_REF_NAME}-base" + - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/CI/DockerfileFull --destination $IMAGE_DESTINATION # Print the full registry path of the pushed image - echo "Image pushed successfully to ${IMAGE_DESTINATION}" -## Build a Docker image for visualization pupose. -## This image does not contain -## FullSimLight or other Geant4-related packages. -## Note: -## - we build the docker image only from 'main' and tags -## - image's final name is, e.g., "geomodel:main-light" -## -build_docker_light: - stage: step-B - allow_failure: true - needs: - - build_docker_system - timeout: 2h 0m - only: - refs: - - main - - tags - variables: - # To push to a specific docker tag other than latest(the default), amend the --destination parameter, e.g. --destination $CI_REGISTRY_IMAGE:$CI_BUILD_REF_NAME - # See https://docs.gitlab.com/ee/ci/variables/predefined_variables.html#variables-reference for available variables - IMAGE_DESTINATION: ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}-light - # === Git-related variables - # all submodules will be cloned recursively upon start of CI job - GIT_SUBMODULE_STRATEGY: recursive - GIT_SSL_NO_VERIFY: "true" - image: - # The kaniko debug image is recommended because it has a shell, and a shell is required for an image to be used with GitLab CI/CD. - name: gcr.io/kaniko-project/executor:debug - entrypoint: [""] - script: - # Prepare Kaniko configuration file - - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - # Build and push the image from the Dockerfile at the root of the project. - - /kaniko/executor - --context $CI_PROJECT_DIR - --dockerfile $CI_PROJECT_DIR/CI/DockerfileLight - --destination $IMAGE_DESTINATION - --build-arg "BASEIMAGE=$CI_REGISTRY_IMAGE:${CI_COMMIT_REF_NAME}-base" - # Print the full registry path of the pushed image - - echo "Image pushed successfully to ${IMAGE_DESTINATION}" - - - - ########## ## TAGS ## diff --git a/CI/DockerfileBase b/CI/DockerfileBase deleted file mode 100755 index d1fec2d7957ce63d116ea5fd014ebc6d7bc5906c..0000000000000000000000000000000000000000 --- a/CI/DockerfileBase +++ /dev/null @@ -1,67 +0,0 @@ -## Docker file to compile the very basic -## packages needed for GeoModel in order to avoid -## their duplication in the creation step of the -## Light and Full version -FROM ubuntu:23.04 - -USER root -WORKDIR /root - -ARG XercesC_VERSION=3.2.3 - -ENV DEBIAN_FRONTEND noninteractive - -### Install tzdata package -### During ordinary installation, the package -### wants to be configured. The additional commands -### circumvene the configuration on docker -RUN apt-get update && apt-get install -y tzdata && ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime && dpkg-reconfigure --frontend noninteractive tzdata - -### Install C++, cmake and python -RUN apt-get update && apt-get install -y cmake g++ python-is-python3 git sudo nano wget - -### Boost installation -RUN apt-get update && apt-get install -y libboost-all-dev - -### Now we come to QT5 as a prerequiste of GeoModel -RUN apt-get update && apt-get install -y qtbase5-dev libqt5opengl5-dev - -### Next install sqlite for the GeoModel outputs -RUN apt-get update && apt-get install -y sqlite3 libsqlite3-dev - -### Install eigen to avoid the own installation -RUN apt-get update && apt-get install -y libeigen3-dev - -### Install hdf5 to avoid the own installation -RUN apt-get update && apt-get install -y libhdf5-dev - -### Install hepmc3 to avoid the own installation -RUN apt-get update && apt-get install -y libhepmc3-dev - -### Another layer of building xer -RUN wget https://cern.ch/lcgpackages/tarFiles/sources/xerces-c-${XercesC_VERSION}.tar.gz && \ - tar -xzf xerces-c-${XercesC_VERSION}.tar.gz && \ - mkdir build && \ - cd build && \ - cmake ../xerces-c-${XercesC_VERSION} && \ - make -j2 && \ - make install && \ - cd .. && \ - rm -rf xerces-c-${XercesC_VERSION} build - - -### Last but very important, the installation of the OpenGL module -RUN apt-get update && apt-get install -y mesa-utils build-essential libgl1-mesa-dev - -# Set up the ATLAS user, and give it super user rights. -RUN addgroup wheel && \ - echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers && \ - adduser atlas && chmod 755 /home/atlas && \ - usermod -aG wheel atlas && \ - usermod -aG root atlas && \ - mkdir /workdir && chown "atlas:atlas" /workdir && \ - chmod 755 /workdir - -USER atlas -WORKDIR /workdir - diff --git a/CI/DockerfileFull b/CI/DockerfileFull index 1ce4c350ce77d8f811c8e5404bda8d454ed0081d..facfc06992ef799a7c1020e64fa60e362d962956 100755 --- a/CI/DockerfileFull +++ b/CI/DockerfileFull @@ -1,24 +1,7 @@ # Setup the most basic image -ARG BASEIMAGE=gitlab-registry.cern.ch/geomodeldev/geomodel:main-base +ARG BASEIMAGE=gitlab-registry.cern.ch/geomodeldev/ubuntu-geant4-image:main-base FROM ${BASEIMAGE} - -### First install Geant4 as we want to have the full functionallity -RUN git clone https://gitlab.cern.ch/geant4/geant4.git --branch 'v10.6.0' && \ - mkdir build_geant4 && \ - cd build_geant4 && \ - cmake -DCMAKE_INSTALL_PREFIX=/usr/local/geant4 -DCMAKE_BUILD_TYPE=Release -DGEANT4_INSTALL_DATA=ON -DGEANT4_USE_GDML=ON -DGEANT4_BUILD_MULTITHREADED=ON ../geant4/ &&\ - make -j3 > /dev/null && \ - sudo make install > /dev/null && \ - cd .. && \ - rm -rf build_geant4 geant4 && \ - echo "#!/bin/bash" > ~/setup_docker.sh && \ - echo "cd /usr/local/geant4/bin" >> ~/setup_docker.sh && \ - echo "source geant4.sh" >> ~/setup_docker.sh && \ - echo "cd -" >> ~/setup_docker.sh && \ - sudo mv ~/setup_docker.sh /usr/local/geant4/setup_docker.sh && \ - echo "source /usr/local/geant4/setup_docker.sh" >> ~/.bashrc - ### Compile then geo model COPY . /workdir/GeoModel_src/ RUN mkdir -p /workdir/build_geomodel/ && \ diff --git a/CI/DockerfileLight b/CI/DockerfileLight deleted file mode 100644 index 3434338f00317159b24f29be493022b1eeb2f25e..0000000000000000000000000000000000000000 --- a/CI/DockerfileLight +++ /dev/null @@ -1,18 +0,0 @@ -# Setup the most basic image -ARG BASEIMAGE=gitlab-registry.cern.ch/geomodeldev/geomodel:main-base -FROM ${BASEIMAGE} - -COPY . /workdir/GeoModel_src/ -RUN mkdir -p /workdir/build_geomodel/ && \ - cd /workdir/build_geomodel/ && \ - cmake -DCMAKE_INSTALL_PREFIX=/usr/local/GeoModel -DGEOMODEL_BUILD_VISUALIZATION=1 -DGEOMODEL_USE_BUILTIN_JSON=1 -DGEOMODEL_BUILD_TOOLS=1 -DGEOMODEL_USE_BUILTIN_XERCESC=1 -DGEOMODEL_USE_BUILTIN_COIN3D=1 ../GeoModel_src/ && \ - make -j2 && \ - sudo make install && \ - cd .. && \ - sudo rm -rf build_geomodel GeoModel_src && \ - echo "#!/bin/bash" > ~/setup_docker.sh && \ - echo "export PATH=\"/usr/local/GeoModel/bin:\${PATH}\"" >> ~/setup_docker.sh && \ - echo "export LD_LIBRARY_PATH=\"/usr/local/GeoModel/lib:\${LD_LIBRARY_PATH}\"" >> ~/setup_docker.sh && \ - sudo mv ~/setup_docker.sh /usr/local/GeoModel/setup_docker.sh && \ - echo "source /usr/local/GeoModel/setup_docker.sh" >> ~/.bashrc -