-
Notifications
You must be signed in to change notification settings - Fork 355
/
Copy pathMakefile
157 lines (130 loc) · 4.88 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
SHELL=/bin/bash -o pipefail
export PWD := $(shell pwd)
export PATH := ${PWD}/.bin:${PATH}
export IMAGE_TAG := $(if $(IMAGE_TAG),$(IMAGE_TAG),latest)
SCRIPT_DEPENDENCIES = grype \
trivy \
ory \
licenses
define make-script-dependency
# each script is responsible to figure out whether it should re-install
.PHONY: .bin/$1
.bin/$1:
./scripts/install-$1.sh
endef
$(foreach dep, $(SCRIPT_DEPENDENCIES), $(eval $(call make-script-dependency,$(dep))))
.PHONY: .bin/clidoc
.bin/clidoc:
go build -o .bin/clidoc ./cmd/clidoc/.
authors: # updates the AUTHORS file
curl https://raw.githubusercontent.com/ory/ci/master/authors/authors.sh | env PRODUCT="Ory Keto" bash
.PHONY: format
format: .bin/ory node_modules
.bin/ory dev headers copyright --type=open-source --exclude=.bin --exclude=internal/httpclient --exclude=proto
go tool goimports -w -local github.com/ory/keto *.go internal cmd contrib ketoctx ketoapi embedx
npm exec -- prettier --write .
.PHONY: install
install:
go install -tags sqlite .
.PHONY: docker
docker:
DOCKER_BUILDKIT=1 DOCKER_CONTENT_TRUST=1 docker build --progress=plain -t oryd/keto:${IMAGE_TAG} -f .docker/Dockerfile-build .
# Generates the SDKs
.PHONY: sdk
sdk: .bin/ory node_modules
rm -rf internal/httpclient
go tool swagger generate spec -m -o spec/swagger.json \
-c github.com/ory/keto \
-c github.com/ory/x/healthx \
-x internal/httpclient \
-x internal/e2e
.bin/ory dev swagger sanitize ./spec/swagger.json
go tool swagger validate ./spec/swagger.json
CIRCLE_PROJECT_USERNAME=ory CIRCLE_PROJECT_REPONAME=keto \
.bin/ory dev openapi migrate \
--health-path-tags metadata \
-p https://raw.githubusercontent.com/ory/x/master/healthx/openapi/patch.yaml \
-p file://.schema/openapi/patches/meta.yaml \
spec/swagger.json spec/api.json
mkdir -p internal/httpclient
npm run openapi-generator-cli -- generate -i "spec/api.json" \
-g go \
-o "internal/httpclient" \
--git-user-id ory \
--git-repo-id keto-client-go \
--git-host github.com \
--api-name-suffix "Api" \
--global-property apiTests=false \
-t .schema/openapi/templates/go \
-c .schema/openapi/gen.go.yml
rm internal/httpclient/go.{mod,sum}
make format
.PHONY: build
build:
go build -tags sqlite
#
# Generate APIs and client stubs from the definitions
#
.PHONY: buf-gen
buf-gen: node_modules
go tool -n protoc-gen-doc # Apparently on the first run the path is the temporary build output and will be deleted again. Later invocations use the correct go build cache path.
PATH=$$PATH:$$(dirname "$$(go tool -n protoc-gen-doc)") \
go tool buf generate proto
make format
@echo "All code was generated successfully!"
#
# Lint API definitions
#
.PHONY: buf-lint
buf-lint:
go tool buf lint ./proto
@echo "All lint checks passed successfully!"
#
# Generate after linting succeeded
#
.PHONY: buf
buf: buf-lint buf-gen
.PHONY: test-e2e
test-e2e:
go test -tags sqlite -failfast -v ./internal/e2e
.PHONY: test-docs-samples
test-docs-samples:
go tool -n jd # Apparently on the first run the path is the temporary build output and will be deleted again. Later invocations use the correct go build cache path.
PATH=$$PATH:$$(dirname "$$(go tool -n jd)") && \
(cd ./contrib/docs-code-samples && \
npm i && \
npm test)
.PHONY: fuzz-test
fuzz-test:
go test -tags=sqlite -fuzz=FuzzParser -fuzztime=10s ./internal/schema
.PHONY: libfuzzer-fuzz-test
libfuzzer-fuzz-test: .bin/go114-fuzz-build
mkdir -p .fuzzer/fuzz_parser_corpus
.bin/go114-fuzz-build -o ./.fuzzer/parser.a -func LibfuzzerFuzzParser ./internal/schema
clang -fsanitize=fuzzer ./.fuzzer/parser.a -o ./.fuzzer/parser
./.fuzzer/parser -use_value_profile=1 -timeout=1 ./.fuzzer/fuzz_parser_corpus ./.fuzzer/fuzz_parser_seeds
.PHONY: libfuzzer-fuzz-test-minimize
libfuzzer-fuzz-test-minimize: .bin/go114-fuzz-build
mkdir -p .fuzzer/fuzz_parser_corpus
mv .fuzzer/fuzz_parser_corpus .fuzzer/fuzz_parser_old_corpus
mkdir -p .fuzzer/fuzz_parser_corpus
.bin/go114-fuzz-build -o ./.fuzzer/parser.a -func LibfuzzerFuzzParser ./internal/schema
clang -fsanitize=fuzzer ./.fuzzer/parser.a -o ./.fuzzer/parser
./.fuzzer/parser -runs=0 -merge=1 ./.fuzzer/fuzz_parser_corpus ./.fuzzer/fuzz_parser_seeds ./.fuzzer/fuzz_parser_old_corpus
.PHONY: cve-scan
cve-scan: docker .bin/grype
grype oryd/keto:latest
.PHONY: post-release
post-release:
cat docker-compose.yml | go tool yq '.services.keto.image = "oryd/keto:'$$DOCKER_TAG'"' | sponge docker-compose.yml
cat docker-compose-mysql.yml | go tool yq '.services.keto-migrate.image = "oryd/keto:'$$DOCKER_TAG'"' | sponge docker-compose-mysql.yml
cat docker-compose-postgres.yml | go tool yq '.services.keto-migrate.image = "oryd/keto:'$$DOCKER_TAG'"' | sponge docker-compose-postgres.yml
.PHONY: generate
generate: .bin/stringer
go generate ./...
make format
licenses: .bin/licenses node_modules # checks open-source licenses
.bin/licenses
node_modules: package-lock.json
npm ci
touch node_modules