variables: GIT_STRATEGY: fetch GIT_SUBMODULE_STRATEGY: recursive PREFIX: /usr/ RSYNC_OPTS: --recursive --ignore-missing-args --chown ${DEPLOY_USER}:${DEPLOY_USER} CRITERION_OPTS: --ignore-warnings DOCKER_TAG: $CI_COMMIT_TAG DOCKER_TAG_DEV: ${CI_COMMIT_REF_NAME} DOCKER_IMAGE: villas/node DOCKER_IMAGE_DEV: villas/node-dev stages: - prepare - build - build2 - test - deploy - docker # For some reason, GitLab CI prunes the contents of the submodules so we need to restore them. before_script: - git submodule foreach git checkout . # Stage: prepare ############################################################################## # Build docker image which is used to build & test VILLASnode docker-dev: stage: prepare script: - docker build -f packaging/docker/Dockerfile.dev -t ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} . tags: - shell - linux # Stage: build ############################################################################## build:source: stage: build script: - mkdir -p build && cd build - cmake .. - make artifacts: expire_in: 1 week name: ${CI_PROJECT_NAME}-${CI_BUILD_REF} paths: - build/ image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker build:docs: stage: build artifacts: name: ${CI_PROJECT_NAME}-doc-${CI_BUILD_REF} paths: - build/doc/ script: - mkdir -p build && cd build - cmake .. - make doc image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker only: - tags - master build2:packages: stage: build2 dependencies: - build:docs script: - mkdir -p build && cd build - cmake .. - make package artifacts: expire_in: 1 week name: ${CI_PROJECT_NAME}-packages-${CI_BUILD_REF} paths: - build/*.tar.gz - build/*.rpm image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker only: - tags - master # Stage: test ############################################################################## test:unit: stage: test dependencies: - build:source script: - mkdir -p build && cd build - cmake .. - make run-unit-tests image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker test:integration: stage: test dependencies: - build:source script: - mkdir -p build && cd build - cmake .. - make run-integration-tests artifacts: name: ${CI_PROJECT_NAME}-integration-tests-${CI_BUILD_REF} when: always paths: - build/release/tests/integration/ image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker # Stage: deploy ############################################################################## deploy:web: stage: deploy script: - ssh ${DEPLOY_USER}@${DEPLOY_HOST} mkdir -p ${DEPLOY_PATH}/{coverage,doc}/${CI_BUILD_REF_NAME}/ - rsync ${RSYNC_OPTS} build/doc/html/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/doc/$CI_BUILD_REF_NAME/ - rsync ${RSYNC_OPTS} web/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/ dependencies: - build:docs only: - tags tags: - villas-deploy deploy:packages: stage: deploy script: - ssh ${DEPLOY_USER}@${DEPLOY_HOST} mkdir -p ${DEPLOY_PATH}/{dist,../packages} - rsync ${RSYNC_OPTS} build/*.rpm ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/../packages/x86_64/ - rsync ${RSYNC_OPTS} build/*.tar.gz ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/dist/ - ssh ${DEPLOY_USER}@${DEPLOY_HOST} createrepo ${DEPLOY_PATH}/../packages dependencies: - build2:packages tags: - villas-deploy only: - tags # Stage: docker ############################################################################## docker: stage: docker script: - docker build -f packaging/docker/Dockerfile.app -t ${DOCKER_IMAGE}:${DOCKER_TAG} . - docker push ${DOCKER_IMAGE}:${DOCKER_TAG} - docker push ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - shell - linux