mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-06-04 11:25:52 +08:00
66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
import docker
|
|
import pytest
|
|
from testcontainers.core.container import Network
|
|
|
|
from fixtures import types
|
|
|
|
|
|
@pytest.fixture(name="migrator", scope="package")
|
|
def migrator(
|
|
network: Network,
|
|
clickhouse: types.TestContainerClickhouse,
|
|
request: pytest.FixtureRequest,
|
|
pytestconfig: pytest.Config,
|
|
) -> None:
|
|
"""
|
|
Package-scoped fixture for running schema migrations.
|
|
"""
|
|
dev = request.config.getoption("--dev")
|
|
if dev:
|
|
cached_migrator = pytestconfig.cache.get("migrator", None)
|
|
if cached_migrator is not None and cached_migrator is True:
|
|
return None
|
|
|
|
version = request.config.getoption("--schema-migrator-version")
|
|
|
|
client = docker.from_env()
|
|
|
|
container = client.containers.run(
|
|
image=f"signoz/signoz-schema-migrator:{version}",
|
|
command=f"sync --replication=true --cluster-name=cluster --up= --dsn={clickhouse.env["SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN"]}", # pylint: disable=line-too-long
|
|
detach=True,
|
|
auto_remove=False,
|
|
network=network.id,
|
|
)
|
|
|
|
result = container.wait()
|
|
|
|
if result["StatusCode"] != 0:
|
|
logs = container.logs().decode(encoding="utf-8")
|
|
container.remove()
|
|
print(logs)
|
|
raise RuntimeError("failed to run migrations on clickhouse")
|
|
|
|
container.remove()
|
|
|
|
container = client.containers.run(
|
|
image=f"signoz/signoz-schema-migrator:{version}",
|
|
command=f"async --replication=true --cluster-name=cluster --up= --dsn={clickhouse.env["SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN"]}", # pylint: disable=line-too-long
|
|
detach=True,
|
|
auto_remove=False,
|
|
network=network.id,
|
|
)
|
|
|
|
result = container.wait()
|
|
|
|
if result["StatusCode"] != 0:
|
|
logs = container.logs().decode(encoding="utf-8")
|
|
container.remove()
|
|
print(logs)
|
|
raise RuntimeError("failed to run migrations on clickhouse")
|
|
|
|
container.remove()
|
|
|
|
if dev:
|
|
pytestconfig.cache.set("migrator", True)
|