-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
325 lines (267 loc) · 11.6 KB
/
Copy pathMakefile
File metadata and controls
325 lines (267 loc) · 11.6 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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
-include .env
PKG := projects.blender.org/studio/flamenco
# To update the version number in all the relevant places, update the VERSION
# and RELEASE_CYCLE variables below and run `make update-version`.
VERSION := 3.8-alpha1
# "alpha", "beta", or "release".
RELEASE_CYCLE := alpha
# _GIT_DESCRIPTION_OR_TAG is either something like '16-123abc' (when we're 16
# commits since the last tag) or it's something like `v3.0-beta2` (when exactly
# on a tagged version).
_GIT_DESCRIPTION_OR_TAG := $(subst v${VERSION}-,,$(shell git describe --tag --dirty --always --abbrev=9))
# In the above cases, GITHASH is either `16-123abc` (in the same case above) or
# `123abc` (when the tag matches the current commit exactly) or `dirty` (when
# the tag matches the current commit exactly, and there are subsequent
# uncommitted changes). This is done to prevent repetition of the same tag
# in the "extended version" of Flamenco, which combines ${VERSION} and
# ${GITHASH}.
GITHASH := $(subst v${VERSION},$(shell git rev-parse --short=9 HEAD),${_GIT_DESCRIPTION_OR_TAG})
ifeq (${GITHASH},dirty)
GITHASH := $(shell git rev-parse --short=9 HEAD)
endif
BUILDTOOL := mage
ifeq ($(OS),Windows_NT)
BUILDTOOL := $(BUILDTOOL).exe
endif
BUILDTOOL_PATH := ${PWD}/${BUILDTOOL}
# Package name of the generated Python/JavaScript code for the Flamenco API.
PY_API_PKG_NAME=flamenco.manager
JS_API_PKG_NAME=manager
# The directory that will contain the built webapp files, and some other files
# that will be served as static files by the Flamenco Manager web server.
#
# WARNING: THIS IS USED IN `rm -rf ${WEB_STATIC}`, DO NOT MAKE EMPTY OR SET TO
# ANY ABSOLUTE PATH.
WEB_STATIC=web/static
# The Hugo package + its version.
HUGO_PKG := github.com/gohugoio/hugo@v0.121.2
# Prevent any dependency that requires a C compiler, i.e. only work with pure-Go libraries.
export CGO_ENABLED=0
all: application
# Install generators and build the software.
with-deps: buildtool
"${BUILDTOOL_PATH}" installGenerators
$(MAKE) application
vet: buildtool
"${BUILDTOOL_PATH}" vet
check: buildtool
"${BUILDTOOL_PATH}" check
application: flamenco-manager flamenco-worker
flamenco-manager: buildtool
"${BUILDTOOL_PATH}" flamencoManager
flamenco-manager-without-webapp: buildtool
"${BUILDTOOL_PATH}" flamencoManagerWithoutWebapp
flamenco-worker: buildtool
"${BUILDTOOL_PATH}" flamencoWorker
# Builds the buildtool itself, for faster rebuilds of Skyfill.
buildtool: ${BUILDTOOL}
${BUILDTOOL}: mage.go $(wildcard magefiles/*.go) go.mod
@echo "Building build tool $@"
@go run mage.go -compile "${BUILDTOOL_PATH}"
# NOTE: these database migration commands are just for reference / debugging /
# development purposes. Flamenco Manager and Worker each perform their own
# migration at startup. In normal use, you'll never need those commands. This is
# also why the `with-deps` target doesn't install the Goose CLI program.
#
# Run `go install github.com/pressly/goose/v3/cmd/goose@latest` to install.
db-migrate-status:
goose -dir ./internal/manager/persistence/migrations/ sqlite3 flamenco-manager.sqlite status
db-migrate-up:
goose -dir ./internal/manager/persistence/migrations/ sqlite3 flamenco-manager.sqlite up
db-migrate-down:
goose -dir ./internal/manager/persistence/migrations/ sqlite3 flamenco-manager.sqlite down
.PHONY: db-migrate-status db-migrate-up db-migrate-down
webapp-static: buildtool
"${BUILDTOOL_PATH}" webappStatic
install-generators: buildtool
"${BUILDTOOL_PATH}" installGenerators
generate: buildtool
"${BUILDTOOL_PATH}" generate
generate-go: buildtool
"${BUILDTOOL_PATH}" generateGo
generate-py: buildtool
"${BUILDTOOL_PATH}" generatePy
generate-js: buildtool
"${BUILDTOOL_PATH}" generateJS
.PHONY:
update-version:
@echo "--- Updating Flamenco version to ${VERSION}"
@echo "--- If this stops with exit status 42, it was already at that version."
@echo
go run ./cmd/update-version ${VERSION} ${RELEASE_CYCLE}
$(MAKE) generate-py
$(MAKE) generate-js
@echo
@echo 'File replacement done, commit with:'
@echo
@echo git commit -m '"Bumped version to ${VERSION}"' Makefile \
addon/flamenco/__init__.py \
addon/flamenco/manager \
addon/flamenco/manager_README.md \
magefiles/version.go \
web/app/src/manager-api \
web/project-website/data/flamenco.yaml
@echo 'git tag -a -m "Tagged version ${VERSION}" v${VERSION}'
version:
@echo "Package : ${PKG}"
@echo "Version : ${VERSION}"
@echo "Git Hash : ${GITHASH}"
@echo -n "GOOS : "; go env GOOS
@echo -n "GOARCH : "; go env GOARCH
@echo
@env | grep GO
list-embedded:
@go list -f '{{printf "%10s" .Name}}: {{.EmbedFiles}}' ${PKG}/...
swagger-ui:
git clone --depth 1 https://github.com/swagger-api/swagger-ui.git tmp-swagger-ui
rm -rf pkg/api/static/swagger-ui
mv tmp-swagger-ui/dist pkg/api/static/swagger-ui
rm -rf tmp-swagger-ui
@echo
@echo 'Now update pkg/api/static/swagger-ui/index.html to have url: "/api/openapi3.json",'
test: buildtool
"${BUILDTOOL_PATH}" test
clean: buildtool
"${BUILDTOOL_PATH}" clean
devserver-website:
go run ${HUGO_PKG} -s web/project-website serve
devserver-webapp: buildtool
"${BUILDTOOL_PATH}" devServerWebapp
format: buildtool
"${BUILDTOOL_PATH}" format
format-check: buildtool
"${BUILDTOOL_PATH}" formatCheck
deploy-website:
$(MAKE) -s check-environment
rm -rf web/project-website/public/
go run ${HUGO_PKG} -s web/project-website --baseURL https://flamenco.blender.org/
rsync web/project-website/public/ ${WEBSERVER_SSH}:${WEBSERVER_ROOT}/ \
-e "ssh -p ${WEBSERVER_SSH_PORT}" \
-rl \
--exclude v2/ \
--exclude downloads/ \
--exclude .well-known/ \
--exclude .htaccess \
--delete-after
# For production deployments: check variables stored in .env
.PHONY: check-environment
check-environment:
ifndef WEBSERVER_SSH
@echo "WEBSERVER_SSH not found. Check .env or .env.example"
exit 1
endif
ifndef WEBSERVER_ROOT
@echo "WEBSERVER_ROOT not found. Check .env or .env.example"
exit 1
endif
# Download & install FFmpeg in the 'tools' directory for supported platforms.
.PHONY: tools
tools:
$(MAKE) -s tools-linux
$(MAKE) -s tools-darwin
$(MAKE) -s tools-windows
# FFmpeg version to bundle.
FFMPEG_VERSION=7.0.2
TOOLS=./tools
TOOLS_DOWNLOAD=./tools/download
FFMPEG_PACKAGE_LINUX=$(TOOLS_DOWNLOAD)/ffmpeg-$(FFMPEG_VERSION)-linux-amd64-static.tar.xz
FFMPEG_PACKAGE_DARWIN=$(TOOLS_DOWNLOAD)/ffmpeg-$(FFMPEG_VERSION)-darwin-amd64.zip
FFMPEG_PACKAGE_WINDOWS=$(TOOLS_DOWNLOAD)/ffmpeg-$(FFMPEG_VERSION)-windows-amd64.zip
.PHONY: tools-linux
tools-linux:
[ -e $(FFMPEG_PACKAGE_LINUX) ] || curl \
--create-dirs -o $(FFMPEG_PACKAGE_LINUX) \
https://www.johnvansickle.com/ffmpeg/releases/ffmpeg-$(FFMPEG_VERSION)-amd64-static.tar.xz
tar xvf \
$(FFMPEG_PACKAGE_LINUX) \
ffmpeg-$(FFMPEG_VERSION)-amd64-static/ffmpeg
mv ffmpeg-$(FFMPEG_VERSION)-amd64-static/ffmpeg $(TOOLS)/ffmpeg-linux-amd64
rmdir ffmpeg-$(FFMPEG_VERSION)-amd64-static
.PHONY: tools-darwin
tools-darwin:
[ -e $(FFMPEG_PACKAGE_DARWIN) ] || curl \
--create-dirs -o $(FFMPEG_PACKAGE_DARWIN) \
https://evermeet.cx/ffmpeg/ffmpeg-$(FFMPEG_VERSION).zip
unzip $(FFMPEG_PACKAGE_DARWIN)
mv ffmpeg $(TOOLS)/ffmpeg-darwin-amd64
.PHONY: tools-windows
tools-windows:
[ -e $(FFMPEG_PACKAGE_WINDOWS) ] || curl \
--create-dirs -o $(FFMPEG_PACKAGE_WINDOWS) \
https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-$(FFMPEG_VERSION)-essentials_build.zip
unzip -j $(FFMPEG_PACKAGE_WINDOWS) ffmpeg-$(FFMPEG_VERSION)-essentials_build/bin/ffmpeg.exe -d .
mv ffmpeg.exe $(TOOLS)/ffmpeg-windows-amd64.exe
RELEASE_PACKAGE_LINUX_BASE := flamenco-${VERSION}-linux-amd64
RELEASE_PACKAGE_LINUX := ${RELEASE_PACKAGE_LINUX_BASE}.tar.gz
RELEASE_PACKAGE_DARWIN_BASE := flamenco-${VERSION}-macos-amd64
RELEASE_PACKAGE_DARWIN := ${RELEASE_PACKAGE_DARWIN_BASE}.tar.gz
RELEASE_PACKAGE_DARWIN_ARM64_BASE := flamenco-${VERSION}-macos-arm64
RELEASE_PACKAGE_DARWIN_ARM64 := ${RELEASE_PACKAGE_DARWIN_ARM64_BASE}.tar.gz
RELEASE_PACKAGE_WINDOWS_BASE := flamenco-${VERSION}-windows-amd64
RELEASE_PACKAGE_WINDOWS := ${RELEASE_PACKAGE_WINDOWS_BASE}.zip
RELEASE_PACKAGE_EXTRA_FILES := README.md LICENSE CHANGELOG.md
RELEASE_PACKAGE_SHAFILE := flamenco-${VERSION}.sha256
.PHONY: release-package
release-package:
$(MAKE) -s vet
$(MAKE) -s release-package-linux
$(MAKE) -s release-package-darwin
$(MAKE) -s release-package-windows
$(MAKE) -s clean
.PHONY: release-package-linux
release-package-linux:
$(MAKE) -s clean
$(MAKE) -s webapp-static
$(MAKE) -s flamenco-manager-without-webapp GOOS=linux GOARCH=amd64
$(MAKE) -s flamenco-worker GOOS=linux GOARCH=amd64
$(MAKE) -s tools-linux
mkdir -p dist/${RELEASE_PACKAGE_LINUX_BASE}/tools
cp flamenco-manager flamenco-worker ${RELEASE_PACKAGE_EXTRA_FILES} dist/${RELEASE_PACKAGE_LINUX_BASE}
cp tools/*-linux* dist/${RELEASE_PACKAGE_LINUX_BASE}/tools
cd dist; tar zcvf ${RELEASE_PACKAGE_LINUX} ${RELEASE_PACKAGE_LINUX_BASE}
rm -rf dist/${RELEASE_PACKAGE_LINUX_BASE}
@echo "Done! Created ${RELEASE_PACKAGE_LINUX}"
.PHONY: release-package-darwin
release-package-darwin:
$(MAKE) -s clean
$(MAKE) -s webapp-static
# AMD64
$(MAKE) -s flamenco-manager-without-webapp GOOS=darwin GOARCH=amd64
$(MAKE) -s flamenco-worker GOOS=darwin GOARCH=amd64
$(MAKE) -s tools-darwin
mkdir -p dist/${RELEASE_PACKAGE_DARWIN_BASE}/tools
cp flamenco-manager flamenco-worker ${RELEASE_PACKAGE_EXTRA_FILES} dist/${RELEASE_PACKAGE_DARWIN_BASE}
cp tools/*-darwin* dist/${RELEASE_PACKAGE_DARWIN_BASE}/tools
cd dist; tar zcvf ${RELEASE_PACKAGE_DARWIN} ${RELEASE_PACKAGE_DARWIN_BASE}
rm -rf dist/${RELEASE_PACKAGE_DARWIN_BASE}
# ARM64, without tools because ffmpeg.org doesn't link to any official ARM64 binary.
$(MAKE) -s flamenco-manager-without-webapp GOOS=darwin GOARCH=arm64
$(MAKE) -s flamenco-worker GOOS=darwin GOARCH=arm64
mkdir -p dist/${RELEASE_PACKAGE_DARWIN_ARM64_BASE}/tools
echo "Put an ffmpeg executable in this directory so that Flamenco Worker can find it" > dist/${RELEASE_PACKAGE_DARWIN_ARM64_BASE}/tools/put_ffmpeg_here.txt
cp flamenco-manager flamenco-worker ${RELEASE_PACKAGE_EXTRA_FILES} dist/${RELEASE_PACKAGE_DARWIN_ARM64_BASE}
cd dist; tar zcvf ${RELEASE_PACKAGE_DARWIN_ARM64} ${RELEASE_PACKAGE_DARWIN_ARM64_BASE}
rm -rf dist/${RELEASE_PACKAGE_DARWIN_ARM64_BASE}
@echo "Done! Created ${RELEASE_PACKAGE_DARWIN} and ${RELEASE_PACKAGE_DARWIN_ARM64}"
.PHONY: release-package-windows
release-package-windows:
$(MAKE) -s clean
$(MAKE) -s webapp-static
$(MAKE) -s flamenco-manager-without-webapp GOOS=windows GOARCH=amd64
$(MAKE) -s flamenco-worker GOOS=windows GOARCH=amd64
$(MAKE) -s tools-windows
mkdir -p dist/${RELEASE_PACKAGE_WINDOWS_BASE}/tools
cp flamenco-manager.exe flamenco-worker.exe ${RELEASE_PACKAGE_EXTRA_FILES} dist/${RELEASE_PACKAGE_WINDOWS_BASE}
cp tools/*-windows* dist/${RELEASE_PACKAGE_WINDOWS_BASE}/tools
rm -f dist/${RELEASE_PACKAGE_WINDOWS} # Don't update any existing ZIP.
cd dist/${RELEASE_PACKAGE_WINDOWS_BASE}; zip -r -9 ../${RELEASE_PACKAGE_WINDOWS} flamenco-manager.exe flamenco-worker.exe ${RELEASE_PACKAGE_EXTRA_FILES} tools/*-windows*
rm -rf dist/${RELEASE_PACKAGE_WINDOWS_BASE}
@echo "Done! Created ${RELEASE_PACKAGE_WINDOWS}"
.PHONY: publish-release-packages
publish-release-packages:
$(MAKE) -s check-environment
cd dist; sha256sum ${RELEASE_PACKAGE_LINUX} ${RELEASE_PACKAGE_DARWIN} ${RELEASE_PACKAGE_DARWIN_ARM64} ${RELEASE_PACKAGE_WINDOWS} > ${RELEASE_PACKAGE_SHAFILE}
cd dist; rsync -va -e "ssh -p ${WEBSERVER_SSH_PORT}" \
${RELEASE_PACKAGE_LINUX} ${RELEASE_PACKAGE_DARWIN} ${RELEASE_PACKAGE_DARWIN_ARM64} ${RELEASE_PACKAGE_WINDOWS} ${RELEASE_PACKAGE_SHAFILE} \
${WEBSERVER_SSH}:${WEBSERVER_ROOT}/downloads/
.PHONY: application version flamenco-manager flamenco-worker webapp webapp-static generate generate-go generate-py with-deps swagger-ui list-embedded test clean flamenco-manager-without-webapp format format-check