-
-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathMakefile
More file actions
130 lines (100 loc) · 4.34 KB
/
Makefile
File metadata and controls
130 lines (100 loc) · 4.34 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
UNAME_S := $(shell uname -s)
SWIFT_FLAGS ?= --disable-sandbox
SWIFT_PACKAGE_VERSION := $(shell swift package tools-version)
ifdef GEMINI_CLI
XCS_FORMATTER = 2>&1 | mint run xcsift -w -W -c -f toon
endif
# Repository name on GitHub Pages
REPO_NAME ?= ecs
# Subdirectory for versioned documentation (e.g., main, 1.0.0)
DOCS_VERSION_PATH ?= main
# The full base path for hosting
HOSTING_BASE_PATH ?= $(REPO_NAME)/$(DOCS_VERSION_PATH)
.PHONY: setup lint lint-fix test test-coverage testReadme build-debug build-release docs docs-preview docs-generate docs-coverage docs-check-coverage docs-check-links preview-analysis-docs generate-docs-githubpages pre-commit clean
# --- Setup ---
setup:
@which -s brew || /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
@brew update
@echo "Detected Package Swift Version: $(SWIFT_PACKAGE_VERSION)"
@which mint > /dev/null || (echo "Mint not found. Installing via Homebrew..." && brew install mint)
mint bootstrap
swift package resolve $(SWIFT_FLAGS)
# --- Quality Assurance ---
lint:
mint run swiftlint lint --quiet Sources/ Tests/
mint run swiftformat --lint --swiftversion $(SWIFT_PACKAGE_VERSION) Sources/ Tests/
lint-fix:
mint run swiftformat --swiftversion $(SWIFT_PACKAGE_VERSION) --config .swiftformat Sources/ Tests/
mint run swiftlint --fix --config .swiftlint.yml --format --quiet Sources/ Tests/
# Run tests
test:
swift test $(SWIFT_FLAGS) --parallel --enable-code-coverage -Xswiftc -warnings-as-errors $(XCS_FORMATTER)
test-coverage:
$(MAKE) test
@XCTEST_PATH=$$(find .build -name "*.xctest" | grep "FirebladeECS" | head -n 1); \
if [ -z "$$XCTEST_PATH" ]; then \
echo "Could not find .xctest bundle"; \
exit 1; \
fi; \
if [ "$(UNAME_S)" = "Darwin" ]; then \
BINARY_PATH=$$(find "$$XCTEST_PATH" -type f -perm +111 | grep -v "CodeResources" | head -n 1); \
else \
BINARY_PATH="$$XCTEST_PATH/FirebladeECSPackageTests"; \
fi; \
xcrun llvm-cov report \
"$$BINARY_PATH" \
-instr-profile=.build/debug/codecov/default.profdata \
-ignore-filename-regex=".build|Tests"
# Test links in README
# requires <https://github.com/tcort/markdown-link-check>
testReadme:
markdown-link-check -p -v ./README.md
# --- Build ---
build-debug:
swift build -c debug $(XCS_FORMATTER)
build-release:
swift build -c release --skip-update $(XCS_FORMATTER)
# --- Documentation ---
docs: docs-generate
docs-preview:
swift package --disable-sandbox preview-documentation --target FirebladeECS
docs-generate:
mkdir -p .build/documentation/$(DOCS_VERSION_PATH)
swift package --disable-sandbox \
--allow-writing-to-directory .build/documentation \
generate-documentation --target FirebladeECS \
--disable-indexing \
--transform-for-static-hosting \
--hosting-base-path $(HOSTING_BASE_PATH) \
--output-path .build/documentation/$(DOCS_VERSION_PATH) $(XCS_FORMATTER)
DOCS_COVERAGE_THRESHOLD ?= 95
docs-coverage: docs-check-coverage
docs-check-coverage:
swift package --disable-sandbox generate-documentation --target FirebladeECS --experimental-documentation-coverage --coverage-summary-level brief $(XCS_FORMATTER)
docs-coverage-detailed:
swift package --disable-sandbox generate-documentation --target FirebladeECS --experimental-documentation-coverage --coverage-summary-level detailed $(XCS_FORMATTER)
docs-check-links:
swift package --disable-sandbox generate-documentation --target FirebladeECS --analyze --warnings-as-errors $(XCS_FORMATTER)
# Preview DocC documentation with analysis/warnings and overview of coverage
preview-analysis-docs:
swift package --disable-sandbox preview-documentation --target FirebladeECS --analyze --experimental-documentation-coverage --level brief
# Generates documentation pages suitable to push/host on github pages (or another static site)
# Expected location, if set up, would be:
# https://fireblade-engine.github.io/ecs/ -> https://fireblade-engine.github.io/ecs/main/documentation/firebladeecs/
generate-docs-githubpages:
DOCC_JSON_PRETTYPRINT=YES \
swift package \
--allow-writing-to-directory ./docs \
generate-documentation \
--fallback-bundle-identifier com.github.fireblade-engine.FirebladeECS \
--target FirebladeECS \
--output-path ./docs \
--transform-for-static-hosting \
--hosting-base-path '$(REPO_NAME)'
# --- Workflows ---
pre-commit: lint-fix test
# --- Cleanup ---
clean:
swift package clean
rm -rdf .build
rm -rdf .swiftpm