Make fidlgen_dart optional This makes the fidlgen_dart binary optional, and shows an error in the client if it isn't available. This will unblock deploying fidlbolt regularly again, since fidlgen_dart isn't in fuchsia.git anymore. I made the Makefile accept a FIDLBOLT_PATH environment variable to specify additional search paths for `make run DEPLOYMENT=0`, which I can use to specify a local path to fidlgen_dart. I also updated the experimental flags passed to fidlc to match the current defaults in fuchsia.git. Change-Id: I1aebf953d3526188fc1cde099d4a1e86d4156e45 Reviewed-on: https://fuchsia-review.googlesource.com/c/fidlbolt/+/955452 Reviewed-by: Ian McKellar <ianloic@google.com>
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_{cpp,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 ./prepare_deployment.sh and use make run DEPLOYMENT=1 instead.
The backend is written in Go. 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 npm.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../prepare_deployment.shdocker image build -t fidlbolt .docker container run --publish 8080:8080 --detach --name fb fidlboltYou might need to use sudo with the Docker commands.