-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
185 lines (142 loc) · 6.13 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
SHELL := bash
GOPATH := $(shell go env GOPATH)
GOBIN ?= $(GOPATH)/bin # Default GOBIN if not set
GCP_PROJECT_ID_PROD ?= knada-gcp
GCP_PROJECT_ID_DEV ?= nada-dev-db2e
KUBECTL_PROD_CTX ?= gke_knada-gcp_europe-north1_knada-gke
# A template function for installing binaries
define install-binary
@if ! command -v $(1) &> /dev/null; then \
echo "$(1) not found, installing..."; \
go install $(2); \
fi
endef
GOOSE ?= $(shell command -v goose || echo "$(GOBIN)/goose")
GOOSE_VERSION := v3.17.0
SQLC ?= $(shell command -v sqlc || echo "$(GOBIN)/sqlc")
SQLC_VERSION := v1.25.0
GOLANGCILINT ?= $(shell command -v golangci-lint || echo "$(GOBIN)/golangci-lint")
GOLANGCILINT_VERSION := v1.55.2
GOTEST ?= $(shell command -v gotest || echo "$(GOBIN)/gotest")
GOTEST_VERSION := v0.0.6
STATICCHECK ?= $(shell command -v staticcheck || echo "$(GOBIN)/staticcheck")
STATICCHECK_VERSION := v0.4.6
GOVULNCHECK ?= $(shell command -v govulncheck || echo "$(GOBIN)/govulncheck")
GOVULNCHECK_VERSION := v1.0.4
GOFUMPT ?= $(shell command -v gofumpt || echo "$(GOBIN)/gofumpt")
GOFUMPT_VERSION := v0.6.0
MINIKUBE ?= minikube
MINIKUBE_START_ARGS ?=
$(GOOSE):
$(call install-binary,goose,github.com/pressly/goose/v3/cmd/goose@$(GOOSE_VERSION))
$(SQLC):
$(call install-binary,sqlc,github.com/sqlc-dev/sqlc/cmd/sqlc@$(SQLC_VERSION))
$(GOLANGCILINT):
$(call install-binary,golangci-lint,github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCILINT_VERSION))
$(GOTEST):
$(call install-binary,gotest,github.com/rakyll/gotest@$(GOTEST_VERSION))
$(STATICCHECK):
$(call install-binary,staticcheck,honnef.co/go/tools/cmd/staticcheck@$(STATICCHECK_VERSION))
$(GOVULNCHECK):
$(call install-binary,govulncheck,golang.org/x/vuln/cmd/govulncheck@$(GOVULNCHECK_VERSION))
$(GOFUMPT):
$(call install-binary,gofumpt,mvdan.cc/gofumpt@$(GOFUMPT_VERSION))
env:
# We need to fetch the secrets from GCP Secret Manager in PROD environment
echo "KNORTEN_OAUTH_CLIENT_ID=$$(gcloud secrets versions access latest --project=$(GCP_PROJECT_ID_PROD) --secret=knorten-oauth-client-id)" > .env
echo "KNORTEN_OAUTH_CLIENT_SECRET=$$(gcloud secrets versions access latest --project=$(GCP_PROJECT_ID_PROD) --secret=knorten-oauth-client-secret)" >> .env
echo "KNORTEN_OAUTH_TENANT_ID=$$(gcloud secrets versions access latest --project=$(GCP_PROJECT_ID_PROD) --secret=knorten-azure-tenant-id)" >> .env
# We need to fetch the gh app id from the k8s secret in the PROD environment
echo "KNORTEN_GITHUB_APPLICATION_ID=$$(kubectl get secrets/github-app-secret --context=gke_knada-gcp_europe-north1_knada-gke --namespace knada-system --template={{.data.APP_ID}} | base64 -d)" >> .env
echo "KNORTEN_GITHUB_INSTALLATION_ID=$$(kubectl get secrets/github-app-secret --context=gke_knada-gcp_europe-north1_knada-gke --namespace knada-system --template={{.data.INSTALLATION_ID}} | base64 -d)" >> .env
# We need to fetch the gh app priv key from the k8s secret in the PROD environment
@kubectl get secrets/github-app-secret --context=gke_knada-gcp_europe-north1_knada-gke --namespace knada-system --template={{.data.PRIVATE_KEY}} | base64 -d > github-app-private-key.pem
.PHONY: env
netpol:
$(shell kubectl get --context=knada --namespace=knada-system configmap/airflow-network-policy -o json | jq -r '.data."default-egress-airflow-worker.yaml"' > .default-egress-airflow-worker.yaml)
.PHONY: netpol
local-online:
@echo "Sourcing environment variables..."
set -a && source ./.env && set +a && \
go run -race . --config=config-local-online.yaml
.PHONY: local-online
local:
@echo "Sourcing environment variables..."
set -a && source ./.env && set +a && \
go run -race . --config=config-local.yaml
.PHONY: local
generate-sql: $(SQLC)
$(SQLC) generate
.PHONY: generate-sql
# make goose cmd=status
goose: $(GOOSE)
$(GOOSE) -dir pkg/database/migrations/ postgres "user=postgres password=postgres dbname=knorten host=localhost sslmode=disable" $(cmd)
.PHONY: goose
goose-up: $(GOOSE)
$(GOOSE) -dir pkg/database/migrations/ postgres "user=postgres password=postgres dbname=knorten host=localhost sslmode=disable" up
.PHONY: goose-up
init:
go run local/main.go
.PHONY: init
css:
npx tailwindcss --postcss -i local/tailwind.css -o assets/css/main.css
.PHONY: css
css-watch:
npx tailwindcss --postcss -i local/tailwind.css -o assets/css/main.css -w
.PHONY: css-watch
npm-install:
npm install
.PHONY: npm-install
npm-clean:
@npm cache clean --force
@rm -rf node_modules || echo "No node_modules directory found."
.PHONY: npm-clean
test: $(GOTEST)
$(GOTEST) -v ./... -count=1
.PHONY: test
staticcheck: $(STATICCHECK)
$(STATICCHECK) ./...
vulncheck: $(GOVULNCHECK)
$(GOVULNCHECK) -C . ./...
lint: $(GOLANGCILINT)
$(GOLANGCILINT) run
.PHONY: lint
update-configmap:
kubectl create configmap knorten-config \
--from-file=config.yaml=config-prod.yaml --dry-run=client -o yaml \
> k8s/configmap.yaml
keypair-testing:
openssl genrsa -out private_key.pem 2048 && openssl rsa -in private_key.pem -pubout -out public_key.pem
gauth:
@gcloud auth login --update-adc --project $(GCP_PROJECT_ID_DEV)
@gcloud config set project $(GCP_PROJECT_ID_DEV)
.PHONY: gauth
KUBERNETES_VERSION ?= v1.28.3
minikube:
@$(MINIKUBE) status >/dev/null 2>&1 && echo "Minikube is already running." || \
$(MINIKUBE) start --cpus 4 --memory 6144 --driver=docker --addons=volumesnapshots --kubernetes-version=$(KUBERNETES_VERSION) $(MINIKUBE_START_ARGS)
.PHONY: minikube
minikube-destroy:
@$(MINIKUBE) delete --all --purge
.PHONY: minikube-destroy
deps:
./scripts/configure_minikube.sh
./scripts/copy_from_prod_k8s.sh
./scripts/manage_artifact_access.sh
docker-compose up -d db
.PHONY: deps
gofumpt: $(GOFUMPT)
$(GOFUMPT) -w .
check: | gofumpt lint test
.PHONY: check
full-check: | check staticcheck vulncheck
.PHONY: full-check
run: | minikube env deps npm-install css goose-up init local-online
echo "You may need to run:\n\nmake registry\n\n. If you arent able to access the registry."
.PHONY: run
registry:
./scripts/manage_artifact_access.sh
clean: | minikube-destroy npm-clean
@rm .env || echo "No .env file found."
@docker-compose down --volumes
.PHONY: clean