Skip to content

Latest commit

 

History

History
52 lines (38 loc) · 2.31 KB

README.md

File metadata and controls

52 lines (38 loc) · 2.31 KB

The real world Elm example web application, built with Bazel

This repository contains a fork of Richard Feldman's Elm example application, modified to build with the Bazel build system. It uses the rules_elm package to build the Elm code. Bazel's official rules_docker is used to pack the resulting Javascript application and the static assets into container layers. These are then combined into a container image based on Nginx. This makes it easy to deploy and run this example application.

The advantage of using Bazel to build Elm code is that it makes it possible to use a single build system to build, package and run tests for larger projects in one go. For example, if the Elm web application had to communicate with a backend service written in Go, both of these could easily be built and packaged into a Docker container through a uniform build process.

To get more insight in how the Bazel build rules are structured, consider viewing the difference against master.

Building and using the Nginx container with the Elm web application

It should be sufficient to run the following command inside a checkout of this repository on a system that has Bazel installed:

bazel run :elm_spa_example_container

This will build the Elm web application, add it to a container image based on Nginx and push it into the Docker daemon running on the current system. It is then possible to launch this container as follows:

docker run -p 80:80 bazel:elm_spa_example_container

Tip: The rules_docker package provides a container_push() function that allows you to directly push the resulting container image into a remote registry. This function doesn't rely on the availability of a local Docker daemon.

Running the unit tests

Just like tests for other languages supported by Bazel, the tests provided by this repository may be executed as follows:

bazel test //...

Licensing terms

The changes made to this example web application are available under the same license terms as the original web application (i.e., MIT).