Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
445 lines (343 loc) · 14.7 KB
/
Copy pathMakefile
File metadata and controls
445 lines (343 loc) · 14.7 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
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
.PHONY: android-check android-physical-evidence-check harmonyos-check harmonyos-contract-check native-contract-check build build-ts release-build check test test-integrations test-types test-typing-check test-namespace-js test-wasm-browsers wasm-contracts-check namespace-surface-check public-type-docs-check assert-policy-check error-policy-check dollar-prefixed-api-check private-method-check internal-composition-check internal-composition-report types generated-check integrations-generated-check generated-check-android generated-check-harmonyos generated-check-closure generated-check-dart generated-check-gleam generated-check-kotlin generated-check-scala generated-check-wasm-contracts generated-check-wasm-go generated-check-wasm-rust generated-check-wasm-assemblyscript generated-check-wasm-c generated-check-wasm-cpp generated-check-wasm-csharp generated-check-wasm-zig public-namespace-api update-public-namespace-api docs-examples-check docs-runtime-api-check docs-type-links-check docs-snippets-check docs-learning-check docs-requirement doc coverage coverage-check coverage-update-baseline coverage-open setup ensure-deps ensure-docs-deps lint lint-check lint-fix format-check version-check release-version-test release-notes-test release-notes-check release-integrations-check release-check prepare-major-release prepare-minor-release prepare-patch-release prepare-release publish-release published-maven-check published-maven-check-test underscore-property-key-check wasm-parity scala-check vscode-build vscode-test vscode-smoke mcp-contract-check hugo
BUILD_DIR = ./dist
TS_BUILD_DIR = ./.build
MIN_JS := dist/angular-ts.umd.min.js
GZ_JS := $(MIN_JS).gz
CLOSURE_EXTERNS := integrations/closure/externs/angular.js
DIST_CLOSURE_EXTERNS := $(BUILD_DIR)/externs/angular.js
setup:
@rm -rf ./node_modules/
@npm ci
@npx playwright install
ensure-deps:
@if [ ! -d ./node_modules ]; then \
echo "Installing dependencies..."; \
npm ci; \
fi
ensure-docs-deps:
@if [ ! -d ./docs/node_modules ]; then \
echo "Installing docs dependencies..."; \
cd docs && npm ci; \
fi
ensure-vscode-deps:
@if [ ! -d ./tools/vscode/node_modules ]; then \
echo "Installing VS Code extension dependencies..."; \
cd tools/vscode && npm ci; \
fi
build: ensure-deps
@node integrations/closure/scripts/validate-externs.mjs
@./node_modules/.bin/tsc --project tsconfig.build.json
build-ts: build
release-build: build
@if [ -d "$(BUILD_DIR)" ]; then \
echo "Removing $(BUILD_DIR)..."; \
rm -r "$(BUILD_DIR)"; \
fi
@./node_modules/.bin/rollup -c
@node utils/check-default-bundle-boundaries.mjs
@mkdir -p "$(BUILD_DIR)/externs"
@cp "$(CLOSURE_EXTERNS)" "$(DIST_CLOSURE_EXTERNS)"
@node -e 'const fs=require("fs"); const pkg=JSON.parse(fs.readFileSync("package.json","utf8")); const file="$(DIST_CLOSURE_EXTERNS)"; fs.writeFileSync(file, fs.readFileSync(file,"utf8").replaceAll("[VI]{version}[/VI]", pkg.version));'
@$(MAKE) gzip
size:
@$(MAKE) release-build >/dev/null
@echo "Minified build output: $$(stat -c %s dist/angular-ts.umd.min.js) ~ $$(stat -c %s dist/angular-ts.umd.min.js | numfmt --to=iec)"
@echo "Expected gzip: $$(gzip -c dist/angular-ts.umd.min.js | wc -c) ~ $$(gzip -c dist/angular-ts.umd.min.js | wc -c | numfmt --to=iec)"
@git checkout -q $(BUILD_DIR)
@git checkout -q ./docs
@echo "Current build output: $$(stat -c %s dist/angular-ts.umd.min.js) ~ $$(stat -c %s dist/angular-ts.umd.min.js | numfmt --to=iec)"
@echo "Current gzip: $$(gzip -c dist/angular-ts.umd.min.js | wc -c) ~ $$(gzip -c dist/angular-ts.umd.min.js | wc -c | numfmt --to=iec)"
$(GZ_JS): $(MIN_JS)
@gzip -9 -n -c $< > $@
gzip: $(GZ_JS)
@echo "Created gzipped file: $(GZ_JS)"
size-html:
@printf 'Bundle size: <b>%s</b> Gzip size: <b>%s</b>' \
"$(shell stat -c %s dist/angular-ts.umd.min.js | numfmt --to=iec)" \
"$(shell gzip -c dist/angular-ts.umd.min.js | wc -c | numfmt --to=iec)" \
> docs/layouts/shortcodes/size-report.html
version:
@node utils/version.cjs
version-check:
@node utils/version.cjs --check
format:
@npx prettier ./src --write --cache --log-level=silent
format-check:
@npx prettier ./src --check --cache --log-level=silent
@$(MAKE) -C integrations/android format-check
lint:
@$(MAKE) lint-check
lint-check: ensure-deps
@npx eslint ./src --max-warnings=0
lint-fix: ensure-deps
@npx eslint ./src --fix
vscode-build: ensure-vscode-deps
@cd tools/vscode && npm run build
vscode-test: ensure-vscode-deps
@cd tools/vscode && npm test
vscode-smoke: ensure-vscode-deps
@cd tools/vscode && npm run test:smoke
mcp-contract-check:
@node tools/mcp/scripts/contract-check.mjs
underscore-property-key-check:
@node ./utils/check-underscore-property-keys.mjs
dollar-prefixed-api-check:
@node ./utils/check-dollar-prefixed-api.mjs
private-method-check:
@node ./utils/check-private-methods.mjs
assert-policy-check:
@node ./utils/check-assert-policy.mjs
error-policy-check:
@node ./utils/check-error-policy.mjs
internal-composition-check:
@node ./utils/check-internal-composition.mjs
internal-composition-report:
@node ./utils/check-internal-composition.mjs --json
check: ensure-deps
@$(MAKE) lint-check
@$(MAKE) release-notes-test
@$(MAKE) underscore-property-key-check
@$(MAKE) internal-composition-check
@$(MAKE) generated-check
@$(MAKE) dollar-prefixed-api-check
@$(MAKE) private-method-check
@$(MAKE) assert-policy-check
@$(MAKE) error-policy-check
@echo "Typechecking source"
./node_modules/.bin/tsc
@$(MAKE) test-types
@$(MAKE) test-namespace-js
@$(MAKE) wasm-parity
@$(MAKE) docs-examples-check
@$(MAKE) docs-runtime-api-check
@$(MAKE) docs-type-links-check
@$(MAKE) docs-snippets-check
@$(MAKE) docs-snippet-tests-check
@$(MAKE) docs-learning-check
test-typing-check: ensure-deps
@node --test utils/check-test-typing.test.mjs
@node utils/check-test-typing.mjs
test-types: ensure-deps test-typing-check
@echo "Typechecking tests"
./node_modules/.bin/tsc --project tsconfig.test.json
test-namespace-js: types
@echo "Typechecking JavaScript namespace consumer"
./node_modules/.bin/tsc --project tsconfig.namespace-js.json
@$(MAKE) namespace-surface-check
namespace-surface-check:
@node ./utils/check-namespace-surface.mjs
docs-examples-check: ensure-deps
@echo "Checking docs example API references"
@node ./utils/check-docs-examples.mjs
docs-runtime-api-check: ensure-deps
@echo "Checking documentation runtime/API alignment"
@node ./utils/check-docs-runtime-api.mjs
docs-type-links-check:
@echo "Checking documentation TypeDoc links"
@node ./utils/check-docs-type-links.mjs
docs-snippets-check:
@echo "Checking documentation snippet style"
@node ./utils/check-docs-snippets.mjs
.PHONY: docs-snippet-tests-check
docs-snippet-tests-check:
@echo "Checking documentation snippet test coverage"
@node ./utils/check-docs-tested-snippets.mjs
docs-learning-check:
@echo "Checking beginner documentation structure"
@node ./utils/check-docs-learning.mjs
public-type-docs-check:
@node ./utils/check-public-type-docs.mjs
docs-requirement: generated-check docs-examples-check docs-runtime-api-check docs-type-links-check docs-snippets-check docs-snippet-tests-check docs-learning-check doc public-type-docs-check
@echo "Documentation requirement artifacts refreshed."
release-notes-test:
@node --test utils/extract-release-notes.test.mjs
release-version-test:
@node --test utils/prepare-release-version.test.cjs
release-notes-check: release-notes-test
@node utils/extract-release-notes.mjs \
"$$(node -p 'require("./package.json").version')" >/dev/null
include utils/benchmarks/benchmarks.mk
types: ensure-deps
@echo "Generating *.d.ts"
@rm -rf @types
@./node_modules/.bin/tsc --project tsconfig.types.json
@npx prettier ./@types --write --cache --log-level=silent
generated-check: integrations-generated-check
integrations-generated-check: types
@node --test integrations/shared/typescript-signatures.test.mjs
@$(MAKE) --keep-going --jobs=8 --output-sync=target \
generated-check-android \
generated-check-harmonyos \
generated-check-closure \
generated-check-dart \
generated-check-gleam \
generated-check-kotlin \
generated-check-scala \
generated-check-wasm-contracts \
generated-check-wasm-go \
generated-check-wasm-rust \
generated-check-wasm-assemblyscript \
generated-check-wasm-c \
generated-check-wasm-cpp \
generated-check-wasm-csharp \
generated-check-wasm-zig
generated-check-android:
@$(MAKE) -C integrations/android generate-check
generated-check-harmonyos:
@$(MAKE) -C integrations/harmonyos contract-check
native-contract-check:
@node --test integrations/native/scripts/native-elements-schema.test.mjs
@node --test integrations/native/scripts/native-capabilities-schema.test.mjs
@node --test integrations/native/scripts/native-protocol-schema.test.mjs
@node integrations/native/scripts/check-platform-matrix.mjs
harmonyos-contract-check:
@$(MAKE) -C integrations/harmonyos contract-check
harmonyos-check:
@$(MAKE) -C integrations/harmonyos check
generated-check-closure:
@$(MAKE) -f integrations/closure/Makefile generate-check
generated-check-dart:
@$(MAKE) -C integrations/dart generate-check
generated-check-gleam:
@$(MAKE) -C integrations/gleam generate-check
generated-check-kotlin:
@$(MAKE) -C integrations/kotlin generate-check-local
generated-check-scala:
@node integrations/scala/tool/generate_ng_namespace_parity.mjs --check
@node integrations/scala/tool/check_ng_namespace_parity.mjs
generated-check-wasm-contracts:
@$(MAKE) wasm-contracts-check
generated-check-wasm-go:
@$(MAKE) -C integrations/wasm/go generate-check
generated-check-wasm-rust:
@$(MAKE) -C integrations/wasm/rust generate-check
generated-check-wasm-assemblyscript:
@$(MAKE) -C integrations/wasm/assemblyscript generate-check
generated-check-wasm-c:
@$(MAKE) -C integrations/wasm/c generate-check
generated-check-wasm-cpp:
@$(MAKE) -C integrations/wasm/cpp generate-check
generated-check-wasm-csharp:
@$(MAKE) -C integrations/wasm/csharp generate-check
generated-check-wasm-zig:
@$(MAKE) -C integrations/wasm/zig generate-check
public-namespace-api: types
@$(MAKE) -f integrations/closure/Makefile closure-generate
update-public-namespace-api: public-namespace-api
TYPEDOC_DIR = docs/static/typedoc
doc: ensure-deps
@rm -rf $(TYPEDOC_DIR)
@node_modules/.bin/typedoc
@npx prettier ./typedoc --write
@mv typedoc $(TYPEDOC_DIR)
serve: ensure-deps
@node_modules/.bin/vite --config utils/vite.config.js & \
(cd utils/server && go run .) & \
wait
prepare-major-release prepare-minor-release prepare-patch-release: release-version-test
@node utils/prepare-release-version.cjs $(patsubst prepare-%-release,%,$@)
@$(MAKE) prepare-release
prepare-release: release-version-test release-notes-check
@$(MAKE) format-check
@$(MAKE) version
@$(MAKE) release-build
@$(MAKE) -C integrations/harmonyos generate
@$(MAKE) docs-requirement
@$(MAKE) size-html
@$(MAKE) release-check
release-integrations-check:
@$(MAKE) -C integrations/harmonyos check
@$(MAKE) -C integrations/android release-check
@PORT=41100 $(MAKE) -f integrations/closure/Makefile closure-test
@PORT=41101 $(MAKE) -f integrations/closure/Makefile clojurescript-test
@PORT=41102 $(MAKE) -C integrations/kotlin check
@PORT=41103 $(MAKE) -C integrations/scala release-check
@PORT=41104 $(MAKE) -C integrations/dart release-check
@$(MAKE) -C integrations/gleam release-check
@PORT=41105 $(MAKE) -C integrations/wasm/csharp local-ci-check
@$(MAKE) -C integrations/wasm/rust parity
release-check: release-version-test release-notes-check
@bash .husky/pre-commit
@npm pack --dry-run
@$(MAKE) release-integrations-check
android-physical-evidence-check:
@node integrations/android/scripts/verify-physical-release-evidence.mjs
publish-release:
@test -z "$$(git status --porcelain)" || \
(echo "Refusing to release from a dirty worktree." >&2; exit 1)
@git fetch origin master
@test "$$(git rev-parse HEAD)" = "$$(git rev-parse origin/master)" || \
(echo "Refusing to release: HEAD does not match origin/master." >&2; exit 1)
@$(MAKE) release-check
@test -z "$$(git status --porcelain)" || \
(echo "Refusing to release: validation changed tracked files." >&2; exit 1)
@version="$$(node -p 'require("./package.json").version')"; \
tag="v$$version"; \
git tag -a "$$tag" -m "Version $$version" && \
git show --no-patch "$$tag" && \
git push origin "$$tag"
PUBLISHED_MAVEN_VERSION ?= $(shell node -p 'require("./package.json").version')
PUBLISHED_MAVEN_ARTIFACTS ?= java,clojurescript,scala,android
published-maven-check-test:
@node --test tool/check-published-maven-artifacts.test.mjs
published-maven-check: published-maven-check-test
@node tool/check-published-maven-artifacts.mjs \
--version "$(PUBLISHED_MAVEN_VERSION)" \
--artifacts "$(PUBLISHED_MAVEN_ARTIFACTS)"
check: published-maven-check-test
PLAYWRIGHT_TEST := npx playwright test
test: ensure-deps
@echo $(INFO) "Playwright test JS"
@$(PLAYWRIGHT_TEST)
@$(MAKE) test-integrations
test-integrations: ensure-deps
@echo $(INFO) "Playwright integration tests"
@$(MAKE) android-check
@$(MAKE) -f integrations/closure/Makefile closure-test
@$(MAKE) -C integrations/kotlin check
@$(MAKE) scala-check
@$(MAKE) wasm-parity
wasm-parity: ensure-deps
@$(MAKE) -C integrations/wasm/rust parity
scala-check: ensure-deps
@$(MAKE) -C integrations/scala check
android-check:
@$(MAKE) -C integrations/android check
test-ui: ensure-deps
@echo $(INFO) "Playwright test JS with ui"
@$(PLAYWRIGHT_TEST) --ui
test-wasm-browsers: ensure-deps
@$(PLAYWRIGHT_TEST) --config playwright.wasm.config.ts
wasm-contracts-check:
@node --test integrations/wasm/tool/generate-contract.test.mjs
@node integrations/wasm/tool/generate-contract.mjs \
integrations/wasm/contracts/player.json \
--out integrations/wasm/contracts/generated \
--check
coverage: ensure-deps
@echo $(INFO) "Playwright coverage"
@node ./utils/run-coverage.mjs --check
coverage-check:
@echo $(INFO) "Playwright coverage threshold check"
@$(MAKE) coverage
coverage-update-baseline: ensure-deps
@echo $(INFO) "Playwright coverage baseline update"
@node ./utils/run-coverage.mjs --update-baseline
coverage-open: ensure-deps
@echo $(INFO) "Open coverage report"
@node ./utils/open-coverage.mjs
hugo: ensure-docs-deps
cd docs && npm run _hugo-dev -- serve --disableFastRender --ignoreCache --noHTTPCache
.PHONY: docs-public-surface-check
docs-public-surface-check:
@echo "Checking public documentation surface parity"
@node utils/check-docs-public-surface.mjs
check: docs-public-surface-check
.PHONY: docs-links-check docs-tutorial-typecheck
docs-links-check:
@echo "Checking documentation links and fragments"
@node utils/check-docs-links.mjs
docs-tutorial-typecheck:
@echo "Typechecking executable documentation tutorial"
@./node_modules/.bin/tsc --project docs/examples/task-board/tsconfig.json
check: docs-links-check docs-tutorial-typecheck