variables: RSYNC_OPTS: --recursive --ignore-missing-args --chown ${DEPLOY_USER}:${DEPLOY_USER} DOCKER_TAG: ${CI_COMMIT_REF_NAME} DOCKER_IMAGE: rwthacs/dpsim DOCKER_IMAGE_DEV: rwthacs/dpsim-dev before_script: - git config --local core.longpaths true - git submodule sync --recursive - git submodule update --init --recursive stages: - prepare - build - test - generate - deploy docker:fedora: stage: prepare needs: [] script: - docker build --file Packaging/Docker/Dockerfile.dev --tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} --tag ${DOCKER_IMAGE_DEV}:latest . tags: - shell - linux docker:centos: stage: prepare needs: [] script: - docker build --file Packaging/Docker/Dockerfile.dev-centos --tag ${DOCKER_IMAGE_DEV}-centos:${DOCKER_TAG} --tag ${DOCKER_IMAGE_DEV}-centos:latest . tags: - shell - linux #docker:jupyter: # stage: prepare # needs: [] # script: # - docker build # --file Packaging/Docker/Dockerfile.jupyter # --build-arg DOCKER_IMAGE=${DOCKER_IMAGE_DEV} # --build-arg DOCKER_TAG=${DOCKER_TAG} # --tag ${DOCKER_IMAGE_DEV}-jupyter:${DOCKER_TAG} # --tag ${DOCKER_IMAGE_DEV}-jupyter:latest . # tags: # - shell # - linux build:linux: stage: build needs: ["docker:fedora"] script: - mkdir -p build - cd build - cmake -DWITH_CUDA=OFF .. - make -j 32 image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} cache: paths: - build key: build-linux artifacts: paths: - build tags: - docker build:linux-cuda: stage: build needs: ["docker:centos"] script: - mkdir -p build - cd build - cmake -DWITH_SPDLOG_SUBMODULE=ON .. - make -j 32 image: ${DOCKER_IMAGE_DEV}-centos:${DOCKER_TAG} cache: paths: - build key: build-linux-cuda artifacts: paths: - build tags: - docker build:windows: stage: build needs: [] script: - New-Item -ItemType Directory -Force -Path build - Set-Location -Path build # 64 Bit Graphviz Builds for Windows: # https://ci.appveyor.com/project/ellson/graphviz-pl238/ - cmake .. -DGraphviz_ROOT="C:/Program Files/Graphviz 2.41.20190716.1839" - cmake --build . -j 24 tags: - win10 cache: paths: - build key: build-win10 #build:macos: # stage: build # script: # - mkdir -p build # - cd build # - cmake -DCMAKE_C_COMPILER=/usr/local/bin/gcc-9 # -DCMAKE_CXX_COMPILER=/usr/local/bin/g++-9 # -DWITH_CIM_SUBMODULE=ON # -DWITH_SUNDIALS=OFF .. # - make -j $(sysctl -n hw.ncpu) # cache: # paths: # - build # key: build-macos # artifacts: # paths: # - build # tags: # - mac #test:pytest: # stage: test # variables: # PYTHONPATH: "build/Source/Python:Source/Python" # script: # - pytest -v Examples/CIM/test_CIM.yml # - pytest -v Examples/Cxx/test_Circuits.yml # - pytest -v Examples/Cxx/test_RealTime.yml # #- pytest -v Examples/Cxx/test_Shmem.yml # - pytest -v Examples/Python/Base # - pytest -v Examples/Python/Circuits # - pytest -v Examples/Python/RealTime # #- pytest -v Examples/Python/Shmem # image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} # dependencies: # - build:linux # tags: # - docker generate:docs: stage: generate needs: ["build:linux"] script: - make -j$(nproc) -C build docs - make -j$(nproc) -C build docs_cxx image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} dependencies: - build:linux artifacts: paths: - build/docs/sphinx/html - build/docs/doxygen/html tags: - docker generate:packages: stage: generate needs: ["build:linux"] script: - make -j$(nproc) -C build package only: - tags tags: - docker image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} dependencies: - build:linux artifacts: paths: - build/*.rpm - build/*.tar.gz build:docker: stage: build needs: [] script: - docker build --file Packaging/Docker/Dockerfile --build-arg DOCKER_TAG=${DOCKER_TAG} --build-arg CI=1 --build-arg CI_COMMIT_SHA=${CI_COMMIT_SHA} --build-arg CI_COMMIT_REF_NAME=${CI_COMMIT_REF_NAME} --build-arg CI_COMMIT_TAG=${CI_COMMIT_TAG} --tag ${DOCKER_IMAGE}:${DOCKER_TAG} --tag ${DOCKER_IMAGE}:latest . tags: - shell - linux only: - tags test:jupyter: stage: test needs: ["build:linux"] variables: PYTHONPATH: "build/Source/Python:Source/Python" script: - pytest -v Examples/Notebooks image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} dependencies: - build:linux tags: - docker artifacts: paths: - outputs/Examples/Notebooks/ .remote-gpu: stage: test needs: ["build:linux-cuda"] variables: GPU_TARGET: 'gitlab-runner@ghost' RDIR: '/tmp/gitlab-jobs/$CI_PROJECT_NAME/$CI_JOB_ID' CI_DIR: '$CI_BUILDS_DIR/$CI_PROJECT_PATH' LDIR: '/cricket/bin' TEST_FILES: '' TEST_PARAM: '' REMOTE_LIBS: 'linux-vdso.so.1 librt.so.1 libdl.so.2 libcudart.so.10.2 libcusolver.so.10 libstdc\+\+.so.6 libm.so.6 libgcc_s.so.1 libc.so.6 /lib64/ld-linux-x86-64.so.2 libutil.so.1 libpthread.so.0' script: - mkdir ~/.ssh && echo "-----BEGIN OPENSSH PRIVATE KEY-----" > ~/.ssh/id_rsa && echo $SSH_PRIVATE | sed "s/\S\{64\}/&\n/g" >> ~/.ssh/id_rsa && echo "-----END OPENSSH PRIVATE KEY-----" >> ~/.ssh/id_rsa && echo $SSH_PUBLIC > ~/.ssh/id_rsa.pub && echo $KNOWN_HOSTS > ~/.ssh/known_hosts && chmod 600 ~/.ssh/id_rsa - echo "$TEST_BINARY_PATH/$TEST_BINARY $TEST_FILES" | tr -d '\n' | xargs -r -d " " -I % cp % $LDIR - ldd $LDIR/$TEST_BINARY | sed -n -E -e 's/^\s+\S+ => (\S+) \S+$/\1/p' | grep -Ev "$(echo $REMOTE_LIBS | tr ' ' '|')|not" | xargs -I % cp % $LDIR/ - ssh $GPU_TARGET mkdir -p $RDIR - scp -r $LDIR/* $GPU_TARGET:$RDIR/ - ssh $GPU_TARGET "LD_LIBRARY_PATH=$RDIR:${LD_LIBRARY_PATH} LD_PRELOAD=$RDIR/cricket-server.so $RDIR/$TEST_BINARY" & - sleep 2 - PATH=$LDIR:${PATH} LD_PRELOAD=$LDIR/cricket-client.so $TEST_BINARY_PATH/$TEST_BINARY $TEST_PARAM after_script: - ssh $GPU_TARGET rm -rf $RDIR - ssh $GPU_TARGET pkill -fe -2 $RDIR/test_kernel image: ${DOCKER_IMAGE_DEV}-centos:${DOCKER_TAG} dependencies: - build:linux-cuda tags: - docker test:cuda: extends: .remote-gpu allow_failure: true variables: # Name of the test binary TEST_BINARY: 'WSCC_9bus_mult_decoupled' # Path where the test binary is located TEST_BINARY_PATH: 'build/Examples/Cxx' # Additional files that are necessary to run the application on the GPU node TEST_FILE: '' # Command line parameters for the test binary TEST_PARAM: '' # Stage deploy ############################################################################## pages: stage: deploy needs: ["generate:docs"] script: - cp -r build/docs/sphinx/html/. public/sphinx - cp -r build/docs/doxygen/html/. public/doxygen artifacts: paths: - public dependencies: - generate:docs only: - deploy tags: - shell - linux deploy:docker: stage: deploy script: - docker push ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} - docker push ${DOCKER_IMAGE_DEV}:latest - docker push ${DOCKER_IMAGE}:${DOCKER_TAG} - docker push ${DOCKER_IMAGE}:latest dependencies: - build:docker tags: - shell - linux only: - tags deploy:packages: stage: deploy script: - rsync ${RSYNC_OPTS} build/*.rpm ${DEPLOY_USER}@${DEPLOY_HOST}:/var/www/packages/fedora/29/x86_64 - rsync ${RSYNC_OPTS} build/*.tar.gz ${DEPLOY_USER}@${DEPLOY_HOST}:/var/www/dpsim/src - ssh ${DEPLOY_USER}@${DEPLOY_HOST} createrepo /var/www/packages/fedora/29 dependencies: - generate:packages only: - tags tags: - fein-deploy - shell - linux