-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Expand file tree
/
Copy pathpyproject.toml
More file actions
314 lines (299 loc) · 12 KB
/
pyproject.toml
File metadata and controls
314 lines (299 loc) · 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
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
[project]
name = "ci"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
# Pin to fbuild 2.2.22 (released 2026-06-07). 2.2.22 brings the
# real NXP LPC Stage-2 build orchestrator (FastLED/fbuild#488,
# part of #487) — first step in honoring the LPC804/LPC845
# bare-metal coverage that was scaffolded back in 2.2.18 — plus
# the zccache floor bump 1.11.15 → 1.11.20 (FastLED/fbuild#489)
# which lines up with the FastLED #2891/#2967 zccache pin and
# matches what `ci/setup-zccache.py` now installs.
# Prior pins preserved for context:
# 2.2.21 — bloat per-symbol forward refs + bidirectional graph
# + dual-rank sub-table (FastLED/fbuild#470), cargo
# binary-locator fix (FastLED/fbuild#458), and the
# `symbol_analysis` split (FastLED/fbuild#474). The
# bloat changes layer on top of the `referenced_by`
# and graphviz `.dot` work landed in 2.2.20.
# 2.2.20 — ships the `fbuild symbols`/bloat subcommand that
# `ci/bloat.py` relies on — without it the FastLED
# #2886 Stage-6 regression gate cannot run.
# Specifically exposes linker --cref back-references
# as `referenced_by` (FastLED/fbuild#459/#460) and
# emits graphviz `.dot` back-reference graphs
# (FastLED/fbuild#463/#468). Also contains a cargo
# binary-locator fix (FastLED/fbuild#461), Stop-hook
# + pre-push hook polish (FastLED/fbuild#462/#464/
# #465/#467/#469), and the GH-Action release-flow
# rework (FastLED/fbuild#457). (No 2.2.19 release was
# tagged on GitHub; fbuild jumped 2.2.18 → 2.2.20.)
# 2.2.18 — FastLED #2836 Stage 1: LPC804/LPC845 bare-metal
# (FastLED/fbuild#419) + vendor-warning scopings
# (renesas FSP, nRF52 Adafruit BSP), the
# ESP32-S2/S3 USB_VID/USB_PID redef-warning fix
# (FastLED/fbuild#413), nested-example build-info
# parent-dir creation (FastLED/fbuild#410), a
# larger CLI Windows stack reservation, and the
# SAMD/STM32/ATmega/CH559 test-fixture coverage
# backing the validate_boards reconciliation
# (FastLED/fbuild#421/#422).
# 2.2.17 — routed ESP32-S3 native deploys through esptool
# (FastLED/fbuild#380), one of the user-visible
# failure modes tracked in FastLED #2700.
# 2.2.15 — Arduino UNO Q / STM32U5 board defaults; compile-
# many stage-2 framework-archive share
# (FastLED/fbuild#337) that prevents every stage-2
# sketch from re-building the framework from scratch
# (the regression that originally forced
# FASTLED_USE_FBUILD_CI=1 default-off in #2662);
# stage-2 jobs split (#336), real-toolchain stage-2
# perf regression test (#342), daemon-side
# fmt-tracing-to-stderr fix (#348), bounded zccache
# start-up timeout (#349), project-lock acquire
# instrumentation (#350) — together address the
# silent esp32c6 hang reported in fbuild#346 and
# unblock flipping FASTLED_USE_FBUILD_CI=1
# default-on; quoted Adafruit nRF52 BSP defines
# preserved in response files, unblocking nRF52840
# builds under fbuild.
# 2.2.16 — completed ESP32-C2 framework skeleton installs
# and patched the missing touch_sensor_legacy_types.h
# no-touch compatibility header (FastLED/fbuild#378).
"fbuild==2.2.22",
"platformio>=6.1.19,<6.2",
"python-dateutil",
"ruff",
"pyright>=1.1.373",
"types-python-dateutil",
"clang-format",
"pip",
"pytest",
"pytest-xdist",
"fpvgcc",
"uv",
"clang-tool-chain>=1.5.5",
# 1.11.18 (released 2026-06-06): drops the misleading
# "daemon-CLI protocol version mismatch" hint from the
# user-facing `lost connection to daemon (no response)` error.
# The hint was written before the thundering-herd fix (#674,
# 1.11.16) and pipe-pool wedge fix (#669, 1.11.15) landed and
# pointed users at a cause that is wrong in practice. New copy
# is centralized in `util::LOST_CONNECTION_MSG` and points users
# at `zccache status` first (zackees/zccache#678).
# 1.11.17 (released 2026-06-06): docs-only release that surfaces the
# ZCCACHE_PATH_REMAP env var in `zccache --help` (zackees/zccache#676).
# 1.11.16 (released 2026-06-06): adaptive daemon-spawn wait keyed on
# lockfile PID (zackees/zccache#674, closes #673) — eliminates the
# thundering-herd "daemon started but not accepting connections after
# 10s" wedge that hit our `clud-pr` parallel builds.
# 1.11.15 (released 2026-06-06): pipe-pool depletion + compile-path
# wedge recovery (zackees/zccache#669, refs #666) — daemon stopped
# responding after ~1h uptime on Windows during heavy concurrent
# compile load. Bumping to >=1.11.17 captures both fixes; the
# "lost connection to daemon (no response)" symptom we hit during
# the recent FastLED bloat-audit worktree builds maps to #673.
# 1.11.14 ships the `--no-walk` flag plus an expanded skip-list for
# the meson-configure wrapper (zackees/zccache#660, closes zackees/
# zccache#659). With `--no-walk` the wrapper skips its recursive
# meson.build discovery walk entirely and trusts the caller's
# `--input-file` entries instead. FastLED enumerates its 7 known
# meson.build files explicitly, eliminating the ~5s `.venv/`
# traversal (~100k Python files) on every cold-with-cache
# reconfigure. 1.11.13 shipped the `--input-file` flag
# (zackees/zccache#655, closes zackees/zccache#654). FastLED
# passes a sidecar digest of its test/example/source globs into the
# wrapper's cache key so the reconfigure path benefits from cache
# restoration — previously the wrapper had to be bypassed whenever
# FastLED's metadata-cache layer flagged a change, because the
# wrapper hashed only meson.build files and a hit would have served
# a stale-target tree. 1.11.12 added the wrapper itself
# (zackees/zccache#649, closes zackees/zccache#627). 1.11.11 ships
# the depfile-on-cache-hit fix (zackees/zccache#643) — without that,
# `deps = gcc` mode records `#deps 0` for every cached object and
# incremental builds produce stale .obj files after a git pull that
# changes transitive headers (symptom: `undefined symbol: ...` link
# errors hours after a header actually changed).
"zccache>=1.11.20",
"ninja",
"meson>=1.11.0",
"download",
"playwright",
"httpx",
"psutil",
"toml>=0.10.2",
"typeguard>=4.4.4",
"mcp>=1.12.2",
"compiledb>=0.10.7",
"pathspec>=0.12.1",
"rich>=14.1.0",
"textual>=1.0.0",
"emoji>=2.14.1",
"pydantic[email]>=2.0.0",
"dirsync>=2.2.6",
"esptool>=5.0.2",
"docker>=7.0.0",
"pillow>=11.3.0",
"ffmpeg-python>=0.2.0",
"static-ffmpeg>=2.7",
"fastled>=2.0.9",
"running-process>=4.0.0",
"nodejs-wheel>=22.0.0",
"daemoniker>=0.2.3",
"colorama>=0.4.6",
"ty>=0.0.15",
"bleak>=0.22.3",
]
[build-system]
requires = ["hatchling", "hatch-requirements-txt"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
[tool.hatch.build]
packages = ["ci"]
[tool.hatch.metadata]
allow-direct-references = true
[tool.ruff]
exclude = ["ci/tmp", "ci/wasm", "scripts", "native", "**/.fbuild", "**/.pio"]
[tool.ruff.lint]
# Enable import sorting (replaces isort)
# Enable PEP 585 annotations and PEP 604 unions (modern type hints)
select = [
"I", # isort - import sorting
"UP006", # Use PEP 585 annotation (list[T] instead of List[T])
"UP007", # Use PEP 604 union syntax (X | Y instead of Union[X, Y], T | None instead of Optional[T])
]
# Register custom checker codes so ruff accepts # noqa: DCT001 etc.
# KBI001/002/003 are emitted by ci/lint_python/keyboard_interrupt_checker.py.
external = ["DCT001", "DCT002", "KBI001", "KBI002", "KBI003"]
[tool.ruff.lint.isort]
# Configure import sorting to match isort's black profile
force-single-line = false
force-sort-within-sections = false
lines-after-imports = 2
[tool.ruff.format]
# Enable formatting (replaces black)
# Use black-compatible settings
quote-style = "double"
indent-style = "space"
skip-magic-trailing-comma = false
line-ending = "auto"
[tool.isort]
# Configure isort to use black-compatible formatting
profile = "black"
skip_glob = ["ci/tmp/*", "ci/wasm/*", "scripts/*", "native/*", "**/.fbuild/*", "**/.pio/*"]
[tool.pyright]
include = ["ci", "ci/compiler"]
exclude = [
"ci/tmp/",
"ci/wasm/",
"ci/native/",
"native/",
"**/__pycache__",
"**/.pytest_cache",
"**/.ruff_cache",
"**/node_modules",
"**/.git",
"**/.venv",
"**/.build",
"**/.pio",
"**/.pio_cache",
"**/build",
"**/dist",
"**/*.egg-info",
"tmp.py",
"ci/compiler/packages.py",
"ci/tests/**",
"ci/util/test_*.py",
]
# Type checking configuration
typeCheckingMode = "strict"
pythonVersion = "3.11"
pythonPlatform = "All"
useLibraryCodeForTypes = true
analyzeUnannotatedFunctions = true
strictParameterNoneValue = true
strictListInference = true
strictDictionaryInference = true
strictSetInference = true
# Report settings
reportMissingImports = true
reportMissingTypeStubs = false
reportUnusedImport = false
reportUnusedClass = false
reportUnusedFunction = true
reportUnusedVariable = false
reportDuplicateImport = true
reportWildcardImportFromLibrary = true
reportOptionalSubscript = false
reportOptionalMemberAccess = false
reportOptionalCall = false
reportOptionalIterable = false
reportOptionalContextManager = false
reportOptionalOperand = false
reportGeneralTypeIssues = true
reportPropertyTypeMismatch = true
reportFunctionMemberAccess = true
reportPrivateUsage = false
reportConstantRedefinition = false
reportIncompatibleMethodOverride = true
reportIncompatibleVariableOverride = true
reportInconsistentConstructor = true
reportOverlappingOverload = true
reportMissingSuperCall = false
reportUninitializedInstanceVariable = false
reportInvalidStringEscapeSequence = true
reportUnknownParameterType = "error"
reportUnknownArgumentType = "error"
reportUnknownLambdaType = "error"
reportUnknownVariableType = "error"
reportUnknownMemberType = "error"
reportMissingParameterType = "error"
reportMissingTypeArgument = "error"
reportReturnType = "error"
reportUntypedFunctionDecorator = "error"
reportUntypedClassDecorator = "error"
reportUntypedBaseClass = "error"
reportUntypedNamedTuple = "error"
reportInvalidTypeVarUse = true
reportCallInDefaultInitializer = false
reportUnnecessaryIsInstance = false
reportUnnecessaryCast = false
reportUnnecessaryComparison = false
reportUnnecessaryContains = false
reportAssertAlwaysTrue = false
reportSelfClsParameterName = true
reportImplicitStringConcatenation = false
reportUndefinedVariable = true
reportUnboundVariable = true
reportInvalidStubStatement = true
reportIncompleteStub = true
reportUnsupportedDunderAll = true
reportUnusedCallResult = false
reportUnusedCoroutine = true
reportUnusedExpression = false
reportUnnecessaryTypeIgnoreComment = false
reportMatchNotExhaustive = true
# Display settings
verboseOutput = false
autoImportCompletions = false
indexing = false
functionSignatureDisplay = "compact"
[tool.pytest.ini_options]
markers = [
"full: marks tests as requiring the full test suite (deselected during quick Python-only runs)",
"serial: marks tests as requiring serial execution (no parallel execution)",
"slow: marks tests as slow (can be skipped with -m 'not slow' for faster test runs)",
]
[[tool.pyright.executionEnvironments]]
root = "."
pythonVersion = "3.11"
pythonPlatform = "All"
[[tool.pyright.executionEnvironments]]
root = "ci/tests"
pythonVersion = "3.11"
pythonPlatform = "All"
# Enforce return type annotations even for test methods
reportReturnType = "error"