BUILDID?=$(shell git rev-parse HEAD)
SNAPSHOT?=yes

BEATS_BUILDER_IMAGE?=tudorg/beats-builder
BEATS_BUILDER_DEB6_IMAGE?=tudorg/beats-builder-deb6
BEATS_GOPATH=$(firstword $(subst :, ,${GOPATH}))

makefile_abspath:=$(abspath $(lastword $(MAKEFILE_LIST)))
packer_absdir=$(shell dirname ${makefile_abspath})
beat_abspath=${BEATS_GOPATH}/src/${BEAT_PATH}


%/deb: ${BUILD_DIR}/god-linux-386 ${BUILD_DIR}/god-linux-amd64 fpm-image
	echo Creating DEB packages for $(@D)
	ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/debian/build.sh
	ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/debian/build.sh

%/rpm: ${BUILD_DIR}/god-linux-386 ${BUILD_DIR}/god-linux-amd64 fpm-image
	echo Creating RPM packages for $(@D)
	ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/centos/build.sh
	ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/centos/build.sh

%/darwin:
	echo Creating Darwin packages for $(@D)
	ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/darwin/build.sh

%/win:
	echo Creating Darwin packages for $(@D)
	ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/windows/build.sh
	ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/windows/build.sh

%/bin:
	echo Creating Linux packages for $(@D)
	ARCH=386 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/binary/build.sh
	ARCH=amd64 BEAT=$(@D) BUILD_DIR=${BUILD_DIR} BEAT_PATH=$(beat_abspath) BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/binary/build.sh

.PHONY: package-dashboards
package-dashboards:
	echo Creating the Dashboards package
	BUILDID=$(BUILDID) SNAPSHOT=$(SNAPSHOT) $(packer_absdir)/platforms/dashboards/build.sh

.PHONY: deps
deps:
	go get -u github.com/tsg/gotpl

.PHONY: xgo-image
xgo-image:
	cd $(packer_absdir)/docker/xgo-image/; ./build.sh
	# copy build.sh script in the xgo-image-deb6 to avoid code duplication
	cp $(packer_absdir)/docker/xgo-image/base/build.sh $(packer_absdir)/docker/xgo-image-deb6/base/build.sh
	cd $(packer_absdir)/docker/xgo-image-deb6/; ./build.sh

.PHONY: fpm-image
fpm-image:
	docker build --rm=true -t tudorg/fpm $(packer_absdir)/docker/fpm-image

.PHONY: go-daemon-image
go-daemon-image:
	docker build --rm=true -t tudorg/go-daemon $(packer_absdir)/docker/go-daemon/

${BUILD_DIR}/god-linux-386 ${BUILD_DIR}/god-linux-amd64:
	docker run --rm -v ${BUILD_DIR}:/build tudorg/go-daemon

${BUILD_DIR}/upload:
	mkdir -p ${BUILD_DIR}/upload

${BUILD_DIR}/upload/build_id.txt:
	echo $(BUILDID) > ${BUILD_DIR}/upload/build_id.txt

# Build the image required for package-upload.
.PHONY: deb-rpm-s3
deb-rpm-s3:
	$(packer_absdir)/docker/deb-rpm-s3/build.sh

.PHONY: run-interactive-builder-deb6
run-interactive-builder-deb6:
	docker run -t -i -v $(shell pwd)/build:/build \
		-v $(shell pwd)/xgo-scripts/:/scripts \
		-v $(shell pwd)/../..:/source \
		--entrypoint=bash ${BEATS_BUILDER_DEB6_IMAGE}

.PHONY: run-interactive-builder
run-interactive-builder:
	docker run -t -i -v $(shell pwd)/build:/build \
		-v $(packer_absdir)/xgo-scripts/:/scripts \
		-v $(shell pwd)/../..:/source \
		--entrypoint=bash ${BEATS_BUILDER_IMAGE}

.PHONY: images
images: xgo-image fpm-image go-daemon-image

.PHONY: push-images
push-images:
	docker push ${BEATS_BUILDER_IMAGE}
	docker push ${BEATS_BUILDER_DEB6_IMAGE}
	docker push tudorg/fpm
	docker push tudorg/go-daemon

.PHONY: pull-images
pull-images:
	docker pull ${BEATS_BUILDER_IMAGE}
	docker pull ${BEATS_BUILDER_DEB6_IMAGE}
	docker pull tudorg/fpm
	docker pull tudorg/go-daemon


define rm-image =
@echo "Cleaning $(1) image..."
  @if [ $(shell docker ps  -n 1 -a -q  --filter="image=$(1)" )  ]; then \
      docker stop $(shell docker ps -a -q --filter="image=$(1)"); \
      docker rm   $(shell docker ps -a -q --filter="image=$(1)"); \
  fi; \
\
  if [ $(shell docker images -q $(1)) ]; then \
    docker rmi $(1); \
  fi
endef


.PHONY: clean-images
clean-images:
	@$(call rm-image, ${BEATS_BUILDER_DEB6_IMAGE})
	@$(call rm-image, ${BEATS_BUILDER_IMAGE})

.PHONY: clean
clean:
	$(call rm-image,build-image)
