You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
5.2 KiB
142 lines
5.2 KiB
K8S_VERSION = v1.26.3
|
|
KUBECONFIG = $(PWD)/.kubeconfig
|
|
CLUSTER = $(shell kind get clusters | grep 'bh-local')
|
|
GOBIN = $(shell go env GOPATH)/bin
|
|
|
|
###################
|
|
# Utilities
|
|
###################
|
|
|
|
.PHONY: setup
|
|
setup: $(GOBIN)/sqlc $(GOBIN)/buf
|
|
@awk '{ print $$1 }' .tool-versions | xargs -I {} asdf plugin add {} || true
|
|
@asdf install || true
|
|
@cd ./src/web-client && npm i
|
|
@cd ./src/admin-client && npm i
|
|
|
|
.PHONY: gen
|
|
gen: $(GOBIN)/sqlc buf.lock
|
|
@$(GOBIN)/sqlc generate -f ./src/sqlc.yaml
|
|
@cd ./src && $(GOBIN)/buf generate
|
|
|
|
.PHONY: dev
|
|
dev: .kubeconfig
|
|
KUBECONFIG=$(KUBECONFIG) tilt up
|
|
|
|
.PHONY: clobber
|
|
clobber:
|
|
KUBECONFIG=$(KUBECONFIG) ctlptl delete registry kind-bh-registry || true
|
|
KUBECONFIG=$(KUBECONFIG) ctlptl delete cluster kind-bh-local || true
|
|
@rm -f $(KUBECONFIG)
|
|
|
|
.PHONY: secrets
|
|
secrets: ./env/.age.txt
|
|
|
|
.PHONY: acceptance-test
|
|
acceptance-test:
|
|
@docker run -it --rm \
|
|
-v $(PWD)/src/$(SERVICE)/acceptance-tests.yml:/tests/tests.yml \
|
|
-e "TEST_HOST=$(ORIGIN)" \
|
|
nytimes/httptest
|
|
|
|
|
|
##############################
|
|
# Container Image Building
|
|
# see ./doc/deployment.md for details
|
|
##############################
|
|
|
|
SERVICE = "catalog"
|
|
ENV ?= ""
|
|
BUILD_INITIATOR = "Development Machine"
|
|
VERSION = $(shell git rev-parse --verify --short HEAD)
|
|
GIT_REF = $(shell git rev-parse --verify HEAD)
|
|
BUILD_DATE := $(shell date +%Y-%m-%d-%T)
|
|
|
|
.PHONY: build-tools-image
|
|
build-tools-image:
|
|
@docker build \
|
|
--label 'com.barretthousen.version=$(VERSION)' \
|
|
--label 'com.barretthousen.git-ref=$(GIT_REF)' \
|
|
--label 'com.barretthousen.build-date=$(BUILD_DATE)' \
|
|
--label 'com.barrethousen.builder=$(BUILD_INITIATOR)' \
|
|
-t git.vdhsn.com/barretthousen/tools):$(VERSION) \
|
|
-t git.vdhsn.com/barretthousen/tools):v1 \
|
|
-f ./src/Dockerfile.tools ./src
|
|
|
|
@docker push git.vdhsn.com/barretthousen/tools:$(VERSION)
|
|
@docker push git.vdhsn.com/barretthousen/tools:v1
|
|
|
|
.PHONY: build-client-image
|
|
build-client-image:
|
|
@docker build --target=production \
|
|
--label 'com.barretthousen.service=$(SERVICE)' \
|
|
--label 'com.barretthousen.version=$(VERSION)' \
|
|
--label 'com.barretthousen.git-ref=$(GIT_REF)' \
|
|
--label 'com.barretthousen.build-date=$(BUILD_DATE)' \
|
|
--label 'com.barrethousen.builder=$(BUILD_INITIATOR)' \
|
|
--build-arg 'service=$(SERVICE)' \
|
|
-t barretthousen/client-$(SERVICE):$(VERSION) \
|
|
-t git.vdhsn.com/barretthousen/client-$(SERVICE):$(VERSION) \
|
|
-f ./src/Dockerfile.frontend ./src/$(SERVICE)
|
|
|
|
@docker push git.vdhsn.com/barretthousen/client-$(SERVICE):$(VERSION)
|
|
@[ ! -z $(ENV) ] && docker tag git.vdhsn.com/barretthousen/client-$(SERVICE):$(VERSION) git.vdhsn.com/barretthousen/client-$(SERVICE):$(ENV) || true
|
|
@[ ! -z $(ENV) ] && docker push git.vdhsn.com/barretthousen/client-$(SERVICE):$(ENV) || true
|
|
|
|
.PHONY: build-backend-image
|
|
build-backend-image:
|
|
@docker build --target=production \
|
|
--label 'com.barretthousen.service=$(SERVICE)' \
|
|
--label 'com.barretthousen.version="$(VERSION)"' \
|
|
--label 'com.barretthousen.git-ref="$(GIT_REF)"' \
|
|
--label 'com.barretthousen.build-date=$(BUILD_DATE)' \
|
|
--label 'com.barrethousen.builder=$(BUILD_INITIATOR)' \
|
|
--build-arg 'service=$(SERVICE)' \
|
|
-t barretthousen/service-$(SERVICE):$(VERSION) \
|
|
-t git.vdhsn.com/barretthousen/service-$(SERVICE):$(VERSION) \
|
|
-f ./src/Dockerfile.prod-backend ./src
|
|
|
|
@docker push git.vdhsn.com/barretthousen/service-$(SERVICE):$(VERSION)
|
|
|
|
@[ ! -z $(ENV) ] && docker tag git.vdhsn.com/barretthousen/service-$(SERVICE):$(VERSION) git.vdhsn.com/barretthousen/service-$(SERVICE):$(ENV) || true
|
|
@[ ! -z $(ENV) ] && docker push git.vdhsn.com/barretthousen/service-$(SERVICE):$(ENV) || true
|
|
|
|
# TODO: investigate tagging without needing to pull? https://dille.name/blog/2018/09/20/how-to-tag-docker-images-without-pulling-them/
|
|
.PHONY: promote-client-prod
|
|
promote-client-prod:
|
|
@docker pull git.vdhsn.com/barretthousen/client-$(SERVICE):beta
|
|
@docker tag git.vdhsn.com/barretthousen/client-$(SERVICE):beta git.vdhsn.com/barretthousen/client-$(SERVICE):prod
|
|
@docker push git.vdhsn.com/barretthousen/client-$(SERVICE):prod
|
|
|
|
.PHONY: promote-backend-prod
|
|
promote-backend-prod:
|
|
@docker pull git.vdhsn.com/barretthousen/service-$(SERVICE):beta
|
|
@docker tag git.vdhsn.com/barretthousen/service-$(SERVICE):beta git.vdhsn.com/barretthousen/service-$(SERVICE):prod
|
|
@docker push git.vdhsn.com/barretthousen/service-$(SERVICE):prod
|
|
|
|
####################
|
|
# File targets
|
|
####################
|
|
buf.lock: $(GOBIN)/buf
|
|
@$(GOBIN)/buf mod update ./src
|
|
|
|
$(GOBIN)/buf:
|
|
@go install github.com/bufbuild/buf/cmd/buf@v1.17.0
|
|
|
|
$(GOBIN)/sqlc:
|
|
@go install github.com/kyleconroy/sqlc/cmd/sqlc@latest
|
|
|
|
.kubeconfig:
|
|
@KUBECONFIG=$(KUBECONFIG) ctlptl create registry kind-bh-registry --port=5005
|
|
@KUBECONFIG=$(KUBECONFIG) ctlptl create cluster kind --name=kind-bh-local --registry=kind-bh-registry --kubernetes-version $(K8S_VERSION)
|
|
@kind get kubeconfig --name=bh-local > .kubeconfig
|
|
|
|
# used to encrypt/decrypt sensitive values with sops
|
|
age_identity=$(shell sops -d ./env/master.json)
|
|
./env/.age.txt:
|
|
@echo "# created: $(shell echo '$(age_identity)' | jq -r '.created')" >> $@
|
|
@echo "# public key: $(shell echo '$(age_identity)' | jq -r '.public_key')" >> $@
|
|
@echo "$(shell echo '$(age_identity)' | jq -r '.private_key')" >> $@
|
|
@echo "$@ created!"
|
|
@echo "export SOPS_AGE_KEY_FILE=$(PWD)/env/.age.txt"
|