-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
108 lines (89 loc) · 3.12 KB
/
Copy pathMakefile
File metadata and controls
108 lines (89 loc) · 3.12 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
.PHONY: build gen buf-image tools ui dev install uninstall clean package test dev-vm dev-vm-* dev-vm-down record-vm-*
# Code gen
BUF_IMAGE := greetdeez-buf
BUF_RUN := docker run --rm \
--volume "$(shell pwd):/workspace" \
--workdir /workspace \
--user "$(shell id -u):$(shell id -g)" \
--env HOME=/tmp \
$(BUF_IMAGE)
buf-image:
docker build -t $(BUF_IMAGE) -f docker/Dockerfile.buf .
gen: buf-image
$(BUF_RUN) sh -c 'go install ./cmd/protoc-gen-greetdeez-go ./cmd/protoc-gen-greetdeez-es && buf generate'
# Dev tooling
tools:
go install github.com/bufbuild/buf/cmd/buf@latest
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install github.com/goreleaser/goreleaser/v2@latest
@npm install -g @bufbuild/protoc-gen-es \
|| echo "protoc-gen-es not installed (npm -g failed); only needed for gen-local, gen uses Docker"
# Build
build: gen ui
@mkdir -p bin
CGO_ENABLED=1 go build -o bin/greetdeez ./cmd/greetdeez
ui:
cd npm/proto && npm install && npm run build
go generate ./ui/...
# Dev
dev: build
cage -s -- ./bin/greetdeez -dev
# Install
DESTDIR ?=
PREFIX ?= /usr/local
install: build
install -Dm755 bin/greetdeez $(DESTDIR)$(PREFIX)/bin/greetdeez
install -Dm644 config/greetd.toml $(DESTDIR)/etc/greetd/greetd.toml
install -Dm644 config/greetdeez.conf $(DESTDIR)/etc/greetd/greetdeez.conf
install -Dm644 packaging/sysusers.d/greetdeez.conf $(DESTDIR)/usr/lib/sysusers.d/greetdeez.conf
install -Dm644 packaging/tmpfiles.d/greetdeez.conf $(DESTDIR)/usr/lib/tmpfiles.d/greetdeez.conf
install -Dm755 packaging/scripts/post-install.sh $(DESTDIR)/usr/share/greetdeez/post-install.sh
@if [ -z "$(DESTDIR)" ]; then /usr/share/greetdeez/post-install.sh; fi
uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/greetdeez
rm -f $(DESTDIR)/etc/greetd/greetd.toml
rm -f $(DESTDIR)/etc/greetd/greetdeez.conf
rm -f $(DESTDIR)/usr/lib/sysusers.d/greetdeez.conf
rm -f $(DESTDIR)/usr/lib/tmpfiles.d/greetdeez.conf
rm -rf $(DESTDIR)/usr/share/greetdeez
# Test
test:
go test ./...
# Clean
clean:
rm -rf bin/
rm -rf ui/minimal/build
rm -rf ui/cyber/build
rm -rf ui/doom/build
rm -rf npm/proto/dist
rm -rf gen/
rm -rf dist/
# Dev VMs
VAGRANT := ./scripts/vagrant.sh
dev-vm: dev-vm-arch
dev-vm-down:
$(VAGRANT) destroy -f
dev-vm-%:
@if ! $(VAGRANT) snapshot list $* 2>/dev/null | grep -q 'base'; then \
$(VAGRANT) up $* --provision-with base && \
$(VAGRANT) snapshot save $* base && \
$(VAGRANT) halt $*; \
fi
trap '$(VAGRANT) halt $*' EXIT; \
$(VAGRANT) snapshot restore $* base && \
$(VAGRANT) provision $* --provision-with package && \
virt-viewer -c qemu:///system --wait --attach GreetDeez_$*
# Record a greeter demo from a VM into demo/demo.mp4 + demo/demo.webp
record-vm-%:
@if ! $(VAGRANT) snapshot list $* 2>/dev/null | grep -q 'base'; then \
$(VAGRANT) up $* --provision-with base && \
$(VAGRANT) snapshot save $* base && \
$(VAGRANT) halt $*; \
fi
trap '$(VAGRANT) halt $*' EXIT; \
$(VAGRANT) snapshot restore $* base && \
$(VAGRANT) provision $* --provision-with package && \
WAIT_SECONDS=25 ./scripts/record-demo.sh GreetDeez_$* demo
# Package (via goreleaser)
package: build
goreleaser release --snapshot --clean