PACKAGES=`find ./pkg -mindepth 1 -maxdepth 1 -type d`
BINARIES=`find ./cmd -mindepth 1 -maxdepth 1 -type d`
ENV="stg"

clean:
	rm -rf bin

moonlight: clean
	packr build -ldflags "-w -s" -o ./bin/moonlight-internal ./cmd/moonlight-internal
	packr build -ldflags "-w -s" -o ./bin/moonlight-external ./cmd/moonlight-external
	packr build -ldflags "-w -s" -o ./bin/moonlight-admin ./cmd/moonlight-admin
	packr build -ldflags "-w -s" -o ./bin/moonlight-jobrunner ./cmd/moonlight-jobrunner

build: clean
	GOOS=linux packr build -ldflags "-w -s" -o ./bin/linux/internal/moonlight-internal ./cmd/moonlight-internal
	GOOS=linux packr build -ldflags "-w -s" -o ./bin/linux/external/moonlight-external ./cmd/moonlight-external
	GOOS=linux packr build -ldflags "-w -s" -o ./bin/linux/admin/moonlight-admin ./cmd/moonlight-admin
	GOOS=linux packr build -ldflags "-w -s" -o ./bin/linux/external/moonlight-twitch-authoriser ./cmd/moonlight-twitch-authoriser
	GOOS=linux packr build -ldflags "-w -s" -o ./bin/linux/jobrunner/moonlight-jobrunner ./cmd/moonlight-jobrunner
	zip -r ./bin/linux/moonlight-internal.zip ./bin/linux/internal/moonlight-internal
	zip -r ./bin/linux/moonlight-external.zip ./bin/linux/external/moonlight-external
	zip -r ./bin/linux/moonlight-admin.zip ./bin/linux/admin/moonlight-admin
	zip -r ./bin/linux/moonlight-external-authoriser.zip ./bin/linux/external/moonlight-twitch-authoriser
	zip -r ./bin/linux/moonlight-jobrunner.zip ./bin/linux/jobrunner/moonlight-jobrunner

mocks:
	counterfeiter pkg/twitch/backend/backend.go Client
	counterfeiter pkg/rpc/control/control.twirp.go InternalController
	counterfeiter pkg/rpc/admin/admin.twirp.go AdminController

proto:
	protoc --proto_path=$(GOPATH)/src:. --twirp_out=. --go_out=. ./pkg/rpc/types.proto
	protoc --proto_path=$(GOPATH)/src:. --twirp_out=. --go_out=. ./pkg/rpc/control/control.proto
	protoc --proto_path=$(GOPATH)/src:. --twirp_out=. --go_out=. ./pkg/rpc/admin/admin.proto

lint:
	goimports -l $(PACKAGES) $(BINARIES)
	gofmt -l $(PACKAGES) $(BINARIES)
	errcheck $(PACKAGES) $(BINARIES)
	golint $(PACKAGES) $(BINARIES)
	go vet $(PACKAGES) $(BINARIES)

test: lint
	for p in $(PACKAGES) $(BINARIES); do go test -race -covermode=atomic $${p}; done

testcov: lint
	go get github.com/axw/gocov/gocov
	go get github.com/t-yuki/gocov-xml
	gocov test $(PACKAGES) $(BINARIES) > test_coverage.json
	gocov-xml < test_coverage.json > test_coverage.xml

deps:
	@echo "Updating dependencies..."
	dep ensure -update
	@echo "Dependency versions:"
	@dep status
	@echo "Remember: git add vendor/"
