From d8bbe57b1774c59bb6a501c6be2445784855faf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomek=20W=C3=B3jcik?= Date: Mon, 27 Oct 2025 19:04:48 +0000 Subject: [PATCH] =?UTF-8?q?BTHLABS-64:=20Support=20for=20customized=20envi?= =?UTF-8?q?ronments=20Co-authored-by:=20Tomek=20W=C3=B3jcik=20=20Co-committed-by:=20Tomek=20W=C3=B3jcik=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/development.yaml | 31 +++------ .gitignore | 1 + .../hotpocket.bthlab/configs/backend/admin | 6 +- .../hotpocket.bthlab/configs/backend/webapp | 6 +- .../hotpocket.bthlab/kustomization.yaml | 5 +- .../resources/backend/admin.yaml | 48 +++++++------- .../resources/backend/celery-beat.yaml | 45 ++++++------- .../resources/backend/celery-worker.yaml | 45 ++++++------- .../backend/config-map-local-deps.yaml | 18 ++++++ .../resources/backend/job-migrations.yaml | 45 ++++++------- .../resources/backend/webapp.yaml | 48 +++++++------- services/.dockerignore | 1 + .../hotpocket_backend/apps/core/apps.py | 13 ++++ .../hotpocket_backend/apps/core/types.py | 10 ++- .../apps/ui/context_processors.py | 18 ++++++ .../apps/ui/templates/ui/base.html | 6 ++ .../apps/ui/templates/ui/page.html | 12 +++- .../hotpocket_backend/settings/base.py | 6 +- .../settings/deployment/build.py | 6 +- .../hotpocket_backend/settings/webapp.py | 11 ++++ services/backend/poetry.lock | 13 ++-- services/backend/pyproject.toml | 2 +- .../hotpocket_common/constants/__init__.py | 2 +- .../common/hotpocket_common/constants/core.py | 63 +++++++++++++++++-- tasks.py | 3 +- 25 files changed, 291 insertions(+), 173 deletions(-) create mode 100644 deployment/hotpocket.bthlab/resources/backend/config-map-local-deps.yaml diff --git a/.gitea/workflows/development.yaml b/.gitea/workflows/development.yaml index 5cb3d18..a9f8a12 100644 --- a/.gitea/workflows/development.yaml +++ b/.gitea/workflows/development.yaml @@ -29,8 +29,8 @@ jobs: roleId: "${{ secrets.VAULT_ROLE_ID }}" secretId: "${{ secrets.VAULT_SECRET_ID }}" secrets: | - gitea/data/docker-hosted.nexus.bthlabs.pl username | DOCKER_USERNAME ; - gitea/data/docker-hosted.nexus.bthlabs.pl password | DOCKER_PASSWORD + gitea/data/docker-hosted.nexus.bthlab.bthlabs.net username | DOCKER_USERNAME ; + gitea/data/docker-hosted.nexus.bthlab.bthlabs.net password | DOCKER_PASSWORD - name: "Set up Docker Buildx" id: "setup-docker-buildx" uses: "docker/setup-buildx-action@v3" @@ -44,7 +44,7 @@ jobs: - name: "Login to Docket Registry" uses: "docker/login-action@v3" with: - registry: "docker-hosted.nexus.bthlabs.pl" + registry: "nexus.bthlab.bthlabs.net:8002" username: "${{ steps.import-secrets.outputs.DOCKER_USERNAME }}" password: "${{ steps.import-secrets.outputs.DOCKER_PASSWORD }}" - name: "Build `backend-deployment` image" @@ -58,28 +58,11 @@ jobs: --cache-from "type=registry,ref=nexus.bthlab.bthlabs.net:8001/hotpocket" \ --cache-to "type=registry,ref=nexus.bthlab.bthlabs.net:8001/hotpocket,mode=max" \ --push \ - --platform linux/amd64,linux/arm64 \ + --platform linux/amd64 \ --build-arg IMAGE_ID="deployment.${SHORT_SHA}" \ -f services/backend/Dockerfile \ --target deployment \ - -t "docker-hosted.nexus.bthlabs.pl/hotpocket/backend:deployment-${VERSION}-${BUILD}" \ - services/ - - name: "Build `backend-aio` image" - env: - SHORT_SHA: "${{ steps.get-build-options.outputs.short-sha }}" - VERSION: "${{ steps.get-backend-version.outputs.version }}" - BUILD: "${{ steps.get-backend-version.outputs.build-number }}" - run: | - set -x - docker buildx build \ - --cache-from "type=registry,ref=nexus.bthlab.bthlabs.net:8001/hotpocket" \ - --cache-to "type=registry,ref=nexus.bthlab.bthlabs.net:8001/hotpocket,mode=max" \ - --push \ - --platform linux/amd64,linux/arm64 \ - --build-arg IMAGE_ID="aio.${SHORT_SHA}" \ - -f services/backend/Dockerfile \ - --target aio \ - -t "docker-hosted.nexus.bthlabs.pl/hotpocket/backend:aio-${VERSION}-${BUILD}" \ + -t "nexus.bthlab.bthlabs.net:8002/hotpocket/backend:deployment-${VERSION}-${BUILD}" \ services/ deploy: @@ -143,7 +126,7 @@ jobs: cd deployment/hotpocket.bthlab ; export KUBECONFIG="/opt/k8s/etc/kubeconfig" ; /opt/k8s/bin/kubectl config use-context ${KUBERNETES_CLUSTER} ; - /opt/k8s/bin/kubectl -n ${KUBERNETES_NAMESPACE} set image cronjobs/backend-job-migrations migrations=docker-hosted.nexus.bthlabs.pl/hotpocket/backend:${BACKEND_TAG} ; + /opt/k8s/bin/kubectl -n ${KUBERNETES_NAMESPACE} set image cronjobs/backend-job-migrations migrations=nexus.bthlab.bthlabs.net:8002/hotpocket/backend:${BACKEND_TAG} ; /opt/k8s/bin/kubectl -n ${KUBERNETES_NAMESPACE} delete jobs --ignore-not-found=true backend-job-migrations ; /opt/k8s/bin/kubectl -n ${KUBERNETES_NAMESPACE} create job backend-job-migrations --from=cronjob/backend-job-migrations ; /opt/k8s/bin/kubectl -n ${KUBERNETES_NAMESPACE} wait --for=condition=complete --timeout=300s job/backend-job-migrations @@ -158,6 +141,6 @@ jobs: cd deployment/hotpocket.bthlab ; export KUBECONFIG="/opt/k8s/etc/kubeconfig" ; /opt/k8s/bin/kubectl config use-context ${KUBERNETES_CLUSTER} ; - /opt/k8s/bin/kustomize edit set image hotpocket-backend=docker-hosted.nexus.bthlabs.pl/hotpocket/backend:${BACKEND_TAG} ; + /opt/k8s/bin/kustomize edit set image hotpocket-backend=nexus.bthlab.bthlabs.net:8002/hotpocket/backend:${BACKEND_TAG} ; /opt/k8s/bin/kustomize build . | /opt/k8s/bin/kubectl apply -f - ) diff --git a/.gitignore b/.gitignore index 4d62ef8..d225698 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .ci/ .envrc* .ipythonhome/ +services/vendor/ /docker-compose-ci-*.yaml diff --git a/deployment/hotpocket.bthlab/configs/backend/admin b/deployment/hotpocket.bthlab/configs/backend/admin index d274bbb..f0a2764 100644 --- a/deployment/hotpocket.bthlab/configs/backend/admin +++ b/deployment/hotpocket.bthlab/configs/backend/admin @@ -1,5 +1,7 @@ -DJANGO_SETTINGS_MODULE=hotpocket_backend.settings.deployment.admin +DJANGO_SETTINGS_MODULE=hotpocket_bthlabs.settings.admin HOTPOCKET_BACKEND_GUNICORN_WORKERS=2 +HOTPOCKET_BACKEND_SECRETS_PACKAGE=hotpocket_bthlabs.secrets +HOTPOCKET_BACKEND_ENV=development HOTPOCKET_BACKEND_APP=admin HOTPOCKET_BACKEND_SECRET_KEY=thisissecret -HOTPOCKET_BACKEND_ALLOWED_HOSTS=thisissecret +HOTPOCKET_BACKEND_ALLOWED_HOSTS=admin.hotpocket.bthlab.bthlabs.net diff --git a/deployment/hotpocket.bthlab/configs/backend/webapp b/deployment/hotpocket.bthlab/configs/backend/webapp index ecec2d8..e83a53f 100644 --- a/deployment/hotpocket.bthlab/configs/backend/webapp +++ b/deployment/hotpocket.bthlab/configs/backend/webapp @@ -1,7 +1,9 @@ -DJANGO_SETTINGS_MODULE=hotpocket_backend.settings.deployment.webapp +DJANGO_SETTINGS_MODULE=hotpocket_bthlabs.settings.webapp HOTPOCKET_BACKEND_GUNICORN_WORKERS=2 +HOTPOCKET_BACKEND_SECRETS_PACKAGE=hotpocket_bthlabs.secrets +HOTPOCKET_BACKEND_ENV=development HOTPOCKET_BACKEND_APP=webapp HOTPOCKET_BACKEND_SECRET_KEY=thisissecret -HOTPOCKET_BACKEND_ALLOWED_HOSTS=thisissecret +HOTPOCKET_BACKEND_ALLOWED_HOSTS=app.hotpocket.bthlab.bthlabs.net HOTPOCKET_BACKEND_SAVES_SAVE_ADAPTER=hotpocket_backend.apps.saves.adapters.postgres:PostgresSaveAdapter HOTPOCKET_BACKEND_SAVES_ASSOCIATION_ADAPTER=hotpocket_backend.apps.saves.adapters.postgres:PostgresAssociationAdapter diff --git a/deployment/hotpocket.bthlab/kustomization.yaml b/deployment/hotpocket.bthlab/kustomization.yaml index d394780..70c23d9 100644 --- a/deployment/hotpocket.bthlab/kustomization.yaml +++ b/deployment/hotpocket.bthlab/kustomization.yaml @@ -4,6 +4,7 @@ kind: Kustomization resources: - resources/namespace.yaml - resources/volumes.yaml + - resources/backend/config-map-local-deps.yaml - resources/backend/job-migrations.yaml - resources/backend/webapp.yaml - resources/backend/webapp-service.yaml @@ -35,5 +36,5 @@ patches: [] images: - name: hotpocket-backend - newName: docker-hosted.nexus.bthlabs.pl/hotpocket/backend - newTag: deployment-v25.10.4-01 + newName: nexus.bthlab.bthlabs.net:8002/hotpocket/backend + newTag: deployment-8e09ae51-01 diff --git a/deployment/hotpocket.bthlab/resources/backend/admin.yaml b/deployment/hotpocket.bthlab/resources/backend/admin.yaml index 708a0b6..0d4ca76 100644 --- a/deployment/hotpocket.bthlab/resources/backend/admin.yaml +++ b/deployment/hotpocket.bthlab/resources/backend/admin.yaml @@ -26,7 +26,7 @@ spec: containers: - name: app image: hotpocket-backend:latest - command: + args: - "/srv/venv/bin/gunicorn" - "-c" - "/srv/lib/gunicorn.conf.py" @@ -37,36 +37,21 @@ spec: - configMapRef: name: backend-admin-config env: - - name: HOTPOCKET_BACKEND_SECRET_KEY + - name: VAULT_URL valueFrom: secretKeyRef: - name: backend-admin - key: secret_key - - name: HOTPOCKET_BACKEND_ALLOWED_HOSTS + name: backend-vault + key: url + - name: VAULT_ROLE_ID valueFrom: secretKeyRef: - name: backend-admin - key: allowed_hosts - - name: HOTPOCKET_BACKEND_DATABASE_USER + name: backend-vault + key: role_id + - name: VAULT_SECRET_ID valueFrom: secretKeyRef: - name: backend-postgres - key: username - - name: HOTPOCKET_BACKEND_DATABASE_PASSWORD - valueFrom: - secretKeyRef: - name: backend-postgres - key: password - - name: HOTPOCKET_BACKEND_CELERY_BROKER_URL - valueFrom: - secretKeyRef: - name: backend-celery - key: broker_url - - name: HOTPOCKET_BACKEND_CELERY_RESULT_BACKEND - valueFrom: - secretKeyRef: - name: backend-celery - key: result_backend + name: backend-vault + key: secret_id ports: - containerPort: 8000 name: http @@ -91,6 +76,15 @@ spec: name: shm - mountPath: /srv/run name: backend-admin-srv-run + - name: backend-admin-local-deps + mountPath: "/srv/lib/requirements.txt" + subPath: "requirements.txt" + - name: backend-admin-local-deps + mountPath: "/srv/etc/entrypoint.d/01-install-extra-deps.sh" + subPath: "01-install-extra-deps.sh" + - name: backend-admin-local-deps + mountPath: "/srv/etc/entrypoint.d/99-collectstatic.sh" + subPath: "99-collectstatic.sh" dnsPolicy: ClusterFirst restartPolicy: Always volumes: @@ -99,3 +93,7 @@ spec: medium: Memory - name: backend-admin-srv-run emptyDir: {} + - name: backend-admin-local-deps + configMap: + name: "backend-local-deps" + defaultMode: 0755 diff --git a/deployment/hotpocket.bthlab/resources/backend/celery-beat.yaml b/deployment/hotpocket.bthlab/resources/backend/celery-beat.yaml index 3c396a1..4e9cfdb 100644 --- a/deployment/hotpocket.bthlab/resources/backend/celery-beat.yaml +++ b/deployment/hotpocket.bthlab/resources/backend/celery-beat.yaml @@ -20,7 +20,7 @@ spec: containers: - name: app image: hotpocket-backend:latest - command: + args: - "/srv/venv/bin/celery" - "-A" - "hotpocket_backend.celery:app" @@ -35,36 +35,21 @@ spec: - configMapRef: name: backend-webapp-config env: - - name: HOTPOCKET_BACKEND_SECRET_KEY + - name: VAULT_URL valueFrom: secretKeyRef: - name: backend-webapp - key: secret_key - - name: HOTPOCKET_BACKEND_ALLOWED_HOSTS + name: backend-vault + key: url + - name: VAULT_ROLE_ID valueFrom: secretKeyRef: - name: backend-webapp - key: allowed_hosts - - name: HOTPOCKET_BACKEND_DATABASE_USER + name: backend-vault + key: role_id + - name: VAULT_SECRET_ID valueFrom: secretKeyRef: - name: backend-postgres - key: username - - name: HOTPOCKET_BACKEND_DATABASE_PASSWORD - valueFrom: - secretKeyRef: - name: backend-postgres - key: password - - name: HOTPOCKET_BACKEND_CELERY_BROKER_URL - valueFrom: - secretKeyRef: - name: backend-celery - key: broker_url - - name: HOTPOCKET_BACKEND_CELERY_RESULT_BACKEND - valueFrom: - secretKeyRef: - name: backend-celery - key: result_backend + name: backend-vault + key: secret_id volumeMounts: - mountPath: /dev/shm name: shm @@ -72,6 +57,12 @@ spec: name: backend-celery-beat-srv-run - mountPath: /srv/uploads name: backend-celery-beat-srv-uploads + - name: backend-admin-local-deps + mountPath: "/srv/lib/requirements.txt" + subPath: "requirements.txt" + - name: backend-admin-local-deps + mountPath: "/srv/etc/entrypoint.d/01-install-extra-deps.sh" + subPath: "01-install-extra-deps.sh" dnsPolicy: ClusterFirst restartPolicy: Always volumes: @@ -83,3 +74,7 @@ spec: claimName: backend-celery-beat-run - name: backend-celery-beat-srv-uploads emptyDir: {} + - name: backend-admin-local-deps + configMap: + name: "backend-local-deps" + defaultMode: 0755 diff --git a/deployment/hotpocket.bthlab/resources/backend/celery-worker.yaml b/deployment/hotpocket.bthlab/resources/backend/celery-worker.yaml index 507d3c0..82e9733 100644 --- a/deployment/hotpocket.bthlab/resources/backend/celery-worker.yaml +++ b/deployment/hotpocket.bthlab/resources/backend/celery-worker.yaml @@ -26,7 +26,7 @@ spec: containers: - name: app image: hotpocket-backend:latest - command: + args: - "/srv/venv/bin/celery" - "-A" - "hotpocket_backend.celery:app" @@ -43,36 +43,21 @@ spec: - configMapRef: name: backend-webapp-config env: - - name: HOTPOCKET_BACKEND_SECRET_KEY + - name: VAULT_URL valueFrom: secretKeyRef: - name: backend-webapp - key: secret_key - - name: HOTPOCKET_BACKEND_ALLOWED_HOSTS + name: backend-vault + key: url + - name: VAULT_ROLE_ID valueFrom: secretKeyRef: - name: backend-webapp - key: allowed_hosts - - name: HOTPOCKET_BACKEND_DATABASE_USER + name: backend-vault + key: role_id + - name: VAULT_SECRET_ID valueFrom: secretKeyRef: - name: backend-postgres - key: username - - name: HOTPOCKET_BACKEND_DATABASE_PASSWORD - valueFrom: - secretKeyRef: - name: backend-postgres - key: password - - name: HOTPOCKET_BACKEND_CELERY_BROKER_URL - valueFrom: - secretKeyRef: - name: backend-celery - key: broker_url - - name: HOTPOCKET_BACKEND_CELERY_RESULT_BACKEND - valueFrom: - secretKeyRef: - name: backend-celery - key: result_backend + name: backend-vault + key: secret_id volumeMounts: - mountPath: /dev/shm name: shm @@ -80,6 +65,12 @@ spec: name: backend-celery-worker-srv-run - mountPath: /srv/uploads name: backend-celery-worker-srv-uploads + - name: backend-admin-local-deps + mountPath: "/srv/lib/requirements.txt" + subPath: "requirements.txt" + - name: backend-admin-local-deps + mountPath: "/srv/etc/entrypoint.d/01-install-extra-deps.sh" + subPath: "01-install-extra-deps.sh" dnsPolicy: ClusterFirst restartPolicy: Always volumes: @@ -91,3 +82,7 @@ spec: - name: backend-celery-worker-srv-uploads persistentVolumeClaim: claimName: backend-uploads + - name: backend-admin-local-deps + configMap: + name: "backend-local-deps" + defaultMode: 0755 diff --git a/deployment/hotpocket.bthlab/resources/backend/config-map-local-deps.yaml b/deployment/hotpocket.bthlab/resources/backend/config-map-local-deps.yaml new file mode 100644 index 0000000..62d9a49 --- /dev/null +++ b/deployment/hotpocket.bthlab/resources/backend/config-map-local-deps.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: backend-local-deps + namespace: hotpocket-development +data: + 01-install-extra-deps.sh: | + #!/usr/bin/env bash + export PIP_INDEX_URL="https://nexus.bthlabs.pl/repository/pypi/simple/" + /srv/venv/bin/pip install -r /srv/lib/requirements.txt + 99-collectstatic.sh: | + #!/usr/bin/env bash + ( + cd /srv/app; + ./manage.py collectstatic --no-input + ) + requirements.txt: | + hotpocket_bthlabs==25.10.27 diff --git a/deployment/hotpocket.bthlab/resources/backend/job-migrations.yaml b/deployment/hotpocket.bthlab/resources/backend/job-migrations.yaml index 7cee752..292d8cb 100644 --- a/deployment/hotpocket.bthlab/resources/backend/job-migrations.yaml +++ b/deployment/hotpocket.bthlab/resources/backend/job-migrations.yaml @@ -22,7 +22,7 @@ spec: containers: - name: migrations image: hotpocket-backend:latest - command: + args: - "./manage.py" - "migrate" envFrom: @@ -31,36 +31,21 @@ spec: - configMapRef: name: backend-webapp-config env: - - name: HOTPOCKET_BACKEND_SECRET_KEY + - name: VAULT_URL valueFrom: secretKeyRef: - name: backend-webapp - key: secret_key - - name: HOTPOCKET_BACKEND_ALLOWED_HOSTS + name: backend-vault + key: url + - name: VAULT_ROLE_ID valueFrom: secretKeyRef: - name: backend-webapp - key: allowed_hosts - - name: HOTPOCKET_BACKEND_DATABASE_USER + name: backend-vault + key: role_id + - name: VAULT_SECRET_ID valueFrom: secretKeyRef: - name: backend-postgres - key: username - - name: HOTPOCKET_BACKEND_DATABASE_PASSWORD - valueFrom: - secretKeyRef: - name: backend-postgres - key: password - - name: HOTPOCKET_BACKEND_CELERY_BROKER_URL - valueFrom: - secretKeyRef: - name: backend-celery - key: broker_url - - name: HOTPOCKET_BACKEND_CELERY_RESULT_BACKEND - valueFrom: - secretKeyRef: - name: backend-celery - key: result_backend + name: backend-vault + key: secret_id volumeMounts: - mountPath: /dev/shm name: shm @@ -68,6 +53,12 @@ spec: name: backend-webapp-srv-run - mountPath: /srv/uploads name: backend-webapp-srv-uploads + - name: backend-admin-local-deps + mountPath: "/srv/lib/requirements.txt" + subPath: "requirements.txt" + - name: backend-admin-local-deps + mountPath: "/srv/etc/entrypoint.d/01-install-extra-deps.sh" + subPath: "01-install-extra-deps.sh" dnsPolicy: ClusterFirst restartPolicy: Never volumes: @@ -78,3 +69,7 @@ spec: emptyDir: {} - name: backend-webapp-srv-uploads emptyDir: {} + - name: backend-admin-local-deps + configMap: + name: "backend-local-deps" + defaultMode: 0755 diff --git a/deployment/hotpocket.bthlab/resources/backend/webapp.yaml b/deployment/hotpocket.bthlab/resources/backend/webapp.yaml index 69a2406..29d27d9 100644 --- a/deployment/hotpocket.bthlab/resources/backend/webapp.yaml +++ b/deployment/hotpocket.bthlab/resources/backend/webapp.yaml @@ -26,7 +26,7 @@ spec: containers: - name: app image: hotpocket-backend:latest - command: + args: - "/srv/venv/bin/gunicorn" - "-c" - "/srv/lib/gunicorn.conf.py" @@ -37,36 +37,21 @@ spec: - configMapRef: name: backend-webapp-config env: - - name: HOTPOCKET_BACKEND_SECRET_KEY + - name: VAULT_URL valueFrom: secretKeyRef: - name: backend-webapp - key: secret_key - - name: HOTPOCKET_BACKEND_ALLOWED_HOSTS + name: backend-vault + key: url + - name: VAULT_ROLE_ID valueFrom: secretKeyRef: - name: backend-webapp - key: allowed_hosts - - name: HOTPOCKET_BACKEND_DATABASE_USER + name: backend-vault + key: role_id + - name: VAULT_SECRET_ID valueFrom: secretKeyRef: - name: backend-postgres - key: username - - name: HOTPOCKET_BACKEND_DATABASE_PASSWORD - valueFrom: - secretKeyRef: - name: backend-postgres - key: password - - name: HOTPOCKET_BACKEND_CELERY_BROKER_URL - valueFrom: - secretKeyRef: - name: backend-celery - key: broker_url - - name: HOTPOCKET_BACKEND_CELERY_RESULT_BACKEND - valueFrom: - secretKeyRef: - name: backend-celery - key: result_backend + name: backend-vault + key: secret_id ports: - containerPort: 8000 name: http @@ -93,6 +78,15 @@ spec: name: backend-webapp-srv-run - mountPath: /srv/uploads name: backend-webapp-srv-uploads + - name: backend-admin-local-deps + mountPath: "/srv/lib/requirements.txt" + subPath: "requirements.txt" + - name: backend-admin-local-deps + mountPath: "/srv/etc/entrypoint.d/01-install-extra-deps.sh" + subPath: "01-install-extra-deps.sh" + - name: backend-admin-local-deps + mountPath: "/srv/etc/entrypoint.d/99-collectstatic.sh" + subPath: "99-collectstatic.sh" dnsPolicy: ClusterFirst restartPolicy: Always volumes: @@ -104,3 +98,7 @@ spec: - name: backend-webapp-srv-uploads persistentVolumeClaim: claimName: backend-uploads + - name: backend-admin-local-deps + configMap: + name: "backend-local-deps" + defaultMode: 0755 diff --git a/services/.dockerignore b/services/.dockerignore index cc99fb0..65049d1 100644 --- a/services/.dockerignore +++ b/services/.dockerignore @@ -13,4 +13,5 @@ backend/hotpocket_backend/settings/metal/ backend/hotpocket_backend/static/ extension/node_modules/ extension/dist/ +vendor/ .envrc* diff --git a/services/backend/hotpocket_backend/apps/core/apps.py b/services/backend/hotpocket_backend/apps/core/apps.py index 7586d1c..fe226b3 100644 --- a/services/backend/hotpocket_backend/apps/core/apps.py +++ b/services/backend/hotpocket_backend/apps/core/apps.py @@ -1,12 +1,25 @@ # -*- coding: utf-8 -*- from __future__ import annotations +import logging + from django.apps import AppConfig from django.utils.translation import gettext_lazy as _ +from hotpocket_backend.apps.core.conf import settings + +LOGGER = logging.getLogger(__name__) + class CoreConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' label = 'core' name = 'hotpocket_backend.apps.core' verbose_name = _('Core') + + def ready(self): + LOGGER.info( + 'HotPocket Backend ready: env=`%s` app=`%s`', + settings.ENV.name, + settings.APP.name, + ) diff --git a/services/backend/hotpocket_backend/apps/core/types.py b/services/backend/hotpocket_backend/apps/core/types.py index db0750a..b358bb6 100644 --- a/services/backend/hotpocket_backend/apps/core/types.py +++ b/services/backend/hotpocket_backend/apps/core/types.py @@ -6,7 +6,7 @@ import typing from hotpocket_backend.secrets.admin import AdminSecrets from hotpocket_backend.secrets.webapp import WebAppSecrets -from hotpocket_common.constants import App, Env +from hotpocket_common.constants import App, Environment class PSettings(typing.Protocol): @@ -16,7 +16,7 @@ class PSettings(typing.Protocol): SECRET_KEY: str APP: App - ENV: Env + ENV: Environment SECRETS: AdminSecrets | WebAppSecrets @@ -32,3 +32,9 @@ class PSettings(typing.Protocol): UPLOADS_PATH: pathlib.Path AUTH_KEY_TTL: int + + UI_BASE_HEAD_INCLUDES: list + UI_BASE_SCRIPT_INCLUDES: list + + UI_PAGE_HEAD_INCLUDES: list + UI_PAGE_SCRIPT_INCLUDES: list diff --git a/services/backend/hotpocket_backend/apps/ui/context_processors.py b/services/backend/hotpocket_backend/apps/ui/context_processors.py index e3a24c0..223cbcb 100644 --- a/services/backend/hotpocket_backend/apps/ui/context_processors.py +++ b/services/backend/hotpocket_backend/apps/ui/context_processors.py @@ -82,3 +82,21 @@ def appearance_settings(request: HttpRequest) -> dict: return { 'APPEARANCE_SETTINGS': result, } + + +def base_includes(request: HttpRequest) -> dict: + return { + 'BASE_INCLUDES': { + 'head': settings.UI_BASE_HEAD_INCLUDES, + 'script': settings.UI_BASE_SCRIPT_INCLUDES, + }, + } + + +def page_includes(request: HttpRequest) -> dict: + return { + 'PAGE_INCLUDES': { + 'head': settings.UI_PAGE_HEAD_INCLUDES, + 'script': settings.UI_PAGE_SCRIPT_INCLUDES, + }, + } diff --git a/services/backend/hotpocket_backend/apps/ui/templates/ui/base.html b/services/backend/hotpocket_backend/apps/ui/templates/ui/base.html index ff8e277..f210fde 100644 --- a/services/backend/hotpocket_backend/apps/ui/templates/ui/base.html +++ b/services/backend/hotpocket_backend/apps/ui/templates/ui/base.html @@ -31,11 +31,17 @@ + {% for head_include in BASE_INCLUDES.head %} + {% include head_include %} + {% endfor %} {% block page_head %}{% endblock %} {% block body %} {% endblock %} {% block scripts %}{% endblock %} + {% for script_include in BASE_INCLUDES.script %} + {% include script_include %} + {% endfor %} diff --git a/services/backend/hotpocket_backend/apps/ui/templates/ui/page.html b/services/backend/hotpocket_backend/apps/ui/templates/ui/page.html index 72231b9..b8cda94 100644 --- a/services/backend/hotpocket_backend/apps/ui/templates/ui/page.html +++ b/services/backend/hotpocket_backend/apps/ui/templates/ui/page.html @@ -2,6 +2,12 @@ {% load i18n static ui %} +{% block page_head %} + {% for head_include in PAGE_INCLUDES.head %} + {% include head_include %} + {% endfor %} +{% endblock %} + {% block body %}