Skip to content
This repository was archived by the owner on Oct 31, 2021. It is now read-only.

Commit f3b2e78

Browse files
committed
Adding BuildKite to try out. Trying to use DeliveryBot
1 parent 7a3236b commit f3b2e78

File tree

7 files changed

+192
-38
lines changed

7 files changed

+192
-38
lines changed

.buildkite/pipeline.yml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
steps:
2+
- command:
3+
- make dry
4+
- make deploy
5+
label: "Deployment"
6+
env:
7+
ENVIRONMENT: ${BUILDKITE_GITHUB_DEPLOYMENT_ENVIRONMENT}
8+
agents:
9+
environment: "${BUILDKITE_GITHUB_DEPLOYMENT_ENVIRONMENT}"

.github/deploy.yml

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
staging:
3+
environment: staging
4+
production_environment: false
5+
required_contexts: []
6+
auto_merge: false

Makefile

+43-23
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ COVERAGE_TXT = $(PWD)/coverage.txt
1111
ARCH=amd64
1212
OS=$(shell uname -s | tr A-Z a-z)
1313

14-
ifndef ENVIRONMENT
15-
ENVIRONMENT = Staging
16-
endif
17-
14+
ENVIRONMENT ?= $(shell echo $${BUIlDKITE_GITHUB_DEPLOYMENT_ENVIRONMENT:-Local})
1815
ENV_LOWER = $(shell echo $(ENVIRONMENT) | tr A-Z a-z)
1916

17+
GENERATED_YAML=$(PWD)/generated/$(ENV_LOWER)
18+
2019
PATH+=\b:$(GOPATH)/bin:$(LOCAL_BIN):$(NODE_MODULES_BIN)
2120

21+
2222
ifndef POSTGRES_DB
2323
POSTGRES_DB=postgres
2424
endif
@@ -33,13 +33,23 @@ endif
3333

3434
# Just a shorthand to print some colored text, makes it easier to read and tell the developer what all the makefile is
3535
# doing since its doing a ton.
36+
ifndef BUILDKITE
3637
define infoMsg
3738
@echo "\033[0;32m[$@] $(1)\033[0m"
3839
endef
3940

4041
define warningMsg
4142
@echo "\033[1;33m[$@] $(1)\033[0m"
4243
endef
44+
else
45+
define infoMsg
46+
@echo "INFO [$@] $(1)"
47+
endef
48+
49+
define warningMsg
50+
@echo "WARN [$@] $(1)"
51+
endef
52+
endif
4353

4454
GO_SRC_DIR=$(PWD)/pkg
4555
ALL_GO_FILES=$(wildcard $(GO_SRC_DIR)/**/*.go)
@@ -52,21 +62,21 @@ include $(PWD)/scripts/*.mk
5262

5363
default: build
5464

55-
dependencies: $(GO_DEPS)
65+
dependencies: $(GO) $(GO_DEPS)
5666
$(call infoMsg,Installing dependencies for monetrs rest-api)
57-
go get ./...
67+
$(GO) get $(GO_SRC_DIR)/...
5868

59-
build: dependencies $(APP_GO_FILES)
69+
build: $(GO) dependencies $(APP_GO_FILES)
6070
$(call infoMsg,Building rest-api binary)
61-
go build -o $(LOCAL_BIN)/monetr $(MONETR_CLI_PACKAGE)
71+
$(GO) build -o $(LOCAL_BIN)/monetr $(MONETR_CLI_PACKAGE)
6272

63-
test: dependencies $(ALL_GO_FILES)
73+
test: $(GO) dependencies $(ALL_GO_FILES)
6474
$(call infoMsg,Running go tests for monetr rest-api)
6575
ifndef CI
66-
go run $(MONETR_CLI_PACKAGE) database migrate -d $(POSTGRES_DB) -U $(POSTGRES_USER) -H $(POSTGRES_HOST)
76+
$(GO) run $(MONETR_CLI_PACKAGE) database migrate -d $(POSTGRES_DB) -U $(POSTGRES_USER) -H $(POSTGRES_HOST)
6777
endif
68-
go test -race -v -coverprofile=$(COVERAGE_TXT) -covermode=atomic ./...
69-
go tool cover -func=$(COVERAGE_TXT)
78+
$(GO) test -race -v -coverprofile=$(COVERAGE_TXT) -covermode=atomic ./...
79+
$(GO) tool cover -func=$(COVERAGE_TXT)
7080

7181
clean:
7282
-rm -rf $(LOCAL_BIN)
@@ -107,20 +117,26 @@ license:
107117
$(call warningMsg,GITHUB_TOKEN is required to check licenses)
108118
endif
109119

110-
generate: OUTPUT_DIR = $(PWD)/generated/$(ENV_LOWER)
111-
generate: IMAGE_TAG=$(shell git rev-parse HEAD)
112-
generate: VALUES_FILE=$(PWD)/values.$(ENV_LOWER).yaml
113-
generate: $(HELM) $(SPLIT_YAML) $(VALUES_FILE) $(wildcard $(PWD)/templates/*)
114-
$(call infoMsg,Generating Kubernetes yaml using Helm output to: $(OUTPUT_DIR))
120+
VALUES_FILE=$(PWD)/values.$(ENV_LOWER).yaml
121+
VALUES_FILES=$(PWD)/values.yaml $(VALUES_FILE)
122+
123+
TEMPLATE_FILES=$(PWD)/templates/*
124+
125+
$(GENERATED_YAML): $(VALUES_FILES) $(TEMPLATE_FILES)
126+
$(GENERATED_YAML): IMAGE_TAG=$(shell git rev-parse HEAD)
127+
$(GENERATED_YAML): $(HELM) $(SPLIT_YAML)
128+
$(call infoMsg,Generating Kubernetes yaml using Helm output to: $(GENERATED_YAML))
115129
$(call infoMsg,Environment: $(ENVIRONMENT))
116130
$(call infoMsg,Using values file: $(VALUES_FILE))
117-
-rm -rfd $(OUTPUT_DIR) # Clean up the output dir beforehand.
131+
-rm -rf $(GENERATED_YAML)
118132
$(HELM) template rest-api $(PWD) \
119133
--dry-run \
120134
--set image.tag="$(IMAGE_TAG)" \
121135
--set podAnnotations."monetr\.dev/date"="$(BUILD_TIME)" \
122136
--set podAnnotations."monetr\.dev/sha"="$(IMAGE_TAG)" \
123-
--values=values.$(ENV_LOWER).yaml | $(SPLIT_YAML) --outdir $(OUTPUT_DIR) -
137+
--values=values.$(ENV_LOWER).yaml | $(SPLIT_YAML) --outdir $(GENERATED_YAML) -
138+
139+
generate: $(GENERATED_YAML)
124140

125141
ifdef GITLAB_CI
126142
include Makefile.gitlab-ci
@@ -149,16 +165,20 @@ include Makefile.docker
149165

150166
ifndef CI
151167
include Makefile.tinker
168+
169+
ifeq ($(ENV_LOWER),local)
152170
include Makefile.local
153171
endif
154172

173+
endif
174+
155175
ifndef POSTGRES_PORT
156176
POSTGRES_PORT=5432
157177
endif
158178

159-
migrate:
160-
@go run $(MONETR_CLI_PACKAGE) database migrate -d $(POSTGRES_DB) -U $(POSTGRES_USER) -H $(POSTGRES_HOST) -P $(POSTGRES_PORT) -W $(POSTGRES_PASSWORD)
179+
migrate: $(GO)
180+
@$(GO) run $(MONETR_CLI_PACKAGE) database migrate -d $(POSTGRES_DB) -U $(POSTGRES_USER) -H $(POSTGRES_HOST) -P $(POSTGRES_PORT) -W $(POSTGRES_PASSWORD)
161181

162-
beta-code: migrate
163-
@go run $(MONETR_CLI_PACKAGE) beta new-code -d $(POSTGRES_DB) -U $(POSTGRES_USER) -H $(POSTGRES_HOST) -P $(POSTGRES_PORT) -W $(POSTGRES_PASSWORD)
182+
beta-code: $(GO) migrate
183+
@$(GO) run $(MONETR_CLI_PACKAGE) beta new-code -d $(POSTGRES_DB) -U $(POSTGRES_USER) -H $(POSTGRES_HOST) -P $(POSTGRES_PORT) -W $(POSTGRES_PASSWORD)
164184

scripts/Dependencies.mk

+111-15
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,72 @@ $(LOCAL_BIN):
44
$(LOCAL_TMP):
55
@if [ ! -f "$(LOCAL_TMP)" ]; then mkdir -p $(LOCAL_TMP); fi
66

7+
CURL=$(shell which curl)
8+
9+
# If curl is not installed then we have some basic stuff to install it.
10+
ifeq ("$(strip $(CURL))","")
11+
# If we are on linux.
12+
ifeq ($(OS),linux)
13+
# If the flavor of linux we are on is debian.
14+
ifeq ("$(shell cat /etc/os-release | grep 'ID_LIKE=')","ID_LIKE=debian")
15+
# Install CURL for debian.define
16+
CURL=/usr/bin/curl
17+
$(CURL):
18+
@if [ ! -f "$(CURL)" ]; then $(MAKE) install-$(CURL); fi
19+
20+
install-$(CURL):
21+
$(call warningMsg,curl needs to be installed in order to continue)
22+
apt-get update -y
23+
apt-get install -y curl
24+
else
25+
# If we are not on debian then we need a different script. I'm not sure what it would need to be.
26+
$(error I dont know how to install curl on your OS)
27+
endif
28+
else
29+
# If we are not on linux then I have no idea what I'd need to do to get curl.
30+
$(error Cannot install curl on something other than linux)
31+
endif
32+
endif
33+
34+
GO_BINARY=$(shell which go)
35+
36+
# Check to see if the user has golang installed. If they don't then install it locally just for this project.
37+
ifeq ("$(strip $(GO_BINARY))","")
38+
GOROOT=$(LOCAL_BIN)/go
39+
GOVERSION=go1.17.1
40+
GO_BINARY=$(GOROOT)/bin/go
41+
42+
GO=$(GO_BINARY)
43+
$(GO):
44+
$(call infoMsg,Go needs to be installed)
45+
@if [ ! -f "$(GO)" ]; then $(MAKE) install-$(GO); fi
46+
47+
install-$(GO): GO_URL = "https://golang.org/dl/$(GOVERSION).$(OS)-$(ARCH).tar.gz"
48+
install-$(GO): GO_TAR=$(LOCAL_TMP)/$(GOVERSION).$(OS)-$(ARCH).tar.gz
49+
install-$(GO): $(LOCAL_BIN) $(LOCAL_TMP) $(CURL)
50+
$(call infoMsg,Installing $(GOVERSION) to $(GOROOT))
51+
-rm -rf $(GO_TAR)
52+
curl -L $(GO_URL) --output $(GO_TAR)
53+
tar -xzf $(GO_TAR) -C $(LOCAL_BIN)
54+
rm -rf $(GO_TAR)
55+
56+
GO111MODULE=on
57+
GOROOT=$(LOCAL_BIN)/go
58+
endif
59+
60+
GO=$(GO_BINARY)
61+
762
LICENSE=$(LOCAL_BIN)/golicense
863
$(LICENSE):
964
@if [ ! -f "$(LICENSE)" ]; then $(MAKE) install-$(LICENSE); fi
1065

1166
install-$(LICENSE): LICENSE_REPO = "https://github.com/mitchellh/golicense.git"
1267
install-$(LICENSE): LICENSE_TMP=$(LOCAL_TMP)/golicense
13-
install-$(LICENSE): $(LOCAL_BIN) $(LOCAL_TMP)
68+
install-$(LICENSE): $(LOCAL_BIN) $(LOCAL_TMP) $(GO)
1469
$(call infoMsg,Installing golicense to $(LICENSE))
1570
rm -rf $(LICENSE_TMP) || true
1671
git clone $(LICENSE_REPO) $(LICENSE_TMP)
17-
cd $(LICENSE_TMP) && go build -o $(LICENSE) .
72+
cd $(LICENSE_TMP) && $(GO) build -o $(LICENSE) .
1873
rm -rf $(LICENSE_TMP) || true
1974

2075
HELM_VERSION=3.5.4
@@ -26,7 +81,7 @@ install-$(HELM): HELM_DIR=$(LOCAL_TMP)/helm
2681
install-$(HELM): HELM_TAR=$(HELM_DIR)/helm.tar.gz
2782
install-$(HELM): HELM_BIN_NAME=$(OS)-$(ARCH)
2883
install-$(HELM): HELM_URL = "https://get.helm.sh/helm-v$(HELM_VERSION)-$(HELM_BIN_NAME).tar.gz"
29-
install-$(HELM): $(LOCAL_BIN) $(LOCAL_TMP)
84+
install-$(HELM): $(LOCAL_BIN) $(LOCAL_TMP) $(CURL)
3085
$(call infoMsg,Installing helm v$(HELM_VERSION) at $(HELM))
3186
-rm -rf $(HELM_DIR)
3287
mkdir -p $(HELM_DIR)
@@ -42,38 +97,38 @@ $(SPLIT_YAML):
4297

4398
install-$(SPLIT_YAML): SPLIT_YAML_REPO = "https://github.com/mogensen/kubernetes-split-yaml.git"
4499
install-$(SPLIT_YAML): SPLIT_YAML_DIR=$(LOCAL_TMP)/kubernetes-split-yaml
45-
install-$(SPLIT_YAML): $(LOCAL_TMP) $(LOCAL_BIN)
100+
install-$(SPLIT_YAML): $(LOCAL_TMP) $(LOCAL_BIN) $(GO)
46101
$(call infoMsg,Installing kubernetes-split-yaml from $(SPLIT_YAML_REPO) at $(SPLIT_YAML))
47-
-rm -rfd $(SPLIT_YAML_DIR)
102+
-rm -rf $(SPLIT_YAML_DIR)
48103
git clone $(SPLIT_YAML_REPO) $(SPLIT_YAML_DIR)
49-
cd $(SPLIT_YAML_DIR) && go build -o $(SPLIT_YAML) ./...
50-
rm -rfd $(SPLIT_YAML_DIR)
104+
cd $(SPLIT_YAML_DIR) && $(GO) build -o $(SPLIT_YAML) ./...
105+
rm -rf $(SPLIT_YAML_DIR)
51106

52107
SWAG=$(LOCAL_BIN)/swag
53108
$(SWAG):
54109
@if [ ! -f "$(SWAG)" ]; then $(MAKE) install-$(SWAG); fi
55110

56111
install-$(SWAG): SWAG_REPO = "https://github.com/swaggo/swag.git"
57112
install-$(SWAG): SWAG_DIR=$(LOCAL_TMP)/swag
58-
install-$(SWAG): $(LOCAL_BIN) $(LOCAL_TMP)
113+
install-$(SWAG): $(LOCAL_BIN) $(LOCAL_TMP) $(GO)
59114
$(call infoMsg,Installing swag from $(SWAG_REPO) at $(SWAG_DIR))
60-
-rm -rfd $(SWAG_DIR)
115+
-rm -rf $(SWAG_DIR)
61116
git clone $(SWAG_REPO) $(SWAG_DIR)
62-
cd $(SWAG_DIR) && go build -o $(SWAG) github.com/swaggo/swag/cmd/swag
117+
cd $(SWAG_DIR) && $(GO) build -o $(SWAG) github.com/swaggo/swag/cmd/swag
63118
chmod +x $(SWAG)
64-
rm -rfd $(SWAG_DIR)
119+
rm -rf $(SWAG_DIR)
65120

66121
HOSTESS=$(LOCAL_BIN)/hostess
67122
$(HOSTESS):
68123
@if [ ! -f "$(HOSTESS)" ]; then $(MAKE) install-$(HOSTESS); fi
69124

70125
install-$(HOSTESS): HOSTESS_REPO = "https://github.com/cbednarski/hostess.git"
71126
install-$(HOSTESS): HOSTESS_DIR=$(LOCAL_TMP)/hostess
72-
install-$(HOSTESS): $(LOCAL_BIN) $(LOCAL_TMP)
127+
install-$(HOSTESS): $(LOCAL_BIN) $(LOCAL_TMP) $(GO)
73128
$(call infoMsg,Installing hostess to $(HOSTESS))
74129
-rm -rf $(HOSTESS_DIR)
75130
git clone $(HOSTESS_REPO) $(HOSTESS_DIR)
76-
cd $(HOSTESS_DIR) && go build -o $(HOSTESS) .
131+
cd $(HOSTESS_DIR) && $(GO) build -o $(HOSTESS) .
77132
rm -rf $(HOSTESS_DIR)
78133

79134
MKCERT=$(LOCAL_BIN)/mkcert
@@ -82,9 +137,50 @@ $(MKCERT):
82137

83138
install-$(MKCERT): MKCERT_REPO = "https://github.com/FiloSottile/mkcert.git"
84139
install-$(MKCERT): MKCERT_DIR=$(LOCAL_TMP)/mkcert
85-
install-$(MKCERT): $(LOCAL_BIN) $(LOCAL_TMP)
140+
install-$(MKCERT): $(LOCAL_BIN) $(LOCAL_TMP) $(GO)
86141
$(call infoMsg,Installing mkcert to $(MKCERT))
87142
-rm -rf $(MKCERT_DIR)
88143
git clone $(MKCERT_REPO) $(MKCERT_DIR)
89-
cd $(MKCERT_DIR) && go build -o $(MKCERT) .
144+
cd $(MKCERT_DIR) && $(GO) build -o $(MKCERT) .
90145
rm -rf $(MKCERT_DIR)
146+
147+
GCLOUD=$(LOCAL_BIN)/google-cloud-sdk/bin/gcloud
148+
$(GCLOUD):
149+
@if [ ! -f "$(GCLOUD)" ]; then $(MAKE) install-$(GCLOUD); fi
150+
151+
install-$(GCLOUD): GCLOUD_VERSION=358.0.0
152+
install-$(GCLOUD): GCLOUD_ARCH=$(shell uname -m)
153+
install-$(GCLOUD): GCLOUD_URL = "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-$(GCLOUD_VERSION)-$(OS)-$(GCLOUD_ARCH).tar.gz"
154+
install-$(GCLOUD): GCLOUD_TAR=$(LOCAL_TMP)/gcloud.tar.gz
155+
install-$(GCLOUD): $(LOCAL_BIN) $(LOCAL_TMP) $(CURL)
156+
$(call infoMsg,Installing gcloud SDK v$(GCLOUD_VERSION) to $(GCLOUD))
157+
-rm -rf $(GCLOUD_TAR)
158+
curl -SsL $(GCLOUD_URL) --output $(GCLOUD_TAR)
159+
tar -xzf $(GCLOUD_TAR) -C $(LOCAL_BIN)
160+
rm -rf $(GCLOUD_TAR)
161+
162+
ifneq ($(ENV_LOWER),local)
163+
KUBECTL=$(LOCAL_BIN)/kubectl
164+
$(KUBECTL):
165+
@if [ ! -f "$(KUBECTL)" ]; then $(MAKE) install-$(KUBECTL); fi
166+
167+
install-$(KUBECTL): $(CURL)
168+
install-$(KUBECTL): KUBECTL_STABLE=$(shell curl -L -s https://dl.k8s.io/release/stable.txt)
169+
install-$(KUBECTL): KUBECTL_URL = "https://dl.k8s.io/release/$(KUBECTL_STABLE)/bin/$(OS)/$(ARCH)/kubectl"
170+
install-$(KUBECTL): $(LOCAL_BIN)
171+
$(call infoMsg,Installing kubectl to $(KUBECTL))
172+
curl -L $(KUBECTL_URL) --output $(KUBECTL)
173+
chmod +x $(KUBECTL)
174+
endif
175+
176+
177+
buildkite: $(KUBECTL)
178+
$(KUBECTL) get po
179+
180+
gcloud: $(GCLOUD)
181+
$(GCLOUD) info
182+
183+
PROJECT_ID=acceptance-320515
184+
cloud-build: $(GCLOUD)
185+
cloud-build: NAME=$(shell basename `git rev-parse --show-toplevel`)
186+
cloud-build:; $(GCLOUD) builds submit --project=$(PROJECT_ID) --tag=gcr.io/$(PROJECT_ID)/github.com/monetr/$(NAME):$(RELEASE_REVISION)

scripts/Deployment.mk

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
ifndef ENVIRONMENT
2+
dry:
3+
$(error ENVIRONMENT is not specified)
4+
5+
deploy:
6+
$(error ENVIRONMENT is not specified)
7+
else
8+
9+
ifeq ($(ENV_LOWER),local)
10+
DEPLOY_NAMESPACE=default
11+
else
12+
DEPLOY_NAMESPACE=monetr-$(ENV_LOWER)
13+
endif
14+
15+
dry: $(KUBECTL) $(GENERATED_YAML)
16+
$(call infoMsg,Dry running deployment of monetr to $(DEPLOY_NAMESPACE))
17+
$(KUBECTL) apply -f $(GENERATED_YAML) -n $(DEPLOY_NAMESPACE) --dry-run=server
18+
19+
deploy: $(KUBECTL) $(GENERATED_YAML)
20+
$(call infoMsg,Deploying monetr to $(DEPLOY_NAMESPACE))
21+
$(KUBECTL) apply -f $(GENERATED_YAML) -n $(DEPLOY_NAMESPACE)
22+
$(KUBECTL) rollout status deploy/rest-api -n $(DEPLOY_NAMESPACE) --timeout=120s
23+
endif

scripts/Golang.mk

Whitespace-only changes.

scripts/Helm.mk

Whitespace-only changes.

0 commit comments

Comments
 (0)