commit | f9f5c3a5564d89c9dbab2ddd1e1c5b2726775d64 | [log] [tgz] |
---|---|---|
author | Mitchell Kember <mkember@google.com> | Tue Apr 14 16:59:46 2020 -0700 |
committer | Mitchell Kember <mkember@google.com> | Tue Apr 14 17:09:47 2020 -0700 |
tree | 079b9abfcf68427d5144e8cdaea9e311f7ce761e | |
parent | a74ea8c2ecb7f13a78c5af31ef213998f079a84d [diff] |
Add watch.sh and improve Fuchsia copy workflow This CL: * Adds watch.sh, an all-in-one script to make hacking on fidlbolt easier. It watches for file changes in the frontend and backend, automatically rebuilding and restarting the server as necessary. * Improves copy_fuchsia_files.sh, adding a help message and making use of tools/devshell/lib/vars.sh to set environment variables. * Changes the behavior of `make run COPY=1` so that it no longer runs copy_fuchsia_files.sh for you. I changed this because I often found myself wanting to copy once after getting my fuchsia tree in the desired state (for a deployment), and not copy again after that. * Updates the README to account for these changes. Change-Id: Ie59b819d2b8b0ff500f4c2632bc23044607da911
fidlbolt is web app for exploring FIDL code and bytes, inspired by Matt Godbolt's Compiler Explorer.
To run a local fidlbolt server:
fx build host_x64/{fidlc,fidlgen_{llcpp,hlcpp,rust,go,dart}} zircon/tools
.make run
.http://localhost:8080
.If you don't want changes in the fuchsia tree (e.g. rebuilding fidlc or changing FIDL libraries) to affect the running fidlbolt, run ./copy_fuchsia_files.sh
and use make run COPY=1
instead.
The backend is written in Go 1.13. It uses net/http to serve static files and handle POST requests.
The frontend is written in Elm and TypeScript. It uses webpack for bundling.
To set up the frontend:
sudo apt-get install nodejs
.cd frontend && npm ci
(using ci
instead of install
ensures a repeatable build).Then, use one of the commands listed in npm run
:
npm run dev
: build in development modenpm run watch
: rebuild in development mode on every file changenpm run tc
: typecheck TypeScript filesnpm run lint
: run eslint on TypeScript filesnpm run fix
: format and fix lint issues in TypeScript and Elm filesnpm run build
: build in production modeThe build commands read files in frontend/src/
and generate output in frontend/dist/
.
If you are developing on Linux, ./watch.sh
provides an easy workflow. It automatically watches code in the frontend (using npm run watch
) and backend (using inotifywait), rebuilding and restarting the server as necessary. It does not perform hot/live reloading: you still need to refresh the browser manually to see changes.
Before making a CL, always run make format
.
The project uses Docker for containerized deployment.
To build and run a new image locally:
sudo apt-get install docker-ce
../copy_fuchsia_files.sh
to get the latest FIDL files and binaries from your Fuchsia repository.docker image build -t fidlbolt .
docker container run --publish 8080:8080 --detach --name fb fidlbolt
You might need to use sudo
with the Docker commands.