diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7e5bfe253..fad38e70d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,8 +2,8 @@ variables: GIT_STRATEGY: fetch GIT_SUBMODULE_STRATEGY: recursive PREFIX: /usr/ - RSYNC_OPTS: --recursive --ignore-missing-args --chown $DEPLOY_USER:$DEPLOY_USER - DOCKER_TAG: ${CI_COMMIT_REF_SLUG} + RSYNC_OPTS: --recursive --ignore-missing-args --chown ${DEPLOY_USER}:${DEPLOY_USER} + DOCKER_TAG_DEV: ${CI_COMMIT_REF_SLUG} DOCKER_IMAGE_DEV: villas/node-dev stages: @@ -38,41 +38,47 @@ build:source: - make artifacts: expire_in: 1 week - name: "${CI_PROJECT_NAME}-${CI_BUILD_REF}" + name: ${CI_PROJECT_NAME}-${CI_BUILD_REF} paths: - build/release/ - image: $DOCKER_IMAGE_DEV:$DOCKER_TAG + image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker build:docs: stage: build artifacts: - name: "${CI_PROJECT_NAME}-doc-${CI_BUILD_REF}" + name: ${CI_PROJECT_NAME}-doc-${CI_BUILD_REF} paths: - build/release/doc/ script: - make doc - image: $DOCKER_IMAGE_DEV:$DOCKER_TAG + image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker + only: + - tags + - master build:packages: stage: build before_script: - - dnf -y config-manager --add-repo https://$DEPLOY_USER:$DEPLOY_PASS@$DEPLOY_HOST/packages/villas.repo + - dnf -y config-manager --add-repo https://${DEPLOY_USER}:${DEPLOY_PASS}@${DEPLOY_HOST}/packages/villas.repo - dnf -y --refresh install openssl-devel libconfig-devel libnl3-devel libcurl-devel jansson-devel libxil-devel libwebsockets-devel zeromq-devel nanomsg-devel script: - make rpm-villas-node artifacts: expire_in: 1 week - name: "${CI_PROJECT_NAME}-packages-${CI_BUILD_REF}" + name: ${CI_PROJECT_NAME}-packages-${CI_BUILD_REF} paths: - build/release/packaging/*.tar.gz - build/release/packaging/rpm/RPMS/ - image: $DOCKER_IMAGE_DEV:$DOCKER_TAG + image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker + only: + - tags + - master # Stage: test @@ -85,12 +91,12 @@ test:coverage: script: - make coverage artifacts: - name: "${CI_PROJECT_NAME}-coverage-${CI_BUILD_REF}" + name: ${CI_PROJECT_NAME}-coverage-${CI_BUILD_REF} paths: - build/release-coverage/coverage/ - build/release-coverage/coverage.txt - build/release-coverage/coverage.xml - image: $DOCKER_IMAGE_DEV:$DOCKER_TAG + image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} coverage: '/lines: (\d+\.\d+\%)/' tags: - docker @@ -101,7 +107,7 @@ test:unit: - build:source script: - make run-unit-tests - image: $DOCKER_IMAGE_DEV:$DOCKER_TAG + image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker @@ -112,11 +118,11 @@ test:integration: script: - make run-integration-tests artifacts: - name: "${CI_PROJECT_NAME}-integration-tests-${CI_BUILD_REF}" + name: ${CI_PROJECT_NAME}-integration-tests-${CI_BUILD_REF} when: always paths: - build/release/tests/integration/ - image: $DOCKER_IMAGE_DEV:$DOCKER_TAG + image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker @@ -129,7 +135,7 @@ test:valgrind: dependencies: - build:source allow_failure: true - image: $DOCKER_IMAGE_DEV:$DOCKER_TAG + image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG_DEV} tags: - docker @@ -139,32 +145,32 @@ test:valgrind: deploy:web: stage: deploy script: - - ssh $DEPLOY_USER@$DEPLOY_HOST mkdir -p $DEPLOY_PATH/{coverage,doc}/$CI_BUILD_REF_NAME/ - - rsync $RSYNC_OPTS build/release-coverage/coverage/ $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/coverage/$CI_BUILD_REF_NAME/ - - rsync $RSYNC_OPTS build/release/doc/html/ $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/doc/$CI_BUILD_REF_NAME/ - - rsync $RSYNC_OPTS web/ $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/ + - ssh ${DEPLOY_USER}@${DEPLOY_HOST} mkdir -p ${DEPLOY_PATH}/{coverage,doc}/${CI_BUILD_REF_NAME}/ + - rsync ${RSYNC_OPTS} build/release-coverage/coverage/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/coverage/$CI_BUILD_REF_NAME/ + - rsync ${RSYNC_OPTS} build/release/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 - build:packages - test:coverage only: - - master + - tags tags: - villas-deploy deploy:packages: stage: deploy script: - - ssh $DEPLOY_USER@$DEPLOY_HOST mkdir -p $DEPLOY_PATH/{dist,../packages} - - rsync $RSYNC_OPTS build/release/packaging/rpm/RPMS/ $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/../packages/ - - rsync $RSYNC_OPTS build/release/packaging/*.tar.gz $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/dist/ - - ssh $DEPLOY_USER@$DEPLOY_HOST createrepo $DEPLOY_PATH/../packages + - ssh ${DEPLOY_USER}@${DEPLOY_HOST} mkdir -p ${DEPLOY_PATH}/{dist,../packages} + - rsync ${RSYNC_OPTS} build/release/packaging/rpm/RPMS/ ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/../packages/ + - rsync ${RSYNC_OPTS} build/release/packaging/*.tar.gz ${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/dist/ + - ssh ${DEPLOY_USER}@${DEPLOY_HOST} createrepo ${DEPLOY_PATH}/../packages dependencies: - build:packages tags: - villas-deploy only: - - master + - tags # Stage: docker @@ -172,16 +178,21 @@ deploy:packages: deploy:docker: stage: docker + variables: + DOCKER_IMAGE: villas/node + DOCKER_TAG: $CI_COMMIT_TAG script: - make docker - make deploy-docker + - docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest + - docker push ${DOCKER_IMAGE}:latest dependencies: - build:packages tags: - shell - linux only: - - master + - tags deploy:docker-dev: stage: docker diff --git a/Dockerfile b/Dockerfile index 5c7c39de2..0a16b36f0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -48,6 +48,9 @@ RUN dnf -y install \ kernel-modules-extra \ module-init-tools +# Ugly: we need to invalidate the cache +ADD https://villas.fein-aachen.org/packages/repodata/repomd.xml /tmp + # Install the application RUN dnf -y --refresh install \ villas-node \ @@ -57,4 +60,4 @@ RUN dnf -y --refresh install \ EXPOSE 80 EXPOSE 443 -ENTRYPOINT ["villas"] \ No newline at end of file +ENTRYPOINT ["villas"] diff --git a/Makefile b/Makefile index f784002a5..cf2da96e7 100644 --- a/Makefile +++ b/Makefile @@ -112,10 +112,19 @@ ifdef CI VARIANT := $(VARIANT)-ci GIT_REV := $(shell echo $${CI_COMMIT_SHA:0:7}) + GIT_BRANCH := $(CI_COMMIT_REF_NAME) + + ifdef CI_COMMIT_TAG + RELEASE = 1 + else + RELEASE = 1.$(subst -,_,$(CI_COMMIT_REF_NAME))_$(subst -,_,$(VARIANT)).$(shell date +%Y%m%d)git$(GIT_REV) + endif else GIT_REV := $(shell git rev-parse --short=7 HEAD) + GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) + + RELEASE = 1.$(subst -,_,$(GIT_BRANCH))_$(subst -,_,$(VARIANT)).$(shell date +%Y%m%d)git$(GIT_REV) endif -GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) # pkg-config dependencies PKGS = openssl jansson diff --git a/packaging/Makefile.inc b/packaging/Makefile.inc index 2542f3cae..2c87a045f 100644 --- a/packaging/Makefile.inc +++ b/packaging/Makefile.inc @@ -22,19 +22,20 @@ TAROPTS = --exclude-ignore-recursive=.distignore --transform='s|^\.|villas-node-$(VERSION_NUM)|' --show-transformed-names -TAR_VILLAS = $(BUILDDIR)/packaging/villas-node-$(VERSION_NUM)-1.$(subst -,_,$(GIT_BRANCH))_$(subst -,_,$(VARIANT)).$(shell date +%Y%m%d)git$(GIT_REV).tar.gz +TAR_VILLAS = $(BUILDDIR)/packaging/villas-node-$(VERSION_NUM)-$(RELEASE).tar.gz DEPLOY_USER ?= acs DEPLOY_HOST ?= villas.fein-aachen.org DEPLOY_PATH ?= /var/www/villas/node -DOCKER_IMAGE ?= villas/node -DOCKER_IMAGE_DEV ?= villas/node-dev - +DOCKER_FILE ?= Dockerfile +DOCKER_IMAGE ?= villas/node DOCKER_TAG ?= $(GIT_BRANCH) deploy-docker-dev: DOCKER_IMAGE := $(DOCKER_IMAGE)-dev + docker-dev: DOCKER_IMAGE := $(DOCKER_IMAGE)-dev +docker-dev: DOCKER_FILE := $(DOCKER_FILE).dev packaging: rpm dist @@ -53,23 +54,16 @@ deploy-rpm: rsync -a --progress $(RPMDIR)/RPMS/ $(DEPLOY_USER)@$(DEPLOY_HOST):$(DEPLOY_PATH)/../packages/ ssh $(DEPLOY_USER)@$(DEPLOY_HOST) createrepo $(DEPLOY_PATH)/../packages -deploy-docker: +deploy-docker deploy-docker-dev: docker push $(DOCKER_IMAGE):$(DOCKER_TAG) -deploy-docker-dev: - docker push $(DOCKER_IMAGE_DEV):$(DOCKER_TAG) - # Docker targets -run-docker-dev: docker-dev +run-docker-dev: docker run -it -p 80:80 -p 443:443 -p 1234:1234 -p 12000:12000/udp -p 12001:12001/udp --privileged --security-opt seccomp:unconfined -v "$(SRCDIR):/villas" $(DOCKER_IMAGE)-dev:$(GIT_BRANCH) -docker-dev: +docker docker-dev: docker pull fedora:25 - docker build -f Dockerfile.dev -t $(DOCKER_IMAGE):$(DOCKER_TAG) $(SRCDIR) - -docker: - docker pull fedora:25 - docker build -f Dockerfile -t $(DOCKER_IMAGE):$(DOCKER_TAG) $(SRCDIR) + docker build -f $(DOCKER_FILE) -t $(DOCKER_IMAGE):$(DOCKER_TAG) $(SRCDIR) clean-packaging: rm -f $(BUILDDIR)/packaging/villas-node-$(VERSION_NUM).tar.gz diff --git a/packaging/rpm/Makefile.inc b/packaging/rpm/Makefile.inc index 46c377455..49e65fa21 100644 --- a/packaging/rpm/Makefile.inc +++ b/packaging/rpm/Makefile.inc @@ -46,6 +46,7 @@ rpm-nanomsg: $(BUILDDIR)/thirdparty/nanomsg/ | $(RPMDIR)/SOURCES/ cp $(BUILDDIR)/thirdparty/nanomsg/nanomsg-*.tar.gz $(RPMDIR)/SOURCES/ rpmbuild -ba --define="_topdir $$(pwd)/$(RPMDIR)" $(SRCDIR)/packaging/rpm/nanomsg.spec +rpm-libwebsockets: CMAKE_OPTS += -DLWS_IPV6=1 -DLWS_WITH_STATIC=0 -DLWS_WITHOUT_TESTAPPS=1 -DLWS_WITH_HTTP2=1 -DLWS_WITH_SERVER_STATUS=1 rpm-libwebsockets: | $(RPMDIR)/RPMS/x86_64/ $(BUILDDIR)/thirdparty/libwebsockets/ cmake -DCMAKE_INSTALL_PREFIX:PATH=$(PREFIX) \ -H$(SRCDIR)/thirdparty/libwebsockets \ @@ -56,7 +57,7 @@ rpm-libwebsockets: | $(RPMDIR)/RPMS/x86_64/ $(BUILDDIR)/thirdparty/libwebsockets # We patch version number and release fields of the spec file based on the current Git commit $(SPEC_VILLAS): packaging/rpm/villas-node.spec | $$(dir $$@) sed -e "s/§VERSION§/$(VERSION_NUM)/g" \ - -e "s/§RELEASE§/1.$(subst -,_,$(GIT_BRANCH))_$(subst -,_,$(VARIANT)).$(shell date +%Y%m%d)git$(GIT_REV)/g" < $^ > $@ + -e "s/§RELEASE§/$(RELEASE)/g" < $^ > $@ sign-rpm: rpmsign $(RPMDIR)/RPMS/*/.rpm