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:
parent
a87f9fa2cd
commit
cec4003f6e
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,4 +7,5 @@
|
|||||||
platformio-device-monitor*.log
|
platformio-device-monitor*.log
|
||||||
logs/device-monitor*.log
|
logs/device-monitor*.log
|
||||||
platformio_override.ini
|
platformio_override.ini
|
||||||
|
webapp_dist/
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|||||||
65
pio-scripts/compile_webapp.py
Normal file
65
pio-scripts/compile_webapp.py
Normal 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()
|
||||||
@ -50,6 +50,7 @@ lib_deps =
|
|||||||
plerup/EspSoftwareSerial @ ^8.2.0
|
plerup/EspSoftwareSerial @ ^8.2.0
|
||||||
|
|
||||||
extra_scripts =
|
extra_scripts =
|
||||||
|
pre:pio-scripts/compile_webapp.py
|
||||||
pre:pio-scripts/auto_firmware_version.py
|
pre:pio-scripts/auto_firmware_version.py
|
||||||
pre:pio-scripts/patch_apply.py
|
pre:pio-scripts/patch_apply.py
|
||||||
post:pio-scripts/create_factory_bin.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.
@ -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.
Loading…
Reference in New Issue
Block a user