Status | Doc |
---|---|
Stardoc |
rules_twirl
compiles Twirl templates to Scala, so they can be used with bazelbuild/rules_scala
and higherkindness/rules_scala
.
Simple Core API: twirl_templates
For more information about Twirl templates, see the Play Twirl documentation.
Create a file called at the top of your repository named WORKSPACE
and add the following snippet to it.
# update version as needed
rules_twirl_version = "9ac789845e3a481fe520af57bd47a4261edb684f"
http_archive(
name = "io_bazel_rules_twirl",
sha256 = "b1698a2a59b76dc9df233314c2a1ca8cee4a0477665cff5eafd36f92057b2044",
strip_prefix = "rules_twirl-{}".format(rules_twirl_version),
type = "zip",
url = "https://github.com/lucidsoftware/rules_twirl/archive/{}.zip".format(rules_twirl_version),
)
RULES_JVM_EXTERNAL_TAG = "3.3"
http_archive(
name = "rules_jvm_external",
sha256 = "d85951a92c0908c80bd8551002d66cb23c3434409c814179c0ff026b53544dab",
strip_prefix = "rules_jvm_external-{}".format(RULES_JVM_EXTERNAL_TAG),
type = "zip",
url = "https://github.com/bazelbuild/rules_jvm_external/archive/{}.zip".format(RULES_JVM_EXTERNAL_TAG),
)
load("@io_bazel_rules_twirl//:workspace.bzl", "twirl_repositories")
twirl_repositories()
load("@twirl//:defs.bzl", twirl_pinned_maven_install = "pinned_maven_install")
twirl_pinned_maven_install()
This installs rules_twirl
to your WORKSPACE
at the specified commit. Update the commit as needed.
The twirl_templates
rule compiles Twirl templates to a source jar that can be used with the rules_scala
rules. For example,
twirl_templates(
name = "twirl-templates",
source_directory = "app",
srcs = glob(["app/**/*.scala.html"])
+ glob(["app/**/*.scala.xml"])
+ glob(["app/**/*.scala.js"])
+ glob(["app/**/*.scala.txt"]),
)
scala_binary(
name = "foo-service",
srcs = glob(["app/**/*.scala"]) + [":twirl-templates"],
main_class = "foo.server.RunServer",
deps = [...]
)
)
See the Stardoc documentation for the full list of options for twirl_templates
.
twirl_templates
can be used with the rules_play_routes
to run a Play Framework Service. For example
twirl_templates(
name = "twirl-templates",
source_directory = "app",
include_play_imports = True,
srcs = glob(["app/**/*.scala.html"])
+ glob(["app/**/*.scala.xml"])
+ glob(["app/**/*.scala.js"])
+ glob(["app/**/*.scala.txt"]),
additional_imports = [...],
)
play_routes(
name = "play-routes",
srcs = ["conf/routes"] + glob(["conf/*.routes"]),
include_play_imports = True,
generate_reverse_router = True,
routes_imports = [...],
)
scala_binary(
name = "foo-service",
srcs = glob(["app/**/*.scala"]) + [":twirl-templates", ":play-routes"],
visibility = ["//visibility:public"],
main_class = "play.core.server.ProdServerStart",
resources = ["conf/logback.xml"] + glob(["conf/resources/**/*"]),
resource_strip_prefix = native.package_name(),
classpath_resources = ["conf/application.conf"],
jvm_flags = [
"-Dhttp.port=9000",
"-Dapplication.name=foo-service",
],
deps = [...],
)
This project consists of the Twirl Bazel rules and a command line Twirl compiler. The command line compiler can be built with
bazel build //twirl-compiler
It can be run with
bazel run //twirl-compiler
All tests can be run using
test/run_all_tests.sh
They can also be run using
bazel test //test/...
We use rules_jvm_external to import third party dependencies.
To make changes to the dependencies, simply update maven_install
in the appropriate workspace.bzl
file (workspace.bzl
for the main rules_twirl
implementation or test_workspace.bzl
for the tests), and then update the dependencies json file used by rules_jvm_external
by running the following script:
scripts/gen-deps.sh
Never modify the dependencies json file directly.
Before pushing your changes, make sure you update the documentation by running the following script:
scripts/gen-docs.sh
Failure to do so will result in CI failing.