Bazoku brings Heroku deployments to bazel. We could have called this rules_heroku but bazoku sounds too much like bazooka to turn down. After all, bazoku literally launches your bazel target into Heroku 🚀.
All of the languages we have tested can be seen in the examples directory. Other languages may also be supported but we just haven't tried them. So far, we've tried:
gitCLI available.- Existing app created in Heroku.
Adding the following to your Bazel WORKSPACE file will fetch bazoku and its dependencies:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "bazoku",
sha256 = "1fced00d0658a6026dda3f1681dbdadbefd9e1c06fb7b95b7ce72a31ce06b512",
urls = ["https://github.com/salesforce/bazoku/releases/download/v0.3.0/bazoku-v0.3.0.tar.gz"],
)
load("@bazoku//tools:deps.bzl", "bazoku_deps")
bazoku_deps()
...
load("@bazoku//:bazoku.bzl", "bazoku")
go_binary(
name = "example",
srcs = ["main.go"]
)
bazoku(
name = "bazoku-deployment",
heroku_app_name = "my-heroku-app-name-123",
binary = ":example"
)
Heroku uses a linux/amd64 architecture. This means that any executables generated should be compatible with that. An example is provided below for how to do this for a golang application:
cd examples
bazel run go:bazoku-deployment --platforms=@io_bazel_rules_go//go/toolchain:linux_amd64
There's also another example for a python application:
cd examples
bazel run python:bazoku-deployment
If the non-interactive methods (below) are not provided, the heroku CLI will prompt for credentials.
-
The Heroku CLI checks for valid authentication in the
.netrcfile (see details). That means that if there are valid credentials there, bazoku does not require any interactive authentication to heroku. -
The Heroku CLI also checks for the presence of the
HEROKU_API_KEYenvironment variable. If a Heroku API key is set, the CLI will read the value & won't prompt for credentials.
-
We've only tested applications in the examples directory. Different use-cases aren't guaranteed to work. This was a fun side-project & hasn't been battle tested in production yet..
-
We've only tested running deployments from MacOS host machines so far.