-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
161 lines (133 loc) · 4.87 KB
/
Makefile
File metadata and controls
161 lines (133 loc) · 4.87 KB
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
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 --retry 7 --retry-connrefused 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 --exclude=oryx
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: pre-release
pre-release:
go tool yq '.services.keto.image = "oryd/keto:'$$DOCKER_TAG'"' -i docker-compose.yml
go tool yq '.services.keto-migrate.image = "oryd/keto:'$$DOCKER_TAG'"' -i docker-compose-mysql.yml
go tool yq '.services.keto-migrate.image = "oryd/keto:'$$DOCKER_TAG'"' -i docker-compose-postgres.yml
.PHONY: post-release
post-release:
echo "nothing to do"
.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