1export NODE_NO_WARNINGS := "1"
2
3
4BUILD_DIR := "./dist"
5NPM_DIR := "./node_modules"
6SRC_DIR := "./src"
7SYSTEM_DIR := "./system"
8
9ESBUILD := "node system/Js/esbuild.mjs"
10ELM_REVIEW := NPM_DIR + "/.bin/elm-review " + SRC_DIR + " --config system/Review --compiler " + NPM_DIR + "/.bin/elm --elm-format-path " + NPM_DIR + "/.bin/elm-format"
11
12
13default: dev
14
15
16# Tasks
17# =====
18
19@build: clean css elm copy-wasm js system license
20 echo "> Build completed ⚡"
21
22
23@build-prod: quality clean (css "minify") elm-prod copy-wasm js-prod system license
24 echo "> Production build completed 🛳"
25
26
27check-versions:
28 #!/usr/bin/env node
29 console.log("> Checking version numbers 🧮")
30 const pwd = "{{invocation_directory()}}"
31
32 const package = require(`${pwd}/package.json`)
33 const manifest = require(`${pwd}/src/Static/Manifests/manifest.json`)
34
35 if (package.version !== manifest.version) {
36 console.error(`The version from package.json doesn't match the one from the app manifest. The package version is '${package.version}' and the manifest version is '${manifest.version}'.`)
37 process.exit(1)
38 }
39
40
41@clean:
42 echo "> Cleaning build directory"
43 rm -rf {{BUILD_DIR}} || true
44 mkdir -p {{BUILD_DIR}}
45
46
47@copy-wasm:
48 echo "> Copying WASM files"
49 mkdir -p {{BUILD_DIR}}/wasm
50 cp {{NPM_DIR}}/mediainfo.js/dist/MediaInfoModule.wasm {{BUILD_DIR}}/wasm/media-info.wasm
51
52
53@css minify="false":
54 echo "{{ if minify == "minify" { "> Compiling CSS (optimised)" } else { "> Compiling CSS" } }}"
55
56 {{NPM_DIR}}/.bin/tailwind \
57 --input {{SRC_DIR}}/Css/About.css \
58 --output {{BUILD_DIR}}/about.css \
59 --content {{SRC_DIR}}/Static/About/**/*.* \
60 --config {{SYSTEM_DIR}}/Css/Tailwind.js \
61 --postcss {{SYSTEM_DIR}}/Css/PostCSS.js \
62 --jit \
63 {{ if minify == "minify" { "--minify" } else { "" } }}
64
65 {{NPM_DIR}}/.bin/tailwind \
66 --input {{SRC_DIR}}/Css/Application.css \
67 --output {{BUILD_DIR}}/application.css \
68 --content "{{SRC_DIR}}/Static/Html/**/*.*,{{SRC_DIR}}/Core/Themes/**/*.elm,{{SRC_DIR}}/Core/UI/**/*.elm,{{SRC_DIR}}/Core/UI.elm,{{SRC_DIR}}/Library/**/*.elm,{{SRC_DIR}}/Javascript/**/*.ts" \
69 --config {{SYSTEM_DIR}}/Css/Tailwind.js \
70 --postcss {{SYSTEM_DIR}}/Css/PostCSS.js \
71 --jit \
72 {{ if minify == "minify" { "--minify" } else { "" } }}
73
74
75@elm:
76 echo "> Compiling Elm application"
77 {{NPM_DIR}}/.bin/elm make {{SRC_DIR}}/Core/Brain.elm --output {{BUILD_DIR}}/js/brain.elm.js
78 {{NPM_DIR}}/.bin/elm make {{SRC_DIR}}/Core/UI.elm --output {{BUILD_DIR}}/js/ui.elm.js
79
80
81@elm-prod:
82 echo "> Compiling Elm application (optimised)"
83 {{NPM_DIR}}/.bin/elm make {{SRC_DIR}}/Core/Brain.elm --output {{BUILD_DIR}}/js/brain.elm.js --optimize
84 {{NPM_DIR}}/.bin/elm make {{SRC_DIR}}/Core/UI.elm --output {{BUILD_DIR}}/js/ui.elm.js --optimize
85
86 {{NPM_DIR}}/.bin/esbuild {{BUILD_DIR}}/js/brain.elm.js \
87 --minify --outfile={{BUILD_DIR}}/js/brain.elm.tmp.js
88
89 {{NPM_DIR}}/.bin/esbuild {{BUILD_DIR}}/js/ui.elm.js \
90 --minify --outfile={{BUILD_DIR}}/js/ui.elm.tmp.js
91
92 rm {{BUILD_DIR}}/js/brain.elm.js
93 mv {{BUILD_DIR}}/js/brain.elm.tmp.js {{BUILD_DIR}}/js/brain.elm.js
94 rm {{BUILD_DIR}}/js/ui.elm.js
95 mv {{BUILD_DIR}}/js/ui.elm.tmp.js {{BUILD_DIR}}/js/ui.elm.js
96
97
98js:
99 #!/usr/bin/env bash
100 build_timestamp="`date '+%s'`"
101 echo "> Compiling Javascript code"
102
103 # Workers
104 {{ESBUILD}} ./src/Javascript/Workers/search.ts \
105 --outfile={{BUILD_DIR}}/search.js
106
107 {{ESBUILD}} ./src/Javascript/Workers/service.ts \
108 --outfile={{BUILD_DIR}}/service-worker.js \
109 --define:BUILD_TIMESTAMP=$build_timestamp
110
111 {{ESBUILD}} ./src/Javascript/Brain/index.ts \
112 --outdir={{BUILD_DIR}}/js/brain/ \
113 --splitting \
114 --alias:brain.elm.js={{BUILD_DIR}}/js/brain.elm.js \
115 --inject:./system/Js/node-shims.js \
116 --alias:node:buffer=buffer/ \
117 --alias:node:stream=stream
118
119 # Main
120 {{ESBUILD}} ./src/Javascript/UI/index.ts \
121 --outdir={{BUILD_DIR}}/js/ui/ \
122 --define:BUILD_TIMESTAMP=$build_timestamp \
123 --splitting \
124 --alias:node:buffer=buffer/ \
125 --alias:node:stream=stream
126
127
128js-prod:
129 #!/usr/bin/env bash
130 build_timestamp="`date '+%s'`"
131 echo "> Compiling Javascript code (optimised)"
132
133 # Workers
134 {{ESBUILD}} ./src/Javascript/Workers/search.ts \
135 --minify \
136 --outfile={{BUILD_DIR}}/search.js
137
138 {{ESBUILD}} ./src/Javascript/Workers/service.ts \
139 --minify \
140 --outfile={{BUILD_DIR}}/service-worker.js \
141 --define:BUILD_TIMESTAMP=$build_timestamp
142
143 {{ESBUILD}} ./src/Javascript/Brain/index.ts \
144 --outdir={{BUILD_DIR}}/js/brain/ \
145 --splitting \
146 --minify \
147 --alias:brain.elm.js={{BUILD_DIR}}/js/brain.elm.js \
148 --inject:./system/Js/node-shims.js \
149 --alias:node:buffer=buffer/ \
150 --alias:node:stream=stream
151
152 # Main
153 {{ESBUILD}} ./src/Javascript/UI/index.ts \
154 --outdir={{BUILD_DIR}}/js/ui/ \
155 --define:BUILD_TIMESTAMP=$build_timestamp \
156 --splitting \
157 --minify \
158 --alias:node:buffer=buffer/ \
159 --alias:node:stream=stream
160
161
162@license:
163 echo "> Copying license file"
164 cp LICENSE {{BUILD_DIR}}/LICENSE
165
166
167@system:
168 echo "> Compiling system"
169 {{NPM_DIR}}/.bin/gren make system/Build/Build.gren
170 node app
171 rm app
172
173
174
175#
176# Dev tasks
177#
178
179@dev: build
180 just watch & just server
181
182
183@doc-tests:
184 echo "> Running documentation tests"
185 ( cd src && \
186 find . -name "*.elm" -print0 | \
187 xargs -0 -n 1 -I % sh -c 'elm-proofread -- % || exit 255; echo "\n\n"' \
188 )
189
190
191@elm-format:
192 echo "> Running elm-format"
193 {{NPM_DIR}}/.bin/elm-format {{SRC_DIR}} --yes
194
195
196@elm-housekeeping: elm-format elm-review
197
198
199@elm-review:
200 echo "> Running elm-review"
201 {{ELM_REVIEW}} --fix-all
202
203
204@quality: check-versions
205 echo "> Running es-lint"
206 {{NPM_DIR}}/.bin/eslint src/Javascript/**/*
207 echo "> Running elm-review"
208 {{ELM_REVIEW}}
209
210
211@server:
212 echo "> Booting up web server on port 8000"
213 {{NPM_DIR}}/.bin/serve {{BUILD_DIR}} -p 8000 --no-request-logging
214
215
216@test: doc-tests
217
218
219@watch:
220 echo "> Watching"
221 just watch-css & just watch-elm & just watch-js & just watch-system
222
223
224@watch-css:
225 watchexec -p -w {{SRC_DIR}}/Css -w {{SYSTEM_DIR}}/Css -- just css js
226
227
228@watch-elm:
229 watchexec -p -w {{SRC_DIR}} -e elm -- just elm js css
230
231
232@watch-js:
233 watchexec -p -w {{SRC_DIR}} -e js,ts -- just js
234
235
236@watch-system:
237 watchexec -p --ignore *.elm --ignore *.js --ignore *.ts --ignore *.css --ignore src-tauri/** -- just system js