Display deployment information dynamically

This CL introduces the concept of a "fidlbolt deployment" as a set of
git hashes and version strings that identify all source code responsible
for processing a fidlbolt request. Currently, this information includes
hashes for fidlbolt, fuchsia, and topaz, and a version for rustfmt.

The script copy_support_files.sh now writes fidlbolt_deployment.json.
The server passes this information with every response, and the frontend
uses it to show links and timestamps at the bottom of the Help window.
It is sent with every response rather than just queried once because
there is no reason to assume users will refresh soon after a deployment.

This CL also renames the fuchsia/ directory to support/ (and similarly
copy_fuchsia_files.sh to copy_support_files.sh) since this directory is
more general with the inclusion of fidlbolt_deployment.json and rustfmt.

Other small changes:

* Add CSS styling for links.

* Use FORCE_COLOR in watch.sh to get npm color output.

* Link to Monorail for bug reports instead of my email.

Change-Id: I5af577522c6b5ef04119913b2781bd7963edfc17
15 files changed
tree: 37f0bdb81f48b6e59123fbbf4b944b6d2ef85087
  1. backend/
  2. frontend/
  3. .dockerignore
  4. .gitignore
  5. AUTHORS
  6. CHANGELOG.md
  7. CONTRIBUTING.md
  8. copy_support_files.sh
  9. Dockerfile
  10. LICENSE
  11. Makefile
  12. PATENTS
  13. README.md
  14. watch.sh
README.md

fidlbolt

fidlbolt is web app for exploring FIDL code and bytes, inspired by Matt Godbolt's Compiler Explorer.

Get started

To run a local fidlbolt server:

  1. Follow the Fuchsia: Get Started guide.
  2. Build FIDL tools: fx build host_x64/{fidlc,fidlgen_{llcpp,hlcpp,rust,go,dart}} zircon/tools.
  3. Ensure that you have Go and Node.js installed.
  4. Build and run with make run.
  5. View the app at 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_support_files.sh and use make run SUPPORT=1 instead.

Contributing

Backend

The backend is written in Go 1.13. It uses net/http to serve static files and handle POST requests.

Frontend

The frontend is written in Elm and TypeScript. It uses webpack for bundling.

To set up the frontend:

  1. Install Node.js. On Debian-based systems, use sudo apt-get install nodejs.
  2. 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 mode
  • npm run watch: rebuild in development mode on every file change
  • npm run tc: typecheck TypeScript files
  • npm run lint: run eslint on TypeScript files
  • npm run fix: format and fix lint issues in TypeScript and Elm files
  • npm run build: build in production mode

The build commands read files in frontend/src/ and generate output in frontend/dist/.

Workflow

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.

Style

Before making a CL, always run make format.

Deployment

The project uses Docker for containerized deployment.

To build and run a new image locally:

  1. Install Docker. On Debian-based systems, use sudo apt-get install docker-ce.
  2. Run ./copy_support_files.sh to get the latest FIDL files and binaries from your Fuchsia repository.
  3. docker image build -t fidlbolt .
  4. docker container run --publish 8080:8080 --detach --name fb fidlbolt

You might need to use sudo with the Docker commands.