-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
97 lines (77 loc) · 2.89 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
# DOCKER_ENVIRONMENT is set to "docker" if it may be inside a Docker container.
# Otherwise, it is set to "host". If Docker is not installed, it presumes it
# is running inside a container (containerd does not prepare a /.dockerenv).
DOCKER_ENVIRONMENT = $(shell \
if [ -f /.dockerenv ] || ! which docker >/dev/null 2>/dev/null; then \
echo docker; \
else \
echo host; \
fi)
# DOCKER_RUN is a command to trigger "docker run". It may have extra
# command-line arguments.
# NOTE: -it option is added when Makefile is called from a tty. It enables
# a programmer to kill a docker-run command by Ctrl+C.
DOCKER_RUN = docker run --rm $(shell [ -t 0 ] && echo -it)
DOCKER_REGISTRY = asia-docker.pkg.dev/icfpc-primary/asia
###############################################################################
# Basic rules
###############################################################################
.PHONY: test
test: test/rust test/go test/secrets
.PHONY:
check:
@bash ./scripts/check_unagi_password.sh --logtostderr
@echo 'Successfully passed precondition check.' >&2
.PHONY:
rebase:
-@rm -rf target
git fetch
git rebase origin/main
###############################################################################
# Test rules
###############################################################################
.PHONY: test/rust
test/rust:
cargo test
cargo build --bins
.PHONY: test/secrets
test/secrets: secrets
.PHONY: test/go
test/go:
cd go && go test ./...
.PHONY: test/server
test/server: docker/server
###############################################################################
# Rules for secrets
###############################################################################
secrets: secrets/service_account.json secrets/login.json FORCE
secrets/%: configs/%.encrypted FORCE
$(MAKE) secrets/$*@$(DOCKER_ENVIRONMENT)
secrets/%@host: docker/tools FORCE
$(DOCKER_RUN) -v $(CURDIR):/work -w /work \
icfpc-unagi/tools make secrets/$*@docker
secrets/%@docker:
./bin/decrypt < configs/$*.encrypted > secrets/$*
configs/%.encrypted@: FORCE
$(MAKE) configs/$*.encrypted@$(DOCKER_ENVIRONMENT)
configs/%.encrypted@host: docker/tools FORCE
$(DOCKER_RUN) -v $(CURDIR):/work -w /work \
icfpc-unagi/tools make configs/$*.encrypted@docker
configs/%.encrypted@docker:
./bin/encrypt < secrets/$* > configs/$*.encrypted
###############################################################################
# Docker rules
###############################################################################
docker/%: FORCE
cd docker && make $*
push/%: docker/%
docker tag icfpc-unagi/$* "$(DOCKER_REGISTRY)/$*"
docker push "$(DOCKER_REGISTRY)/$*"
.PHONY: run/server
run/server: docker/server
$(DOCKER_RUN) -p 8080:8080 icfpc-unagi/server
###############################################################################
# Generic rules
###############################################################################
.PHONY: FORCE
FORCE: