commit | 03f45abdfc48ece0d12fa505f10f754b7bb90280 | [log] [tgz] |
---|---|---|
author | Mitchell Kember <mkember@google.com> | Wed Apr 06 20:18:22 2022 +0000 |
committer | Mitchell Kember <mkember@google.com> | Wed Apr 06 20:18:22 2022 +0000 |
tree | 8c77d7bbec04ab6f643dddcde80572c274fc94aa | |
parent | ad217fcfb8fab0627f4fc285d4399a37ae8d10c1 [diff] |
Add support for FIDL versioning This CL adds a text field for passing --available flags to fidlc, e.g. "test:7" of "fuchsia:HEAD". It also adds some content about versioning in the help tab, and adds a notice about versioning similar to the one used for the new syntax last year. The "Version" text field is empty by default but has "test:HEAD" as a placeholder. This works for the default FIDL input (which names the library test.fidlbolt). I made it a placeholder rather than default so that it will not cause errors if the user changes the library name, e.g. if they type `library fuchsia.io;` then "test" no longer exists. Also, the text field is validated by a regex and only ever registers updates from one valid entry to the next. This avoids getting errors from the server while in the process of typing in that text field. This also fixes the way localStorage values are conformed to the expected schema. Id8d6206210f20118df406cc4d03000110af57f62 did this originally but it incorrectly conformed everything based on the active input/output tab rather than the input/output keys in the map. Change-Id: Idc0afb8fd1d1dde576e360f797f1353c791c7fb4 Reviewed-on: https://fuchsia-review.googlesource.com/c/fidlbolt/+/666302 Reviewed-by: Alex Zaslavsky <azaslavsky@google.com> Reviewed-by: Yifei Teng <yifeit@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_{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 ./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.sh
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.