Alembic et le point d'entree lisent la configuration de l'application
build / Garde-fou (pull_request) Successful in 9m19s
build / Images Harbor (catalog-sync, Dockerfile.catalog-sync) (pull_request) Skipped
build / Images Harbor (web, Dockerfile) (pull_request) Skipped
build / Images Harbor (catalog-sync, Dockerfile.catalog-sync) (push) Successful in 9m45s
build / Garde-fou (push) Successful in 9m19s
build / Images Harbor (web, Dockerfile) (push) Successful in 13m10s
build / Garde-fou (pull_request) Successful in 9m19s
build / Images Harbor (catalog-sync, Dockerfile.catalog-sync) (pull_request) Skipped
build / Images Harbor (web, Dockerfile) (pull_request) Skipped
build / Images Harbor (catalog-sync, Dockerfile.catalog-sync) (push) Successful in 9m45s
build / Garde-fou (push) Successful in 9m19s
build / Images Harbor (web, Dockerfile) (push) Successful in 13m10s
This commit is contained in:
1 parent
acf72da7f8
commit
5766e24213
3 files changed
+26
-4
No files matched your search
@@ -6,7 +6,9 @@
|
||||
# qu'une indisponibilite visible.
|
||||
set -eu
|
||||
|
||||
if [ -n "${ENCLUME_DATABASE_URL:-}" ]; then
|
||||
# Deux facons de declarer la base : une URL complete, ou les elements separes.
|
||||
# Tester une seule des deux sauterait silencieusement les migrations.
|
||||
if [ -n "${ENCLUME_DATABASE_URL:-}" ] || [ -n "${ENCLUME_DB_HOTE:-}" ]; then
|
||||
echo "enclume : migration de la base"
|
||||
alembic upgrade head
|
||||
else
|
||||
|
||||
+7
-3
@@ -1,7 +1,8 @@
|
||||
"""Contexte Alembic.
|
||||
|
||||
L'URL vient de l'environnement, jamais du fichier ini : la meme image sert en
|
||||
developpement et en production.
|
||||
L'URL vient de la configuration de l'application, jamais du fichier ini : la
|
||||
meme image sert en developpement et en production, et le mot de passe est
|
||||
encode au meme endroit pour tout le monde.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -14,10 +15,13 @@ from sqlalchemy import engine_from_config, pool
|
||||
|
||||
sys.path.insert(0, os.getcwd())
|
||||
|
||||
from enclume.config import Config
|
||||
from enclume.db import Base
|
||||
|
||||
config = context.config
|
||||
config.set_main_option("sqlalchemy.url", os.environ.get("ENCLUME_DATABASE_URL", ""))
|
||||
# Une seule source de verite pour l'URL : celle de l'application, qui sait
|
||||
# assembler les elements separes et encoder le mot de passe.
|
||||
config.set_main_option("sqlalchemy.url", Config.SQLALCHEMY_DATABASE_URI)
|
||||
target_metadata = Base.metadata
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ ici, et la CI reste sans service externe.
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -303,3 +304,18 @@ def test_url_de_base_encode_les_caracteres_speciaux(monkeypatch):
|
||||
# L'URL porte la valeur encodee ; c'est le pilote qui la decode.
|
||||
assert morceaux.password == "p%40ss%3Aw0rd%2F%231"
|
||||
assert unquote(morceaux.password) == "p@ss:w0rd/#1"
|
||||
|
||||
|
||||
def test_le_point_d_entree_reconnait_les_deux_declarations_de_base():
|
||||
"""Les migrations doivent partir quelle que soit la facon de declarer la base."""
|
||||
script = Path("docker/entrypoint-web.sh").read_text(encoding="utf-8")
|
||||
condition = next(ligne for ligne in script.splitlines() if ligne.startswith("if ["))
|
||||
assert "ENCLUME_DATABASE_URL" in condition
|
||||
assert "ENCLUME_DB_HOTE" in condition
|
||||
|
||||
|
||||
def test_alembic_lit_la_configuration_de_l_application():
|
||||
"""Alembic et l'application doivent viser la meme base, sans divergence possible."""
|
||||
env = Path("migrations/env.py").read_text(encoding="utf-8")
|
||||
assert "Config.SQLALCHEMY_DATABASE_URI" in env
|
||||
assert 'os.environ.get("ENCLUME_DATABASE_URL"' not in env
|
||||
Reference in new issue
Block a user