Merge pull request #507 from google/packageFile

Create `inv web.build`
This commit is contained in:
Gilles Boccon-Gibod
2024-07-11 18:35:29 -07:00
committed by GitHub
4 changed files with 43 additions and 4 deletions

View File

@@ -20,7 +20,10 @@ Invoke tasks
# Imports
# -----------------------------------------------------------------------------
import os
import glob
import shutil
import urllib
from pathlib import Path
from invoke import task, call, Collection
from invoke.exceptions import Exit, UnexpectedExit
@@ -205,5 +208,21 @@ def serve(ctx, port=8000):
server.serve_forever()
# -----------------------------------------------------------------------------
@task
def web_build(ctx):
# Step 1: build the wheel
build(ctx)
# Step 2: Copy the wheel to the web folder, so the http server can access it
newest_wheel = Path(max(glob.glob('dist/*.whl'), key=lambda f: os.path.getmtime(f)))
shutil.copy(newest_wheel, Path('web/'))
# Step 3: Write wheel's name to web/packageFile
with open(Path('web', 'packageFile'), mode='w') as package_file:
package_file.write(str(Path('/') / newest_wheel.name))
# Step 4: Success!
print('Include ?packageFile=true in your URL!')
# -----------------------------------------------------------------------------
web_tasks.add_task(serve)
web_tasks.add_task(web_build, name="build")

3
web/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
# files created by invoke web.build
*.whl
packageFile

View File

@@ -24,9 +24,14 @@ controller using some other transport (ex: `python apps/hci_bridge.py ws-server:
For HTTP, start an HTTP server with the `web` directory as its
root. You can use the invoke task `inv web.serve` for convenience.
`inv web.build` will build the local copy of bumble and automatically copy the `.whl` file
to the web directory. To use this build, include the param `?packageFile=true` to the URL.
In a browser, open either `scanner/scanner.html` or `speaker/speaker.html`.
You can pass optional query parameters:
* `packageFile=true` will automatically use the bumble package built via the
`inv web.build` command.
* `package` may be set to point to a local build of Bumble (`.whl` files).
The filename must be URL-encoded of course, and must be located under
the `web` directory (the HTTP server won't serve files not under its

View File

@@ -75,7 +75,6 @@ export class Bumble extends EventTarget {
}
// Load the Bumble module
bumblePackage ||= 'bumble';
console.log('Installing micropip');
this.log(`Installing ${bumblePackage}`)
await this.pyodide.loadPackage('micropip');
@@ -166,6 +165,20 @@ export class Bumble extends EventTarget {
}
}
async function getBumblePackage() {
const params = (new URL(document.location)).searchParams;
// First check the packageFile override param
if (params.has('packageFile')) {
return await (await fetch('/packageFile')).text()
}
// Then check the package override param
if (params.has('package')) {
return params.get('package')
}
// If no override params, default to the main package
return 'bumble'
}
export async function setupSimpleApp(appUrl, bumbleControls, log) {
// Load Bumble
log('Loading Bumble');
@@ -173,8 +186,7 @@ export async function setupSimpleApp(appUrl, bumbleControls, log) {
bumble.addEventListener('log', (event) => {
log(event.message);
})
const params = (new URL(document.location)).searchParams;
await bumble.loadRuntime(params.get('package'));
await bumble.loadRuntime(await getBumblePackage());
log('Bumble is ready!')
const app = await bumble.loadApp(appUrl);