forked from hswaw/hscloud
Bartosz Stebel
f5b1a215f4
There's a lot of ugly hacks here, but this has been the state of prod for months now, so we should reflect that. Also, this bumps a bunch of workspace deps. Change-Id: I744e0d3aff27036cfed73416cf442c7d62444a8b Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1473 Reviewed-by: q3k <q3k@hackerspace.pl>
150 lines
3.9 KiB
Python
150 lines
3.9 KiB
Python
load("@pydeps//:requirements.bzl", "requirement")
|
|
load("@rules_python//python:defs.bzl", "py_binary")
|
|
load("@io_bazel_rules_docker//python:image.bzl", "py_layer")
|
|
load("@io_bazel_rules_docker//python3:image.bzl", "py3_image")
|
|
load("@io_bazel_rules_docker//container:container.bzl", "container_layer", "container_image")
|
|
load("@io_bazel_rules_docker//docker/util:run.bzl", "container_run_and_extract", "container_run_and_commit_layer")
|
|
load("@io_bazel_rules_docker//docker/package_managers:download_pkgs.bzl", "download_pkgs")
|
|
load("@io_bazel_rules_docker//docker/package_managers:install_pkgs.bzl", "install_pkgs")
|
|
|
|
# - - base docker stuff - -
|
|
|
|
download_pkgs(
|
|
name = "apt_py_is_py3",
|
|
image_tar = "@python-debian//image",
|
|
packages = [
|
|
# rules_docker python wants /usr/bin/python
|
|
"python-is-python3",
|
|
],
|
|
)
|
|
|
|
install_pkgs(
|
|
name = "base_image",
|
|
output_image_name = "base_image",
|
|
image_tar = "@python-debian//image",
|
|
installables_tar = ":apt_py_is_py3.tar",
|
|
installation_cleanup_commands = "rm -rf /var/lib/apt/lists/* /usr/share/doc && apt remove -y libbluetooth3 mariadb-common tk && apt autoremove -y",
|
|
)
|
|
|
|
BASE_IMAGE = ":base_image"
|
|
|
|
# overkill rube goldberg setup to build static files begins
|
|
# - - - -
|
|
|
|
container_run_and_extract(
|
|
name = "static_pack",
|
|
commands = [
|
|
"tar cpJvf /out.tar.xz -C /opt/mailman/web/static ./",
|
|
],
|
|
extract_file = "/out.tar.xz",
|
|
image = ":static_build_image.tar",
|
|
)
|
|
|
|
container_image(
|
|
name = "static_build_image",
|
|
layers = [":static_build_layer"],
|
|
base = BASE_IMAGE,
|
|
)
|
|
|
|
# this will also contain .pyc files, but the python binary will be the same
|
|
# on prod, so it's fine
|
|
container_run_and_commit_layer(
|
|
name = "static_build_layer",
|
|
commands = [
|
|
"./app/mailman-web/manage collectstatic",
|
|
"./app/mailman-web/manage compress",
|
|
# gettext is cursed, TODO make this work
|
|
#"./app/mailman-web/manage compilemessages",
|
|
],
|
|
image = ":build_container.tar",
|
|
docker_run_flags = ["--entrypoint="],
|
|
)
|
|
|
|
py3_image(
|
|
name = "build_container",
|
|
srcs = [":manage"],
|
|
main = "manage.py",
|
|
base = ":build_tools_container",
|
|
layers = [":deps_layer"],
|
|
# this doesn't work for some reason - this is always rebuilt, unless
|
|
# you pass --nostamp globally
|
|
stamp = 0,
|
|
)
|
|
|
|
download_pkgs(
|
|
name = "build_tools",
|
|
image_tar = "@python-debian//image",
|
|
packages = [
|
|
"sassc",
|
|
"gettext",
|
|
],
|
|
)
|
|
|
|
install_pkgs(
|
|
name = "build_tools_container",
|
|
output_image_name = "build_tools_container",
|
|
image_tar = BASE_IMAGE + '.tar',
|
|
installables_tar = ":build_tools.tar",
|
|
installation_cleanup_commands = "rm -rf /var/lib/apt/lists/* /usr/share/doc",
|
|
)
|
|
|
|
# - - - -
|
|
# overkill rube goldberg setup to build static files ends
|
|
|
|
|
|
# - - python stuff - -
|
|
|
|
# this is purely a build optimization - put the pip deps into a separate layer
|
|
py_layer(
|
|
name = "deps_layer",
|
|
deps = [
|
|
requirement("Django"),
|
|
requirement("postorius"),
|
|
requirement("hyperkitty"),
|
|
requirement("gunicorn"),
|
|
requirement("psycopg2-binary"),
|
|
],
|
|
)
|
|
|
|
py_library(
|
|
name = "django_base",
|
|
srcs = ["settings.py", "urls.py"]
|
|
+ glob(["upstream_settings/*.py"]),
|
|
deps = [
|
|
requirement("Django"),
|
|
requirement("postorius"),
|
|
requirement("hyperkitty"),
|
|
requirement("gunicorn"),
|
|
requirement("psycopg2-binary"),
|
|
],
|
|
)
|
|
|
|
py_binary(
|
|
name = "manage",
|
|
srcs = ["manage.py"],
|
|
deps = [":django_base"],
|
|
)
|
|
|
|
py_binary(
|
|
name = "serve",
|
|
srcs = ["serve.py"],
|
|
deps = [":django_base"],
|
|
)
|
|
|
|
# prod docker image
|
|
|
|
py3_image(
|
|
name = "mailman-web",
|
|
srcs = ["container_main.py"],
|
|
deps = [
|
|
":django_base",
|
|
":manage",
|
|
":serve",
|
|
],
|
|
layers = [
|
|
":deps_layer",
|
|
],
|
|
main = "container_main.py",
|
|
#base = ":base_container"
|
|
base = ":static_build_image",
|
|
)
|