Skip to content

Univerzální build s minifikací, spojením do jednoho souboru a nahráním na Micro:Bit pro všechny OS#59

Open
rdolejsi wants to merge 3 commits into
Global-Classes-CZE:mainfrom
rdolejsi:lesson16-gradle
Open

Univerzální build s minifikací, spojením do jednoho souboru a nahráním na Micro:Bit pro všechny OS#59
rdolejsi wants to merge 3 commits into
Global-Classes-CZE:mainfrom
rdolejsi:lesson16-gradle

Conversation

@rdolejsi

@rdolejsi rdolejsi commented Oct 5, 2024

Copy link
Copy Markdown

Ahoj, toto PR přináší build systém pro překonání problémů s velikostí paměti a těžkopádností nahrávání více souborů najednou do Micro:Bitu. Build spojuje *.py zdrojáky projektu do sebe a umí je i minimalizovat.

Soubory v tomto PR je možné přenést do libovolného adresáře našeho snažení (libovolné lekce) a následně použít k vytvoření minimalizovaného spojeného zdrojáku main.py, který lze pak buď automaticky nebo samozřejmě i vlastnoručně nahrát na Micro:Bit (pokud automatický způsob na daném OS nepůjde).

Build používá Gradle, který je schopen sám sebe natáhnout v rámci daného OS přes dodaný wrapper, není třeba nic instalovat. Jsou podporovány OS Linux, MacOS i Windows, všechny architektury. Build lze všude spustit pouhým ./gradlew build, případně gradlew.bat build (Windows).
Build má jedinou závislost - aby správně fugoval, je třeba nejprve nainstalovat python-minifier (na Ubuntu sudo pip install python-minifier).

V úvodním komentáři build.gradle je dokumentace. Build vše umí detekovat automaticky, výsledek vytváří do build/main.py (neminifikovaná varianta) a do build/mini/main.py (minifikovaná varianta).

Pro rychlé spuštění na Linuxu pro tuto konkrétní lekci viz závěrečný příklad v dokumentaci, který sestaví minifikovaný spojený main.py a pak ho nahraje na Micro:Bit včetně použití sudo, aby překonal případné problémy s přístupovými právy. Příkaz je složitější, protože je naneštěstí cely_projekt.py v jiném adresáři, což však build podporuje také:

./gradlew -Pmini -Psudo -Pinclude=../cely_projekt/cely_projekt.py clean build upload

Poslední commit pak přidává podporu regexpů pro -Pinclude= a -Pexclude= a automatický exclude jiného main_ souboru než toho, který je specifikován v -Pmain=. Lze tak mít v adresáři více main_...py souborů a volit, který se použije + jednoduše eliminovat soubory, které nechci při buildu. Např. u sebe, když testuji kola, nepotřebuji senzor a světla - vyberu main_...py pro kola a udělám exclude pro nepotřebné věci. Můj příkaz v projektu pak např. vypadá takto:

./gradlew -Pmini -Pmain=main_wheel_test.py -Pexclude=light.*,sonar.* clean build upload

Roman Dolejsi and others added 3 commits October 5, 2024 15:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant