diff --git a/.gitignore b/.gitignore index 29a99721..4a1f5539 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,6 @@ src/vendor src/caduceus/caduceus src/caduceus/debug src/caduceus/output -caduceus.spec # config src/caduceus/caduceus.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cf422d9..62f3efa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [Unreleased] -### Added +### Added - Add alternative urls and consumer max retry logic for webhooks [issue 140](https://github.com/Comcast/caduceus/pull/140) ### Changed diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..f68ab0d4 --- /dev/null +++ b/Makefile @@ -0,0 +1,91 @@ +DEFAULT: build + +GOPATH := ${CURDIR} +GOFMT ?= gofmt +APP := caduceus +FIRST_GOPATH := $(firstword $(subst :, ,$(shell go env GOPATH))) +BINARY := $(FIRST_GOPATH)/bin/$(APP) + +PROGVER = $(shell grep 'applicationVersion.*= ' src/$(APP)/$(APP).go | awk '{print $$3}' | sed -e 's/\"//g') +RELEASE = 1 + +.PHONY: glide-install +glide-install: + export GOPATH=$(GOPATH) && cd src && glide install --strip-vendor + +.PHONY: build +build: glide-install + export GOPATH=$(GOPATH) && cd src/$(APP) && go build + +rpm: + mkdir -p ./.ignore/SOURCES + tar -czf ./.ignore/SOURCES/$(APP)-$(PROGVER).tar.gz --transform 's/^\./$(APP)-$(PROGVER)/' --exclude ./keys --exclude ./.git --exclude ./.ignore --exclude ./conf --exclude ./deploy --exclude ./vendor --exclude ./src/vendor . + cp etc/systemd/$(APP).service ./.ignore/SOURCES/ + cp etc/$(APP)/$(APP).yaml ./.ignore/SOURCES/ + rpmbuild --define "_topdir $(CURDIR)/.ignore" \ + --define "_ver $(PROGVER)" \ + --define "_releaseno $(RELEASE)" \ + -ba etc/systemd/$(APP).spec + +.PHONY: version +version: + @echo $(PROGVER) + + +# If the first argument is "update-version"... +ifeq (update-version,$(firstword $(MAKECMDGOALS))) + # use the rest as arguments for "update-version" + RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) + # ...and turn them into do-nothing targets + $(eval $(RUN_ARGS):;@:) +endif + +.PHONY: update-version +update-version: + @echo "Update Version $(PROGVER) to $(RUN_ARGS)" + sed -i "s/$(PROGVER)/$(RUN_ARGS)/g" src/$(APP)/$(APP).go + + +.PHONY: install +install: + echo go build -o $(BINARY) $(PROGVER) + +.PHONY: release-artifacts +release-artifacts: glide-install + mkdir -p ./.ignore + export GOPATH=$(GOPATH) && cd src/$(APP) && GOOS=darwin GOARCH=amd64 go build -o ../../.ignore/$(APP)-$(PROGVER).darwin-amd64 + export GOPATH=$(GOPATH) && cd src/$(APP) && GOOS=linux GOARCH=amd64 go build -o ../../.ignore/$(APP)-$(PROGVER).linux-amd64 + +.PHONY: docker +docker: + docker build -f ./deploy/Dockerfile -t $(APP):$(PROGVER) . + +# build docker without running modules +.PHONY: local-docker +local-docker: + GOOS=linux GOARCH=amd64 go build -o $(APP)_linux_amd64 + docker build -f ./deploy/Dockerfile.local -t $(APP):local . + +.PHONY: style +style: + ! gofmt -d $$(find . -path ./vendor -prune -o -name '*.go' -print) | grep '^' + +.PHONY: test +test: + go test -o $(BINARY) -v -race -coverprofile=cover.out $(go list ./... | grep -v "/vendor/") + +.PHONY: test-cover +test-cover: test + go tool cover -html=cover.out + +.PHONY: codecov +codecov: test + curl -s https://codecov.io/bash | bash + +.PHONEY: it +it: + ./it.sh + +.PHONY: clean +clean: + rm -rf ./$(APP) ./.ignore ./coverage.txt ./vendor ./src/vendor diff --git a/build_rpm.sh b/build_rpm.sh index 3bd19515..3d1bff63 100755 --- a/build_rpm.sh +++ b/build_rpm.sh @@ -69,7 +69,7 @@ popd cat ${NAME}.spec.in > ${NAME}.spec cat ChangeLog >> ${NAME}.spec -if [ 0 eq $SIGN ]; then +if [ 0 == $SIGN ]; then yes "" | rpmbuild -ba \ --define "_ver $release" \ --define "_releaseno ${BUILD_NUMBER}" \ @@ -88,3 +88,4 @@ fi pushd .. echo "$new_release" > versionno.txt popd + diff --git a/caduceus.spec.in b/etc/init.d/caduceus.spec similarity index 100% rename from caduceus.spec.in rename to etc/init.d/caduceus.spec diff --git a/etc/systemd/caduceus.service b/etc/systemd/caduceus.service index 4d9aa7c4..408960e8 100644 --- a/etc/systemd/caduceus.service +++ b/etc/systemd/caduceus.service @@ -1,12 +1,17 @@ [Unit] Description=The Xmidt server for delivering events. -After=network.target +After=network.target remote-fs.target nss-lookup.target [Service] Type=simple -User=caduceus +PIDFile=/run/caduceus.pid +ExecStartPre=/usr/bin/rm -f /run/caduceus.pid ExecStart=/usr/bin/caduceus -Restart=on-failure +ExecReload=/bin/kill -s HUP $MAINPID +TimeoutStopSec=10 +KillMode=process +PrivateTmp=true +Restart=always [Install] WantedBy=multi-user.target diff --git a/etc/systemd/caduceus.spec b/etc/systemd/caduceus.spec new file mode 100644 index 00000000..f4ae07ea --- /dev/null +++ b/etc/systemd/caduceus.spec @@ -0,0 +1,94 @@ +%define debug_package %{nil} + +Name: caduceus +Version: %{_ver} +Release: %{_releaseno}%{?dist} +Summary: The Xmidt API interface server. + +Group: System Environment/Daemons +License: ASL 2.0 +URL: https://github.com/Comcast/%{name} +Source0: %{name}-%{version}.tar.gz + +BuildRequires: golang >= 1.11 + +Provides: %{name} + +%description +The Xmidt API interface server. + +%prep +%setup -q + +%build +export GOPATH=$(pwd) +pushd src +glide i --strip-vendor +cd %{name} +go build %{name} +popd + +%install + +# Install Binary +%{__install} -D -p -m 755 src/%{name}/%{name} %{buildroot}%{_bindir}/%{name} + +# Install Service +%{__install} -D -p -m 644 etc/systemd/%{name}.service %{buildroot}%{_unitdir}/%{name}.service + +# Install Configuration +%{__install} -D -p -m 644 etc/%{name}/%{name}.yaml %{buildroot}%{_sysconfdir}/%{name}/%{name}.yaml + + +# Create Logging Location +%{__install} -d %{buildroot}%{_localstatedir}/log/%{name} + +# Create Runtime Details Location +%{__install} -d %{buildroot}%{_localstatedir}/run/%{name} + +%files +%defattr(-, %{name}, %{name}, -) + +# Binary +%attr(755, %{name}, %{name}) %{_bindir}/%{name} + +# Configuration +%dir %{_sysconfdir}/%{name} +%config(noreplace) %{_sysconfdir}/%{name}/%{name}.yaml + +# Service Files +%{_unitdir}/%{name}.service + +# Logging Location +%dir %{_localstatedir}/log/%{name} + +# Runtime Details Location +%dir %{_localstatedir}/run/%{name} + +%pre +# If app user does not exist, create +id %{name} >/dev/null 2>&1 +if [ $? != 0 ]; then + /usr/sbin/groupadd -r %{name} >/dev/null 2>&1 + /usr/sbin/useradd -d /var/run/%{name} -r -g %{name} %{name} >/dev/null 2>&1 +fi + + +%post +%systemd_post %{name}.service + +%preun +%systemd_preun %{name}.service + +%postun +%systemd_postun %{name}.service + +# Do not remove anything if this is not an uninstall +if [ $1 = 0 ]; then + /usr/sbin/userdel -r %{name} >/dev/null 2>&1 + /usr/sbin/groupdel %{name} >/dev/null 2>&1 + # Ignore errors from above + true +fi + +%changelog diff --git a/release_notes.md b/release_notes.md new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/release_notes.md @@ -0,0 +1 @@ + diff --git a/src/caduceus/caduceus.go b/src/caduceus/caduceus.go index b1e43a02..30d2ec90 100644 --- a/src/caduceus/caduceus.go +++ b/src/caduceus/caduceus.go @@ -39,8 +39,9 @@ import ( ) const ( - applicationName = "caduceus" - DEFAULT_KEY_ID = "current" + applicationName = "caduceus" + DEFAULT_KEY_ID = "current" + applicationVersion = "0.1.4" ) // caduceus is the driver function for Caduceus. It performs everything main() would do,