Implement webapp autocompile (#1193)

add pre-script to check if webapp was compiled or sources changed and auto compile.

---------

Co-authored-by: Bernhard Kirchen <schlimmchen@posteo.net>
This commit is contained in:
spcqike 2024-09-05 23:02:42 +02:00 committed by GitHub
parent a87f9fa2cd
commit cec4003f6e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 67 additions and 13 deletions

1
.gitignore vendored
View File

@ -7,4 +7,5 @@
platformio-device-monitor*.log
logs/device-monitor*.log
platformio_override.ini
webapp_dist/
.DS_Store

View File

@ -0,0 +1,65 @@
import os
import hashlib
import pickle
import subprocess
def check_files(directories, filepaths, hash_file):
old_file_hashes = {}
file_hashes = {}
for directory in directories:
for root, dirs, filenames in os.walk(directory):
for file in filenames:
filepaths.append(os.path.join(root, file))
for file_path in filepaths:
with open(file_path, 'rb') as f:
file_data = f.read()
file_hashes[file_path] = hashlib.md5(file_data).hexdigest()
if os.path.exists(hash_file):
with open(hash_file, 'rb') as f:
old_file_hashes = pickle.load(f)
update = False
for file_path, file_hash in file_hashes.items():
if file_path not in old_file_hashes or old_file_hashes[file_path] != file_hash:
update = True
break
if not update:
print("webapp artifacts should be up-to-date")
return
print("compiling webapp (hang on, this can take a while and there might be little output)...")
try:
# if these commands fail, an exception will prevent us from
# persisting the current hashes => commands will be executed again
subprocess.run(["yarn", "--cwd", "webapp", "install", "--frozen-lockfile"],
check=True)
subprocess.run(["yarn", "--cwd", "webapp", "build"], check=True)
except FileNotFoundError:
raise Exception("it seems 'yarn' is not installed/available on your system")
with open(hash_file, 'wb') as f:
pickle.dump(file_hashes, f)
def main():
if os.getenv('GITHUB_ACTIONS') == 'true':
print("INFO: not testing for up-to-date webapp artifacts when running as Github action")
return 0
print("INFO: testing for up-to-date webapp artifacts")
directories = ["webapp/src/", "webapp/public/"]
files = ["webapp/index.html", "webapp/tsconfig.config.json",
"webapp/tsconfig.json", "webapp/vite.config.ts",
"webapp/yarn.lock"]
hash_file = "webapp_dist/.hashes.pkl"
check_files(directories, files, hash_file)
main()

View File

@ -50,6 +50,7 @@ lib_deps =
plerup/EspSoftwareSerial @ ^8.2.0
extra_scripts =
pre:pio-scripts/compile_webapp.py
pre:pio-scripts/auto_firmware_version.py
pre:pio-scripts/patch_apply.py
post:pio-scripts/create_factory_bin.py

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Binary file not shown.

View File

@ -1,13 +0,0 @@
{
"name": "OpenDTU",
"short_name": "OpenDTU",
"display": "standalone",
"orientation": "portrait",
"icons": [
{
"src": "/favicon.png",
"sizes": "144x144",
"type": "image/png"
}
]
}

Binary file not shown.