From 58f737cc32d654cf00606c326a5fb6cbfba5f92a Mon Sep 17 00:00:00 2001 From: James Judd Date: Mon, 9 Sep 2024 12:35:23 -0600 Subject: [PATCH] Update all the things, move the CLI back into this repo, use toolchains instead of bind --- .bazelrc | 15 +- .bazelversion | 2 +- .github/workflows/ci.yml | 31 +- BUILD.bazel | 25 +- MODULE.bazel | 6 + MODULE.bazel.lock | 110 ++ README.md | 167 +- WORKSPACE | 191 +- compiler-cli/BUILD.bazel | 6 - docs/stardoc/twirl.md | 95 +- scala/BUILD.bazel | 60 + scripts/format.sh | 9 + scripts/gen-deps.sh | 10 +- scripts/gen-docs.sh | 2 +- scripts/lint.sh | 4 - scripts/publish.sh | 19 + test/BUILD.bazel | 57 +- test/TwirlCompilerTest.scala | 12 +- test/reproducibility_test.sh | 10 +- test/run_all_tests.sh | 2 +- test/twirl-compiler-test.bzl | 71 + test/twirl_compiler_bazel_e2e_test.sh | 5 +- test_workspace.bzl | 27 +- twirl-compiler-cli/BUILD.bazel | 6 + .../CommandLineTwirlTemplateCompiler.scala | 94 + twirl-compiler-cli/Foo.java | 4 + twirl-compiler-cli/pom.xml.tmpl | 33 + twirl-compiler-cli/twirl-compiler-cli.bzl | 62 + twirl-toolchain/BUILD.bazel | 20 + twirl-toolchain/create-toolchain.bzl | 24 + twirl-toolchain/register-toolchains.bzl | 40 + twirl-toolchain/transitions.bzl | 60 + twirl-toolchain/twirl-toolchain.bzl | 19 + twirl/BUILD.bazel | 10 +- twirl/twirl.bzl | 38 +- twirl_compiler_cli_2_13_install.json | 1438 ++++++++++++++ twirl_compiler_cli_3_install.json | 1653 +++++++++++++++++ twirl_install.json | 477 ----- ...stall.json => twirl_test_2_13_install.json | 112 +- twirl_test_3_install.json | 262 +++ workspace.bzl | 53 +- 41 files changed, 4445 insertions(+), 896 deletions(-) create mode 100644 MODULE.bazel create mode 100644 MODULE.bazel.lock delete mode 100644 compiler-cli/BUILD.bazel create mode 100644 scala/BUILD.bazel create mode 100755 scripts/format.sh delete mode 100755 scripts/lint.sh create mode 100644 scripts/publish.sh create mode 100644 test/twirl-compiler-test.bzl create mode 100644 twirl-compiler-cli/BUILD.bazel create mode 100644 twirl-compiler-cli/CommandLineTwirlTemplateCompiler.scala create mode 100644 twirl-compiler-cli/Foo.java create mode 100644 twirl-compiler-cli/pom.xml.tmpl create mode 100644 twirl-compiler-cli/twirl-compiler-cli.bzl create mode 100644 twirl-toolchain/BUILD.bazel create mode 100644 twirl-toolchain/create-toolchain.bzl create mode 100644 twirl-toolchain/register-toolchains.bzl create mode 100644 twirl-toolchain/transitions.bzl create mode 100644 twirl-toolchain/twirl-toolchain.bzl create mode 100644 twirl_compiler_cli_2_13_install.json create mode 100644 twirl_compiler_cli_3_install.json delete mode 100644 twirl_install.json rename twirl_test_install.json => twirl_test_2_13_install.json (64%) create mode 100644 twirl_test_3_install.json diff --git a/.bazelrc b/.bazelrc index 5b83104..2396a7d 100644 --- a/.bazelrc +++ b/.bazelrc @@ -2,10 +2,19 @@ startup --expand_configs_in_place common:ci --color=yes -# At least until https://github.com/lucidsoftware/rules_scala/pull/40 is merged -common --incompatible_java_common_parameters=false +build --strategy=worker,sandboxed,local +build --verbose_failures + +build --incompatible_strict_action_env +build --experimental_worker_multiplex_sandboxing +build --experimental_worker_cancellation +build --worker_sandboxing + +build --java_language_version="21" +build --java_runtime_version="remotejdk_21" +build --tool_java_language_version="21" +build --tool_java_runtime_version="remotejdk_21" -build:ci --verbose_failures build:ci --sandbox_debug build:ci --spawn_strategy=standalone build:ci --genrule_strategy=standalone diff --git a/.bazelversion b/.bazelversion index e3d191c..542f73e 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -bazelbuild/6.3.2 +bazelbuild/7.3.1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 17d8b26..a414c5f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,16 +11,37 @@ jobs: USE_BAZEL_VERSION: ${{ matrix.bazel_version }} strategy: matrix: - os: [ubuntu-22.04] - bazel_version: [bazelbuild/6.5.0, bazelbuild/7.1.1] + os: [ubuntu-24.04] + bazel_version: [bazelbuild/7.3.1] steps: - uses: actions/checkout@v4.1.1 - uses: actions/setup-node@v4.0.2 - - uses: bazel-contrib/setup-bazel@0.8.1 + - uses: bazel-contrib/setup-bazel@0.8.5 with: - bazelisk-version: 1.19.0 + bazelisk-version: 1.20.0 - run: cat .bazelrc.ci >> .bazelrc - - run: ./scripts/lint.sh + - run: ./scripts/format.sh check - run: ./test/run_all_tests.sh ci - run: ./scripts/gen-docs.sh && git diff --exit-code docs/ - run: bazel shutdown + + publish: + if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') + needs: build-and-test + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4.1.1 + - uses: actions/setup-node@v4.0.2 + - uses: bazel-contrib/setup-bazel@0.8.5 + with: + bazelisk-version: 1.20.0 + - run: cat .bazelrc.ci >> .bazelrc + - name: Import gpg keys + run: echo "$PGP_SECRET" | base64 --decode | gpg --import + env: + PGP_SECRET: ${{ secrets.PGP_SECRET }} + - name: Publish to Maven + run: ./scripts/publish.sh + env: + MAVEN_USER: ${{ secrets.SONATYPE_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} \ No newline at end of file diff --git a/BUILD.bazel b/BUILD.bazel index 5b4cf50..3f8aa4c 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,3 +1,24 @@ -load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier") +load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier", "buildifier_test") +load( + "@rules_java//toolchains:default_java_toolchain.bzl", + "DEFAULT_TOOLCHAIN_CONFIGURATION", + "default_java_toolchain", +) -buildifier(name = "buildifier") +default_java_toolchain( + name = "repository_default_toolchain_21", + configuration = DEFAULT_TOOLCHAIN_CONFIGURATION, + java_runtime = "@rules_java//toolchains:remotejdk_21", + javac_supports_worker_multiplex_sandboxing = True, + source_version = "21", + target_version = "21", +) + +buildifier( + name = "buildifier", +) + +buildifier_test( + name = "buildifier_check", + mode = "check", +) diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 0000000..00bb183 --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,6 @@ +############################################################################### +# Bazel now uses Bzlmod by default to manage external dependencies. +# Please consider migrating your external dependencies from WORKSPACE to MODULE.bazel. +# +# For more details, please check https://github.com/bazelbuild/bazel/issues/18958 +############################################################################### diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock new file mode 100644 index 0000000..21b358e --- /dev/null +++ b/MODULE.bazel.lock @@ -0,0 +1,110 @@ +{ + "lockFileVersion": 11, + "registryFileHashes": { + "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", + "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", + "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589", + "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/source.json": "7e3a9adf473e9af076ae485ed649d5641ad50ec5c11718103f34de03170d94ad", + "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", + "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", + "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", + "https://bcr.bazel.build/modules/bazel_features/1.11.0/source.json": "c9320aa53cd1c441d24bd6b716da087ad7e4ff0d9742a9884587596edfe53015", + "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", + "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a", + "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5", + "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", + "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/source.json": "082ed5f9837901fada8c68c2f3ddc958bb22b6d654f71dd73f3df30d45d4b749", + "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", + "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", + "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", + "https://bcr.bazel.build/modules/googletest/1.11.0/source.json": "c73d9ef4268c91bd0c1cd88f1f9dfa08e814b1dbe89b5f594a9f08ba0244d206", + "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", + "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", + "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", + "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", + "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", + "https://bcr.bazel.build/modules/platforms/0.0.9/source.json": "cd74d854bf16a9e002fb2ca7b1a421f4403cda29f824a765acd3a8c56f8d43e6", + "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", + "https://bcr.bazel.build/modules/protobuf/21.7/source.json": "bbe500720421e582ff2d18b0802464205138c06056f443184de39fbb8187b09b", + "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", + "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", + "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", + "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", + "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", + "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", + "https://bcr.bazel.build/modules/rules_cc/0.0.9/source.json": "1f1ba6fea244b616de4a554a0f4983c91a9301640c8fe0dd1d410254115c8430", + "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", + "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1", + "https://bcr.bazel.build/modules/rules_java/7.6.5/source.json": "a805b889531d1690e3c72a7a7e47a870d00323186a9904b36af83aa3d053ee8d", + "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", + "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/source.json": "a075731e1b46bc8425098512d038d416e966ab19684a10a34f4741295642fc35", + "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", + "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", + "https://bcr.bazel.build/modules/rules_license/0.0.7/source.json": "355cc5737a0f294e560d52b1b7a6492d4fff2caf0bef1a315df5a298fca2d34a", + "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", + "https://bcr.bazel.build/modules/rules_pkg/0.7.0/source.json": "c2557066e0c0342223ba592510ad3d812d4963b9024831f7f66fd0584dd8c66c", + "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", + "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", + "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/source.json": "d57902c052424dfda0e71646cb12668d39c4620ee0544294d9d941e7d12bc3a9", + "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", + "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", + "https://bcr.bazel.build/modules/rules_python/0.22.1/source.json": "57226905e783bae7c37c2dd662be078728e48fa28ee4324a7eabcafb5a43d014", + "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", + "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", + "https://bcr.bazel.build/modules/stardoc/0.5.1/source.json": "a96f95e02123320aa015b956f29c00cb818fa891ef823d55148e1a362caacf29", + "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", + "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/source.json": "f1ef7d3f9e0e26d4b23d1c39b5f5de71f584dd7d1b4ef83d9bbba6ec7a6a6459", + "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", + "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d" + }, + "selectedYankedVersions": {}, + "moduleExtensions": { + "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { + "general": { + "bzlTransitiveDigest": "PjIds3feoYE8SGbbIq2SFTZy3zmxeO2tQevJZNDo7iY=", + "usagesDigest": "aLmqbvowmHkkBPve05yyDNGN7oh7QE9kBADr3QIZTZs=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "local_config_apple_cc": { + "bzlFile": "@@apple_support~//crosstool:setup.bzl", + "ruleClassName": "_apple_cc_autoconf", + "attributes": {} + }, + "local_config_apple_cc_toolchains": { + "bzlFile": "@@apple_support~//crosstool:setup.bzl", + "ruleClassName": "_apple_cc_autoconf_toolchains", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [ + [ + "apple_support~", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@platforms//host:extension.bzl%host_platform": { + "general": { + "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", + "usagesDigest": "meSzxn3DUCcYEhq4HQwExWkWtU4EjriRBQLsZN+Q0SU=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "host_platform": { + "bzlFile": "@@platforms//host:extension.bzl", + "ruleClassName": "host_platform_repo", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [] + } + } + } +} diff --git a/README.md b/README.md index 7f497af..1787209 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Twirl Template Rules for Bazel -| Status | Doc +| Status | Stardoc | --- | --- | | [![Build Status](https://github.com/lucidsoftware/rules_twirl/workflows/CI/badge.svg)](https://github.com/lucidsoftware/rules_twirl/actions) | [Stardoc](docs/stardoc/twirl.md) | @@ -16,51 +16,106 @@ Create a file called at the top of your repository named `WORKSPACE` and add the ```python # update version as needed -rules_twirl_version = "9ac789845e3a481fe520af57bd47a4261edb684f" +rules_twirl_version = "TODO" 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), + name = "rules_twirl", + sha256 = "TODO", + 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" +# rules_jvm_external +rules_jvm_external_version = "6.2" + http_archive( name = "rules_jvm_external", - sha256 = "d85951a92c0908c80bd8551002d66cb23c3434409c814179c0ff026b53544dab", - strip_prefix = "rules_jvm_external-{}".format(RULES_JVM_EXTERNAL_TAG), + sha256 = "aa39ecd47e16d5870eba817fe71476802bc371fe2724a2ddee565992df55f4af", + strip_prefix = "rules_jvm_external-{}".format(rules_jvm_external_version), type = "zip", - url = "https://github.com/bazelbuild/rules_jvm_external/archive/{}.zip".format(RULES_JVM_EXTERNAL_TAG), + url = "https://github.com/bazelbuild/rules_jvm_external/archive/{}.zip".format(rules_jvm_external_version), +) + +load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps") +rules_jvm_external_deps() + +load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup") +rules_jvm_external_setup() + +load( + "//:workspace.bzl", + "twirl_compiler_cli_2_13_repositories", + "twirl_compiler_cli_3_repositories", +) +twirl_compiler_cli_3_repositories() +load("@twirl_compiler_cli_3//:defs.bzl", twirl_compiler_cli_3_pinned_maven_install = "pinned_maven_install") +twirl_compiler_cli_3_pinned_maven_install() + +twirl_compiler_cli_2_13_repositories() +load("@twirl_compiler_cli_2_13//:defs.bzl", twirl_compiler_cli_2_13_pinned_maven_install = "pinned_maven_install") +twirl_compiler_cli_2_13_pinned_maven_install() + +# Play routes compiler +load("//twirl-toolchain:register-toolchains.bzl", "twirl_register_toolchains") +twirl_register_toolchains(default_toolchain_name = "twirl-3") +``` + +This installs `rules_twirl` to your `WORKSPACE` and sets up toolchains for a Scala 2.13 and Scala 3 version of the Play routes compiler with Scala 3 being the default. To change the default to Scala 2.13, set `default_toolchain_name = "twirl-2-13"` + +If you want to use a custom Twirl routes compiler, you can set up a custom toolchain in a BUILD.bazel file as follows: +```python +load("@rules_twirl//twirl-toolchain:create-toolchain.bzl", "create_twirl_toolchain") + +create_twirl_toolchain( + name = "twirl-custom", + twirl_compiler = "