fastled 1.3.11__tar.gz → 1.3.14__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. fastled-1.3.14/DEBUGGER.md +34 -0
  2. fastled-1.3.14/Dockerfile +58 -0
  3. fastled-1.3.14/FAQ.md +11 -0
  4. {fastled-1.3.11 → fastled-1.3.14}/PKG-INFO +9 -3
  5. {fastled-1.3.11 → fastled-1.3.14}/README.md +8 -2
  6. {fastled-1.3.11 → fastled-1.3.14}/clean +1 -0
  7. {fastled-1.3.11 → fastled-1.3.14}/compiler/run.py +7 -34
  8. {fastled-1.3.11 → fastled-1.3.14}/docker-compose.yml +1 -1
  9. {fastled-1.3.11/compiler → fastled-1.3.14}/entrypoint.sh +1 -4
  10. {fastled-1.3.11 → fastled-1.3.14}/pyproject.toml +1 -2
  11. {fastled-1.3.11 → fastled-1.3.14}/requirements.testing.txt +2 -1
  12. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/__version__.py +1 -1
  13. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/app.py +0 -6
  14. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/compile_server_impl.py +3 -20
  15. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/docker_manager.py +2 -2
  16. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/parse_args.py +8 -6
  17. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/util.py +11 -6
  18. {fastled-1.3.11 → fastled-1.3.14}/src/fastled.egg-info/PKG-INFO +9 -3
  19. {fastled-1.3.11 → fastled-1.3.14}/src/fastled.egg-info/SOURCES.txt +3 -11
  20. {fastled-1.3.11 → fastled-1.3.14}/src/fastled.egg-info/requires.txt +1 -1
  21. {fastled-1.3.11 → fastled-1.3.14}/test +2 -2
  22. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_version.py +3 -2
  23. fastled-1.3.11/Dockerfile +0 -85
  24. fastled-1.3.11/compiler/CMakeLists.txt +0 -139
  25. fastled-1.3.11/compiler/arduino-pre-process.sh +0 -3
  26. fastled-1.3.11/compiler/final_prewarm.sh +0 -26
  27. fastled-1.3.11/compiler/init_runtime.py +0 -112
  28. fastled-1.3.11/compiler/install-arduino-cli.sh +0 -41
  29. fastled-1.3.11/compiler/libcompile/CMakeLists.txt +0 -152
  30. fastled-1.3.11/compiler/prewarm.sh +0 -42
  31. fastled-1.3.11/compiler/process-ino.py +0 -138
  32. fastled-1.3.11/compiler/pyproject.toml +0 -22
  33. fastled-1.3.11/tests/unit/test_version_matches.py +0 -70
  34. {fastled-1.3.11 → fastled-1.3.14}/.aiderignore +0 -0
  35. {fastled-1.3.11 → fastled-1.3.14}/.dockerignore +0 -0
  36. {fastled-1.3.11 → fastled-1.3.14}/.github/workflows/build_multi_docker_image.yml +0 -0
  37. {fastled-1.3.11 → fastled-1.3.14}/.github/workflows/build_webpage.yml +0 -0
  38. {fastled-1.3.11 → fastled-1.3.14}/.github/workflows/lint.yml +0 -0
  39. {fastled-1.3.11 → fastled-1.3.14}/.github/workflows/publish_release.yml +0 -0
  40. {fastled-1.3.11 → fastled-1.3.14}/.github/workflows/template_build_docker_image.yml +0 -0
  41. {fastled-1.3.11 → fastled-1.3.14}/.github/workflows/test_build_exe.yml +0 -0
  42. {fastled-1.3.11 → fastled-1.3.14}/.github/workflows/test_macos.yml +0 -0
  43. {fastled-1.3.11 → fastled-1.3.14}/.github/workflows/test_ubuntu.yml +0 -0
  44. {fastled-1.3.11 → fastled-1.3.14}/.github/workflows/test_win.yml +0 -0
  45. {fastled-1.3.11 → fastled-1.3.14}/.gitignore +0 -0
  46. {fastled-1.3.11 → fastled-1.3.14}/.pylintrc +0 -0
  47. {fastled-1.3.11 → fastled-1.3.14}/.vscode/launch.json +0 -0
  48. {fastled-1.3.11 → fastled-1.3.14}/.vscode/settings.json +0 -0
  49. {fastled-1.3.11 → fastled-1.3.14}/.vscode/tasks.json +0 -0
  50. {fastled-1.3.11 → fastled-1.3.14}/LICENSE +0 -0
  51. {fastled-1.3.11 → fastled-1.3.14}/MANIFEST.in +0 -0
  52. {fastled-1.3.11 → fastled-1.3.14}/RELEASE.md +0 -0
  53. {fastled-1.3.11 → fastled-1.3.14}/TODO.md +0 -0
  54. {fastled-1.3.11 → fastled-1.3.14}/build_exe.py +0 -0
  55. {fastled-1.3.11 → fastled-1.3.14}/build_local_docker.py +0 -0
  56. {fastled-1.3.11 → fastled-1.3.14}/build_site.py +0 -0
  57. {fastled-1.3.11 → fastled-1.3.14}/compiler/debug.sh +0 -0
  58. {fastled-1.3.11 → fastled-1.3.14}/demo/100dots.html +0 -0
  59. {fastled-1.3.11 → fastled-1.3.14}/demo/demo_threejs.html +0 -0
  60. {fastled-1.3.11 → fastled-1.3.14}/demo/micdemo.html +0 -0
  61. {fastled-1.3.11 → fastled-1.3.14}/demo/mp3upload.html +0 -0
  62. {fastled-1.3.11 → fastled-1.3.14}/demo/webgl_postprocessing_unreal_bloom.html +0 -0
  63. {fastled-1.3.11 → fastled-1.3.14}/install +0 -0
  64. {fastled-1.3.11 → fastled-1.3.14}/install_linux.sh +0 -0
  65. {fastled-1.3.11 → fastled-1.3.14}/lint +0 -0
  66. {fastled-1.3.11 → fastled-1.3.14}/setup.cfg +0 -0
  67. {fastled-1.3.11 → fastled-1.3.14}/setup.py +0 -0
  68. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/__init__.py +0 -0
  69. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/args.py +0 -0
  70. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/assets/example.txt +0 -0
  71. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/assets/localhost-key.pem +0 -0
  72. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/assets/localhost.pem +0 -0
  73. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/cli.py +0 -0
  74. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/cli_test.py +0 -0
  75. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/cli_test_interactive.py +0 -0
  76. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/client_server.py +0 -0
  77. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/compile_server.py +0 -0
  78. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/filewatcher.py +0 -0
  79. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/keyboard.py +0 -0
  80. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/keyz.py +0 -0
  81. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/live_client.py +0 -0
  82. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/open_browser.py +0 -0
  83. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/paths.py +0 -0
  84. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/print_filter.py +0 -0
  85. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/project_init.py +0 -0
  86. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/select_sketch_directory.py +0 -0
  87. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/server_flask.py +0 -0
  88. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/server_start.py +0 -0
  89. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/settings.py +0 -0
  90. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/site/build.py +0 -0
  91. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/site/examples.py +0 -0
  92. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/sketch.py +0 -0
  93. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/spinner.py +0 -0
  94. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/string_diff.py +0 -0
  95. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/test/can_run_local_docker_tests.py +0 -0
  96. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/test/examples.py +0 -0
  97. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/types.py +0 -0
  98. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/version.py +0 -0
  99. {fastled-1.3.11 → fastled-1.3.14}/src/fastled/web_compile.py +0 -0
  100. {fastled-1.3.11 → fastled-1.3.14}/src/fastled.egg-info/dependency_links.txt +0 -0
  101. {fastled-1.3.11 → fastled-1.3.14}/src/fastled.egg-info/entry_points.txt +0 -0
  102. {fastled-1.3.11 → fastled-1.3.14}/src/fastled.egg-info/top_level.txt +0 -0
  103. {fastled-1.3.11 → fastled-1.3.14}/tests/integration/test_build_examples.py +0 -0
  104. {fastled-1.3.11 → fastled-1.3.14}/tests/integration/test_examples.py +0 -0
  105. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/html/index.html +0 -0
  106. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_api.py +0 -0
  107. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_bad_ino.py +0 -0
  108. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_cli.py +0 -0
  109. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_compile_server.py +0 -0
  110. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_debug_fetch_source_files.py +0 -0
  111. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_docker_linux_on_windows.py +0 -0
  112. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_embedded_data.py +0 -0
  113. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_experimental_cpp_filter.py +0 -0
  114. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_filechanger.py +0 -0
  115. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_http_server.py +0 -0
  116. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_ino/bad/bad.ino +0 -0
  117. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_ino/bad_platformio/bad_platformio.ino +0 -0
  118. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_ino/bad_platformio/platformio.ini +0 -0
  119. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_ino/embedded/data/bigdata.dat +0 -0
  120. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_ino/embedded/wasm.ino +0 -0
  121. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_ino/wasm/wasm.ino +0 -0
  122. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_print_filter.py +0 -0
  123. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_project_init.py +0 -0
  124. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_server_and_client_seperatly.py +0 -0
  125. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_string_diff.py +0 -0
  126. {fastled-1.3.11 → fastled-1.3.14}/tests/unit/test_webcompile.py +0 -0
  127. {fastled-1.3.11 → fastled-1.3.14}/upload_package.sh +0 -0
  128. {fastled-1.3.11 → fastled-1.3.14}/vscode-plugin/readme +0 -0
@@ -0,0 +1,34 @@
1
+ # Debugger
2
+
3
+ The `fastled` app supports full C++ debugging in your browser.
4
+
5
+ This includes:
6
+
7
+ * Breakpoints
8
+ * Stepping
9
+ * Inspecting variables
10
+ * Stack
11
+
12
+
13
+ ![image](https://github.com/user-attachments/assets/774c61fd-4026-48b8-9f36-60295f5c311d)
14
+
15
+
16
+ ## Enabling
17
+
18
+ * Install the [C++ Devtools Plugin for Chrome/Brave/Chromium](https://chromewebstore.google.com/detail/cc++-devtools-support-dwa/pdcpmagijalfljmkmjngeonclgbbannb)
19
+ * Compile your sketch with `--debug` flag
20
+
21
+
22
+ ## Using
23
+
24
+ * Launch debugging mode with `fastled --debug`
25
+ * Open the Devtools panel
26
+ * In Chrome, press `F12`
27
+ * Or right click on the page and select `Inspect`
28
+ * Then click the `Sources` -> `Page`
29
+ * You should now see source code for both fastled core and your sketch.
30
+
31
+
32
+ ## Notable features
33
+
34
+ * If you use FASTLED_ASSERT(...) and it triggers while devtools is open, the debugger will be invoked and the program will pause at the point the assert fired.
@@ -0,0 +1,58 @@
1
+
2
+ # The only reason we use docker is because of the fastled-wasm-compiler.
3
+ FROM niteris/fastled-wasm-compiler:latest
4
+
5
+
6
+ COPY requirements.testing.txt /install/requirements.txt
7
+ # Extract fastled-wasm-server version from requirements.txt
8
+ RUN \
9
+ grep -oP '(?<=fastled-wasm-server[<>=!]=?)[^ \n#]+' /install/requirements.txt > /install/version.txt && \
10
+ cat /install/version.txt > /install/requirements.txt && \
11
+ uv pip install --system -r /install/requirements.txt --refresh || \
12
+ uv pip install --system -r /install/requirements.txt --refresh || \
13
+ uv pip install --system -r /install/requirements.txt --refresh
14
+
15
+ # FIRST PRE-WARM CYCLE and initial setup: Download the fastled repo from the github and pre-warm the cache with a compilation.
16
+ # This is by far the most expensive part of the build, because platformio needs to download initial tools. This
17
+ # pre-warm cycle is "sticky" and tends to stay in the cache for a long time since docker is very relaxed about
18
+ # invalidating cache layers that clone a github repo.
19
+
20
+ ARG FASTLED_BUILD_DAY=echo $(date +'%Y-%m-%d')
21
+ ENV FASTLED_BUILD_DAY=${FASTLED_BUILD_DAY}
22
+
23
+
24
+ WORKDIR /js
25
+
26
+
27
+ RUN mkdir -p /js/compiler
28
+
29
+
30
+ # COPY compiler/*.py /js/compiler
31
+ COPY entrypoint.sh /entrypoint.sh
32
+ COPY compiler/run.py /js/run.py
33
+ COPY compiler/debug.sh /js/debug.sh
34
+
35
+ # COPY compiler/entrypoint.sh /entrypoint.sh
36
+ # RUN chmod +x /entrypoint.sh && dos2unix /entrypoint.sh
37
+
38
+ RUN cd /js && chmod +x debug.sh && dos2unix *.sh
39
+ RUN chmod +x /entrypoint.sh && dos2unix /entrypoint.sh
40
+
41
+ # RSYNC DISABLED FOR NOW
42
+ # now sync local to the source directory.
43
+ # RUN rsync -av /host/fastled/ /js/fastled/ && rm -rf /host/fastled
44
+
45
+ # RUN python /js/init_runtime.py || true
46
+
47
+
48
+ # SECOND PRE-WARM CYCLE: Copy the fastled repo from the host machine and pre-warm the cache with that compilation. This will
49
+ # be much quicker than the first pre-warm cycle.
50
+ # RUN /js/prewarm.sh --force > /logs/prewarm.log.2 || true
51
+
52
+ # Now timestamp the image and store it at the end of the build.
53
+ RUN date > /image_timestamp.txt
54
+
55
+ ENTRYPOINT ["/entrypoint.sh"]
56
+ CMD ["python", "/js/run.py", "server"]
57
+
58
+ # CMD ["/bin/bash", "/entrypoint.sh"]
fastled-1.3.14/FAQ.md ADDED
@@ -0,0 +1,11 @@
1
+ # FAQ
2
+
3
+ ### Why is this compiler so fast?
4
+
5
+ The compiler image uses compile caching. This cache is pre-warmed by compiling the Blink sketch, and then frozen. This happens for debug/release/quick builds, which is why it’s so blazing fast. The whole compiler toolchain is cocked and ready to fire and then frozen in place right before it compiles your sketch.
6
+
7
+ The entire Fastled library pre-compiled as a static archive and headers made available to the sketch.
8
+
9
+ During compile time, the compiler only has to consider your code and linking against a static lib.
10
+
11
+ All of this together has eliminated 90% of the compile time. But this number will increase to 97% when I apply some of the more painful refactors to eliminate the emscripten steps (--bind) that happen at final program generation time.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastled
3
- Version: 1.3.11
3
+ Version: 1.3.14
4
4
  Summary: FastLED Wasm Compiler
5
5
  Home-page: https://github.com/zackees/fastled-wasm
6
6
  Maintainer: Zachary Vorhies
@@ -20,7 +20,7 @@ Requires-Dist: progress>=1.6
20
20
  Requires-Dist: watchfiles>=1.0.5
21
21
  Requires-Dist: Flask>=3.0.0
22
22
  Requires-Dist: livereload
23
- Requires-Dist: fastled-wasm-server>=1.0.27
23
+ Requires-Dist: disklru>=2.0.4
24
24
  Dynamic: home-page
25
25
  Dynamic: license-file
26
26
  Dynamic: maintainer
@@ -91,7 +91,11 @@ https://github.com/user-attachments/assets/64ae0e6c-5f8b-4830-ab87-dcc25bc61218
91
91
  pip install fastled
92
92
  ```
93
93
 
94
- **Note that you may need to install x86 docker emulation on Mac-m1 and later, as this is an x86 only image at the prsent.**
94
+ # Debugger
95
+
96
+ This tool features full C++ debugging through the browser.
97
+
98
+ For instructions on setup see [DEBUGGER.md](DEBUGGER.md)
95
99
 
96
100
  # Command Line Use
97
101
 
@@ -389,12 +393,14 @@ A: A big chunk of space is being used by unnecessary javascript `emscripten` bun
389
393
 
390
394
 
391
395
 
396
+
392
397
  live-server --https --port=8416 --host=localhost . --cert=C:/Users/niteris/dev/fastled-wasm/src/fastled/assets/localhost-key.pem --key=C:/Users/niteris/dev/fastled-wasm/src/fastled/assets/localhost.pem --no-browser
393
398
 
394
399
 
395
400
  live-server --https --cert=src/fastled/assets/localhost.pem --key=src/fastled/assets/localhost-key.pem --port=5500
396
401
 
397
402
 
403
+
398
404
  ## Performance
399
405
 
400
406
  ```
@@ -64,7 +64,11 @@ https://github.com/user-attachments/assets/64ae0e6c-5f8b-4830-ab87-dcc25bc61218
64
64
  pip install fastled
65
65
  ```
66
66
 
67
- **Note that you may need to install x86 docker emulation on Mac-m1 and later, as this is an x86 only image at the prsent.**
67
+ # Debugger
68
+
69
+ This tool features full C++ debugging through the browser.
70
+
71
+ For instructions on setup see [DEBUGGER.md](DEBUGGER.md)
68
72
 
69
73
  # Command Line Use
70
74
 
@@ -362,12 +366,14 @@ A: A big chunk of space is being used by unnecessary javascript `emscripten` bun
362
366
 
363
367
 
364
368
 
369
+
365
370
  live-server --https --port=8416 --host=localhost . --cert=C:/Users/niteris/dev/fastled-wasm/src/fastled/assets/localhost-key.pem --key=C:/Users/niteris/dev/fastled-wasm/src/fastled/assets/localhost.pem --no-browser
366
371
 
367
372
 
368
373
  live-server --https --cert=src/fastled/assets/localhost.pem --key=src/fastled/assets/localhost-key.pem --port=5500
369
374
 
370
375
 
376
+
371
377
  ## Performance
372
378
 
373
379
  ```
@@ -441,4 +447,4 @@ A: A big chunk of space is being used by unnecessary javascript `emscripten` bun
441
447
  1.49
442
448
  2.20 ccache em++ -o .pio/build/wasm/program --bind -fuse-ld=lld -sWASM=1 -sALLOW_MEMORY_GROWTH=1 -sINITIAL_MEMORY=134217728 -sEXPORTED_RUNTIME_METHODS=['ccall','cwrap','stringToUTF8','lengthBytesUTF8'] -sEXPORTED_FUNCTIONS=['_malloc','_free','_extern_setup','_extern_loop','_fastled_declare_files'] --no-entry -sERROR_ON_WASM_CHANGES_AFTER_LINK -sMODULARIZE=1 -sEXPORT_NAME=fastled -o /js/.pio/build/wasm/fastled.js .pio/build/wasm/libbb9/fastled/FastLED.o .pio/build/wasm/libbb9/fastled/bitswap.o .pio/build/wasm/libbb9/fastled/cled_controller.o .pio/build/wasm/libbb9/fastled/colorpalettes.o .pio/build/wasm/libbb9/fastled/crgb.o .pio/build/wasm/libbb9/fastled/fl/allocator.o .pio/build/wasm/libbb9/fastled/fl/audio.o .pio/build/wasm/libbb9/fastled/fl/bilinear_expansion.o .pio/build/wasm/libbb9/fastled/fl/blur.o .pio/build/wasm/libbb9/fastled/fl/bytestreammemory.o .pio/build/wasm/libbb9/fastled/fl/colorutils.o .pio/build/wasm/libbb9/fastled/fl/downscale.o .pio/build/wasm/libbb9/fastled/fl/engine_events.o .pio/build/wasm/libbb9/fastled/fl/fft.o .pio/build/wasm/libbb9/fastled/fl/fft_impl.o .pio/build/wasm/libbb9/fastled/fl/file_system.o .pio/build/wasm/libbb9/fastled/fl/fill.o .pio/build/wasm/libbb9/fastled/fl/five_bit_hd_gamma.o .pio/build/wasm/libbb9/fastled/fl/gradient.o .pio/build/wasm/libbb9/fastled/fl/json.o .pio/build/wasm/libbb9/fastled/fl/leds.o .pio/build/wasm/libbb9/fastled/fl/line_simplification.o .pio/build/wasm/libbb9/fastled/fl/noise_woryley.o .pio/build/wasm/libbb9/fastled/fl/ptr.o .pio/build/wasm/libbb9/fastled/fl/raster_sparse.o .pio/build/wasm/libbb9/fastled/fl/rectangular_draw_buffer.o .pio/build/wasm/libbb9/fastled/fl/screenmap.o .pio/build/wasm/libbb9/fastled/fl/sin32.o .pio/build/wasm/libbb9/fastled/fl/str.o .pio/build/wasm/libbb9/fastled/fl/strstream.o .pio/build/wasm/libbb9/fastled/fl/stub_main.o .pio/build/wasm/libbb9/fastled/fl/tile2x2.o .pio/build/wasm/libbb9/fastled/fl/time_alpha.o .pio/build/wasm/libbb9/fastled/fl/transform.o .pio/build/wasm/libbb9/fastled/fl/type_traits.o .pio/build/wasm/libbb9/fastled/fl/ui.o .pio/build/wasm/libbb9/fastled/fl/wave_simulation.o .pio/build/wasm/libbb9/fastled/fl/wave_simulation_real.o .pio/build/wasm/libbb9/fastled/fl/xmap.o .pio/build/wasm/libbb9/fastled/fl/xymap.o .pio/build/wasm/libbb9/fastled/fl/xypath.o .pio/build/wasm/libbb9/fastled/fl/xypath_impls.o .pio/build/wasm/libbb9/fastled/fl/xypath_renderer.o .pio/build/wasm/libbb9/fastled/fx/2d/blend.o .pio/build/wasm/libbb9/fastled/fx/2d/noisepalette.o .pio/build/wasm/libbb9/fastled/fx/2d/scale_up.o .pio/build/wasm/libbb9/fastled/fx/2d/wave.o .pio/build/wasm/libbb9/fastled/fx/frame.o .pio/build/wasm/libbb9/fastled/fx/fx_engine.o .pio/build/wasm/libbb9/fastled/fx/time.o .pio/build/wasm/libbb9/fastled/fx/video.o .pio/build/wasm/libbb9/fastled/fx/video/frame_interpolator.o .pio/build/wasm/libbb9/fastled/fx/video/frame_tracker.o .pio/build/wasm/libbb9/fastled/fx/video/pixel_stream.o .pio/build/wasm/libbb9/fastled/fx/video/video_impl.o .pio/build/wasm/libbb9/fastled/hsv2rgb.o .pio/build/wasm/libbb9/fastled/lib8tion.o .pio/build/wasm/libbb9/fastled/noise.o .pio/build/wasm/libbb9/fastled/platforms.o .pio/build/wasm/libbb9/fastled/platforms/arm/k20/clockless_objectfled.o .pio/build/wasm/libbb9/fastled/platforms/esp/32/clockless_i2s_esp32s3.o .pio/build/wasm/libbb9/fastled/platforms/esp/32/i2s/i2s_esp32dev.o .pio/build/wasm/libbb9/fastled/platforms/esp/32/rmt_4/idf4_rmt.o .pio/build/wasm/libbb9/fastled/platforms/esp/32/rmt_4/idf4_rmt_impl.o .pio/build/wasm/libbb9/fastled/platforms/esp/32/rmt_5/idf5_rmt.o .pio/build/wasm/libbb9/fastled/platforms/esp/32/rmt_5/strip_rmt.o .pio/build/wasm/libbb9/fastled/platforms/esp/32/spi_ws2812/strip_spi.o .pio/build/wasm/libbb9/fastled/platforms/wasm/active_strip_data.o .pio/build/wasm/libbb9/fastled/platforms/wasm/compiler/Arduino.o .pio/build/wasm/libbb9/fastled/platforms/wasm/engine_listener.o .pio/build/wasm/libbb9/fastled/platforms/wasm/fs_wasm.o .pio/build/wasm/libbb9/fastled/platforms/wasm/js.o .pio/build/wasm/libbb9/fastled/platforms/wasm/timer.o .pio/build/wasm/libbb9/fastled/platforms/wasm/ui/audio.o .pio/build/wasm/libbb9/fastled/platforms/wasm/ui/button.o .pio/build/wasm/libbb9/fastled/platforms/wasm/ui/checkbox.o .pio/build/wasm/libbb9/fastled/platforms/wasm/ui/description.o .pio/build/wasm/libbb9/fastled/platforms/wasm/ui/number_field.o .pio/build/wasm/libbb9/fastled/platforms/wasm/ui/slider.o .pio/build/wasm/libbb9/fastled/platforms/wasm/ui/title.o .pio/build/wasm/libbb9/fastled/platforms/wasm/ui/ui_internal.o .pio/build/wasm/libbb9/fastled/platforms/wasm/ui/ui_manager.o .pio/build/wasm/libbb9/fastled/power_mgt.o .pio/build/wasm/libbb9/fastled/rgbw.o .pio/build/wasm/libbb9/fastled/sensors/digital_pin.o .pio/build/wasm/libbb9/fastled/sensors/pir.o .pio/build/wasm/libbb9/fastled/simplex.o .pio/build/wasm/libbb9/fastled/third_party/cq_kernel/cq_kernel.o .pio/build/wasm/libbb9/fastled/third_party/cq_kernel/kiss_fft.o .pio/build/wasm/libbb9/fastled/third_party/cq_kernel/kiss_fftr.o .pio/build/wasm/libbb9/fastled/third_party/espressif/led_strip/src/led_strip_api.o .pio/build/wasm/libbb9/fastled/third_party/espressif/led_strip/src/led_strip_rmt_dev.o .pio/build/wasm/libbb9/fastled/third_party/espressif/led_strip/src/led_strip_rmt_encoder.o .pio/build/wasm/libbb9/fastled/third_party/espressif/led_strip/src/led_strip_spi_dev.o .pio/build/wasm/libbb9/fastled/third_party/object_fled/src/OjectFLED.o .pio/build/wasm/libbb9/fastled/transpose8x1_noinline.o .pio/build/wasm/libbb9/fastled/wiring.o .pio/build/wasm/src/wasm.ino.o -L.pio/build/wasm
443
449
  3.61 ========================= [SUCCESS] Took 3.20 seconds =========================
444
- ```
450
+ ```
@@ -19,3 +19,4 @@ find . -name "*.pyc" -exec rm -rf {} \;
19
19
  # remove all *.egg files
20
20
  find . -name "*.egg" -exec rm -rf {} \;
21
21
 
22
+ rm -f uv.lock
@@ -6,8 +6,8 @@ import warnings
6
6
  from pathlib import Path
7
7
  from typing import Tuple
8
8
 
9
- from fastled_wasm_server.code_sync import CodeSync
10
- from fastled_wasm_server.paths import VOLUME_MAPPED_SRC
9
+ from fastled_wasm_compiler.compiler import Compiler
10
+ from fastled_wasm_compiler.paths import VOLUME_MAPPED_SRC
11
11
 
12
12
  _PORT = os.environ.get("PORT", 80)
13
13
 
@@ -16,33 +16,6 @@ _CHOICES = ["compile", "server"]
16
16
  HERE = Path(__file__).parent
17
17
 
18
18
 
19
- def _update_fastled() -> None:
20
- # NOT ENABLED YET
21
- if True:
22
- return
23
- is_render = os.environ.get("RENDER", "false") == "true"
24
- if not is_render:
25
- print("Skipping finalprewarm...")
26
- return
27
- git_path = "/git/fastled"
28
- fastled_path = "/js/fastled"
29
- subprocess.run(["git", "fetch", "origin"], cwd=git_path)
30
- subprocess.run(["git", "reset", "--hard", "origin/master"], cwd=git_path)
31
- subprocess.run(
32
- [
33
- "rsync",
34
- "-av",
35
- "--info=NAME",
36
- "--delete",
37
- f"{git_path}/",
38
- f"{fastled_path}/",
39
- "--exclude",
40
- ".git",
41
- ],
42
- cwd="/js",
43
- )
44
-
45
-
46
19
  def _parse_args() -> Tuple[argparse.Namespace, list[str]]:
47
20
  parser = argparse.ArgumentParser(
48
21
  description="Run compile.py with additional arguments"
@@ -102,16 +75,16 @@ def _run_compile(unknown_args: list[str]) -> int:
102
75
  def main() -> int:
103
76
  print("Running...")
104
77
  args, unknown_args = _parse_args()
105
- _update_fastled()
106
-
107
- code_sync = CodeSync(
78
+ compiler = Compiler(
108
79
  volume_mapped_src=VOLUME_MAPPED_SRC,
109
- rsync_dest=Path("/invalid/path"),
110
80
  )
111
- code_sync.sync_source_directory_if_volume_is_mapped()
81
+ compiler.update_src()
112
82
 
113
83
  try:
114
84
  if args.mode == "compile":
85
+ warnings.warn(
86
+ "The compile mode is deprecated and may fail. Use server mode instead."
87
+ )
115
88
  rtn = _run_compile(unknown_args)
116
89
  return rtn
117
90
  elif args.mode == "server":
@@ -7,4 +7,4 @@ services:
7
7
  - "8234:80"
8
8
  environment:
9
9
  - ENVIRONMENT=dev
10
- image: niteris/fastled-wasm:local
10
+ image: niteris/fastled-wasm:latest
@@ -4,12 +4,9 @@
4
4
  source /emsdk/emsdk_env.sh
5
5
  export PATH="$PATH:/emsdk/upstream/bin"
6
6
 
7
- # initialize runtime
8
- python init_runtime.py
9
-
10
7
  # only do the final prewarm if RUNTIME_PREWARM is set to "1"
11
8
  if [[ "${RUNTIME_PREWARM:-0}" == "1" ]]; then
12
- ./final_prewarm.sh
9
+ uv run -m fastled_wasm_compiler.cli_update_from_master
13
10
  fi
14
11
 
15
12
  # hand off to the main command
@@ -23,8 +23,7 @@ dependencies = [
23
23
  "watchfiles>=1.0.5",
24
24
  "Flask>=3.0.0",
25
25
  "livereload",
26
- ###### WASM SERVER ######
27
- "fastled-wasm-server>=1.0.27", # Enforced by unit test to match project <--> docker.
26
+ "disklru>=2.0.4",
28
27
  ]
29
28
 
30
29
  dynamic = ["version"]
@@ -5,4 +5,5 @@ pytest
5
5
  ruff
6
6
  pytest-xdist
7
7
  pyinstaller
8
- pyright
8
+ pyright
9
+ fastled-wasm-server>=1.0.62
@@ -1,6 +1,6 @@
1
1
  # IMPORTANT! There's a bug in github which will REJECT any version update
2
2
  # that has any other change in the repo. Please bump the version as the
3
3
  # ONLY change in a commit, or else the pypi update and the release will fail.
4
- __version__ = "1.3.11"
4
+ __version__ = "1.3.14"
5
5
 
6
6
  __version_url_latest__ = "https://raw.githubusercontent.com/zackees/fastled-wasm/refs/heads/main/src/fastled/__version__.py"
@@ -13,12 +13,6 @@ from fastled.filewatcher import file_watcher_set
13
13
  from fastled.parse_args import Args, parse_args
14
14
  from fastled.sketch import find_sketch_directories, looks_like_fastled_repo
15
15
 
16
- # from fastled.sketch import (
17
- # find_sketch_directories,
18
- # looks_like_fastled_repo,
19
- # looks_like_sketch_directory,
20
- # )
21
-
22
16
 
23
17
  def run_server(args: Args) -> int:
24
18
  interactive = args.interactive
@@ -18,7 +18,7 @@ from fastled.docker_manager import (
18
18
  from fastled.settings import DEFAULT_CONTAINER_NAME, IMAGE_NAME, SERVER_PORT
19
19
  from fastled.sketch import looks_like_fastled_repo
20
20
  from fastled.types import BuildMode, CompileResult, CompileServerError
21
- from fastled.util import port_is_free
21
+ from fastled.util import port_is_free, print_banner
22
22
 
23
23
  SERVER_OPTIONS = [
24
24
  "--allow-shutdown", # Allow the server to be shut down without a force kill.
@@ -221,9 +221,8 @@ class CompileServerImpl:
221
221
  ports = {INTERNAL_DOCKER_PORT: port}
222
222
  volumes = []
223
223
  if self.fastled_src_dir:
224
- print(
225
- f"Mounting FastLED source directory {self.fastled_src_dir} into container /host/fastled/src"
226
- )
224
+ msg = f"FastLED REPO updates enabled!!\n\nMounting FastLED source directory\n{self.fastled_src_dir} into container\n/host/fastled/src"
225
+ print_banner(msg)
227
226
  volumes.append(
228
227
  Volume(
229
228
  host_path=str(self.fastled_src_dir),
@@ -249,22 +248,6 @@ class CompileServerImpl:
249
248
  # to allow for interactive compilation
250
249
  # interactive_sources = list(INTERACTIVE_SOURCES)
251
250
  interactive_sources: list[tuple[Path, str]] = []
252
- init_runtime_py = (
253
- Path(self.fastled_src_dir)
254
- / ".."
255
- / ".."
256
- / "fastled-wasm"
257
- / "compiler"
258
- / "init_runtime.py"
259
- )
260
- if init_runtime_py.exists():
261
- # fastled-wasm is in a sister directory, mapping this in to the container.
262
- mapping = (
263
- init_runtime_py,
264
- "/js/init_runtime.py",
265
- )
266
- interactive_sources.append(mapping)
267
-
268
251
  src_host: Path
269
252
  dst_container: str
270
253
  for src_host, dst_container in interactive_sources:
@@ -227,7 +227,7 @@ def set_force_remove_image_previous(new_value: str | None = None) -> None:
227
227
  if new_value is not None:
228
228
  os.environ["FASTLED_FORCE_CLEAR"] = new_value
229
229
  else:
230
- os.environ["FASTLED_FORCE_CLEAR"] == "1"
230
+ os.environ["FASTLED_FORCE_CLEAR"] = "1"
231
231
 
232
232
 
233
233
  def force_image_removal() -> bool:
@@ -653,7 +653,7 @@ class DockerManager:
653
653
  Example: {8080: 80} maps host port 8080 to container port 80
654
654
  """
655
655
  remove_previous = remove_previous or get_force_remove_image_previous()
656
- if remove_previous:
656
+ if get_force_remove_image_previous():
657
657
  # make a banner print
658
658
  print(
659
659
  "Force removing previous image due to FASTLED_FORCE_CLEAR environment variable."
@@ -157,7 +157,6 @@ def parse_args() -> Args:
157
157
  build_mode.add_argument(
158
158
  "--quick",
159
159
  action="store_true",
160
- default=True,
161
160
  help="Build in quick mode (default)",
162
161
  )
163
162
  build_mode.add_argument(
@@ -209,11 +208,14 @@ def parse_args() -> Args:
209
208
  fastled_dir: Path | None = _find_fastled_repo(cwd)
210
209
  is_fastled_dir: bool = fastled_dir is not None
211
210
 
212
- if is_fastled_dir:
213
- # if --quick, --debug, --release are not specified then default to --debug
214
- if not (args.debug or args.quick or args.release):
215
- args.debug = True
216
- print("Defaulting to --debug mode")
211
+ if not (args.debug or args.quick or args.release):
212
+ if is_fastled_dir:
213
+ # if --quick, --debug, --release are not specified then default to --debug
214
+ args.quick = True
215
+ print("Defaulting to --quick mode in fastled repo")
216
+ else:
217
+ args.quick = True
218
+ print("Defaulting to --quick mode")
217
219
 
218
220
  if args.build or args.interactive:
219
221
  if args.directory is not None:
@@ -11,12 +11,17 @@ def hash_file(file_path: Path) -> str:
11
11
 
12
12
 
13
13
  def banner_string(msg: str) -> str:
14
- """
15
- Return `msg` surrounded by a border of # characters, including
16
- leading and trailing newlines.
17
- """
18
- border = "#" * (len(msg) + 4)
19
- return f"\n{border}\n# {msg}\n{border}\n"
14
+ lines = msg.splitlines()
15
+ max_length = max(len(line) for line in lines)
16
+ border = "#" * (max_length + 4)
17
+ bordered_lines = [f"# {line} " + "#" * (max_length - len(line)) for line in lines]
18
+ bordered_msg = "\n".join(bordered_lines)
19
+ return f"\n{border}\n{bordered_msg}\n{border}\n"
20
+
21
+
22
+ def print_banner(msg: str) -> None:
23
+ """Print a message in a banner format."""
24
+ print(banner_string(msg))
20
25
 
21
26
 
22
27
  def port_is_free(port: int) -> bool:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastled
3
- Version: 1.3.11
3
+ Version: 1.3.14
4
4
  Summary: FastLED Wasm Compiler
5
5
  Home-page: https://github.com/zackees/fastled-wasm
6
6
  Maintainer: Zachary Vorhies
@@ -20,7 +20,7 @@ Requires-Dist: progress>=1.6
20
20
  Requires-Dist: watchfiles>=1.0.5
21
21
  Requires-Dist: Flask>=3.0.0
22
22
  Requires-Dist: livereload
23
- Requires-Dist: fastled-wasm-server>=1.0.27
23
+ Requires-Dist: disklru>=2.0.4
24
24
  Dynamic: home-page
25
25
  Dynamic: license-file
26
26
  Dynamic: maintainer
@@ -91,7 +91,11 @@ https://github.com/user-attachments/assets/64ae0e6c-5f8b-4830-ab87-dcc25bc61218
91
91
  pip install fastled
92
92
  ```
93
93
 
94
- **Note that you may need to install x86 docker emulation on Mac-m1 and later, as this is an x86 only image at the prsent.**
94
+ # Debugger
95
+
96
+ This tool features full C++ debugging through the browser.
97
+
98
+ For instructions on setup see [DEBUGGER.md](DEBUGGER.md)
95
99
 
96
100
  # Command Line Use
97
101
 
@@ -389,12 +393,14 @@ A: A big chunk of space is being used by unnecessary javascript `emscripten` bun
389
393
 
390
394
 
391
395
 
396
+
392
397
  live-server --https --port=8416 --host=localhost . --cert=C:/Users/niteris/dev/fastled-wasm/src/fastled/assets/localhost-key.pem --key=C:/Users/niteris/dev/fastled-wasm/src/fastled/assets/localhost.pem --no-browser
393
398
 
394
399
 
395
400
  live-server --https --cert=src/fastled/assets/localhost.pem --key=src/fastled/assets/localhost-key.pem --port=5500
396
401
 
397
402
 
403
+
398
404
  ## Performance
399
405
 
400
406
  ```
@@ -2,7 +2,9 @@
2
2
  .dockerignore
3
3
  .gitignore
4
4
  .pylintrc
5
+ DEBUGGER.md
5
6
  Dockerfile
7
+ FAQ.md
6
8
  LICENSE
7
9
  MANIFEST.in
8
10
  README.md
@@ -13,6 +15,7 @@ build_local_docker.py
13
15
  build_site.py
14
16
  clean
15
17
  docker-compose.yml
18
+ entrypoint.sh
16
19
  install
17
20
  install_linux.sh
18
21
  lint
@@ -33,18 +36,8 @@ upload_package.sh
33
36
  .vscode/launch.json
34
37
  .vscode/settings.json
35
38
  .vscode/tasks.json
36
- compiler/CMakeLists.txt
37
- compiler/arduino-pre-process.sh
38
39
  compiler/debug.sh
39
- compiler/entrypoint.sh
40
- compiler/final_prewarm.sh
41
- compiler/init_runtime.py
42
- compiler/install-arduino-cli.sh
43
- compiler/prewarm.sh
44
- compiler/process-ino.py
45
- compiler/pyproject.toml
46
40
  compiler/run.py
47
- compiler/libcompile/CMakeLists.txt
48
41
  demo/100dots.html
49
42
  demo/demo_threejs.html
50
43
  demo/micdemo.html
@@ -111,7 +104,6 @@ tests/unit/test_project_init.py
111
104
  tests/unit/test_server_and_client_seperatly.py
112
105
  tests/unit/test_string_diff.py
113
106
  tests/unit/test_version.py
114
- tests/unit/test_version_matches.py
115
107
  tests/unit/test_webcompile.py
116
108
  tests/unit/html/index.html
117
109
  tests/unit/test_ino/bad/bad.ino
@@ -8,4 +8,4 @@ progress>=1.6
8
8
  watchfiles>=1.0.5
9
9
  Flask>=3.0.0
10
10
  livereload
11
- fastled-wasm-server>=1.0.27
11
+ disklru>=2.0.4
@@ -19,8 +19,8 @@ if [[ "$*" == *"--full"* ]]; then
19
19
  uv run build_local_docker.py
20
20
  fi
21
21
 
22
-
23
-
22
+ # If the test fails, then purge and try again
24
23
  pytest -x -v -s --durations=0 tests/unit "$@"
24
+
25
25
  # uv run pytest -n auto tests -v
26
26
 
@@ -16,10 +16,11 @@ class MainTester(unittest.TestCase):
16
16
  def test_command(self) -> None:
17
17
  """Test command line interface (CLI)."""
18
18
  stdout = subprocess.check_output(COMMAND, shell=True)
19
+ version_stdout = stdout.decode("utf-8").strip()
19
20
  self.assertEqual(
20
- stdout.decode("utf-8").strip(),
21
+ version_stdout,
21
22
  __version__,
22
- f"Version mismatch: {stdout.decode('utf-8').strip()} != {__version__}",
23
+ f"FastLED Version mismatch: {version_stdout} (tool output) != {__version__} (package version)",
23
24
  )
24
25
 
25
26
 
fastled-1.3.11/Dockerfile DELETED
@@ -1,85 +0,0 @@
1
-
2
- # The only reason we use docker is because of the fastled-wasm-compiler.
3
- FROM niteris/fastled-wasm-compiler:latest
4
-
5
-
6
- # Get the compiler requirements and install them.
7
- COPY compiler/pyproject.toml /install/pyproject.toml
8
- RUN uv pip install --system -r /install/pyproject.toml
9
-
10
- # FIRST PRE-WARM CYCLE and initial setup: Download the fastled repo from the github and pre-warm the cache with a compilation.
11
- # This is by far the most expensive part of the build, because platformio needs to download initial tools. This
12
- # pre-warm cycle is "sticky" and tends to stay in the cache for a long time since docker is very relaxed about
13
- # invalidating cache layers that clone a github repo.
14
-
15
- RUN echo "force update4"
16
- ARG FASTLED_BUILD_DAY=echo $(date +'%Y-%m-%d')
17
- ENV FASTLED_BUILD_DAY=${FASTLED_BUILD_DAY}
18
-
19
- # ARG FASTLED_VERSION=master
20
- # ENV FASTLED_VERSION=${FASTLED_VERSION}
21
- # RUN mkdir -p /js/fastled && \
22
- # rsync -a /git/fastled/ /js/fastled/ --exclude='.git'
23
-
24
- # Create symlinks for wasm platform files.
25
- COPY compiler/init_runtime.py /js/init_runtime.py
26
- #COPY compiler/prewarm.sh /js/prewarm.sh
27
-
28
- WORKDIR /js
29
-
30
- #ARG NO_PREWARM=0
31
- #ENV NO_PREWARM=${NO_PREWARM}
32
-
33
- #RUN python /js/init_runtime.py || true
34
-
35
-
36
- # First pre-warm cycle - always do it as part of the build.
37
- # RUN mkdir -p /logs
38
-
39
- # Force a build if the compiler flags change.
40
- #COPY compiler/CMakeLists.txt /trash/CMakeLists.txt
41
- #RUN rm -rf /trash
42
-
43
- #RUN chmod +x /js/prewarm.sh && \
44
- # cat /js/prewarm.sh >> /logs/prewarm.log.0
45
- #RUN /js/prewarm.sh --force >> /logs/prewarm.log.1 || true
46
-
47
-
48
-
49
- # # Copy the fastled repo from the host machine and prepare for pre-warm
50
- # # Make sure and delete files that have been removed so that we don't get
51
- # # duplicate symbols from stale files.
52
- # COPY *.json /host/fastled/
53
- # COPY src/*.* /host/fastled/src/
54
- # COPY examples /host/fastled/examples
55
- # COPY src/fx /host/fastled/src/fx
56
- # COPY src/fl /host/fastled/src/fl
57
- # COPY src/lib8tion /host/fastled/src/lib8tion
58
- # COPY src/third_party /host/fastled/src/third_party
59
- # COPY src/sensors /host/fastled/src/sensors
60
- # COPY src/platforms /host/fastled/src/platforms
61
-
62
- RUN echo "force update"
63
- COPY compiler /js/compiler
64
-
65
- COPY compiler/entrypoint.sh /entrypoint.sh
66
- RUN chmod +x /entrypoint.sh && dos2unix /entrypoint.sh
67
-
68
- # RSYNC DISABLED FOR NOW
69
- # now sync local to the source directory.
70
- # RUN rsync -av /host/fastled/ /js/fastled/ && rm -rf /host/fastled
71
-
72
- # RUN python /js/init_runtime.py || true
73
-
74
-
75
- # SECOND PRE-WARM CYCLE: Copy the fastled repo from the host machine and pre-warm the cache with that compilation. This will
76
- # be much quicker than the first pre-warm cycle.
77
- # RUN /js/prewarm.sh --force > /logs/prewarm.log.2 || true
78
-
79
- # Now timestamp the image and store it at the end of the build.
80
- RUN date > /image_timestamp.txt
81
-
82
- ENTRYPOINT ["/entrypoint.sh"]
83
- CMD ["python", "/js/run.py", "server"]
84
-
85
- # CMD ["/bin/bash", "/entrypoint.sh"]