Skip to content

Commit

Permalink
Implement webapp autocompile (#1193)
Browse files Browse the repository at this point in the history
add pre-script to check if webapp was compiled or sources changed and auto compile.

---------

Co-authored-by: Bernhard Kirchen <schlimmchen@posteo.net>
  • Loading branch information
spcqike and schlimmchen authored Sep 5, 2024
1 parent a87f9fa commit cec4003
Show file tree
Hide file tree
Showing 9 changed files with 67 additions and 13 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@
platformio-device-monitor*.log
logs/device-monitor*.log
platformio_override.ini
webapp_dist/
.DS_Store
65 changes: 65 additions & 0 deletions pio-scripts/compile_webapp.py
Original file line number Diff line number Diff line change
@@ -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()
1 change: 1 addition & 0 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Binary file removed webapp_dist/favicon.ico
Binary file not shown.
Binary file removed webapp_dist/favicon.png
Binary file not shown.
Binary file removed webapp_dist/index.html.gz
Binary file not shown.
Binary file removed webapp_dist/js/app.js.gz
Binary file not shown.
13 changes: 0 additions & 13 deletions webapp_dist/site.webmanifest

This file was deleted.

Binary file removed webapp_dist/zones.json.gz
Binary file not shown.

1 comment on commit cec4003

@ranma
Copy link

@ranma ranma commented on cec4003 Sep 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

subprocess.run(["yarn",

FWIW on my Debian yarn is called yarnpkg for some reason (naming conflict with some other existing Debian package?): https://packages.debian.org/buster/yarnpkg

Please sign in to comment.