fix(ci): fix alembic DB import and golangci-lint version
- Move Base to app/models/base.py so alembic env.py can import it without triggering engine creation (which connects to hardcoded DB) - Update all 13 models to import Base from app.models.base - Pin golangci-lint to latest (supports Go 1.25) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
1
.github/workflows/ci.yml
vendored
1
.github/workflows/ci.yml
vendored
@@ -47,6 +47,7 @@ jobs:
|
|||||||
- name: golangci-lint
|
- name: golangci-lint
|
||||||
uses: golangci/golangci-lint-action@v6
|
uses: golangci/golangci-lint-action@v6
|
||||||
with:
|
with:
|
||||||
|
version: latest
|
||||||
working-directory: poller
|
working-directory: poller
|
||||||
|
|
||||||
frontend-lint:
|
frontend-lint:
|
||||||
|
|||||||
@@ -9,8 +9,9 @@ from sqlalchemy import pool
|
|||||||
from sqlalchemy.engine import Connection
|
from sqlalchemy.engine import Connection
|
||||||
from sqlalchemy.ext.asyncio import async_engine_from_config
|
from sqlalchemy.ext.asyncio import async_engine_from_config
|
||||||
|
|
||||||
# Import all models to register them with Base.metadata
|
# Import Base without triggering engine creation (app.database creates engines
|
||||||
from app.database import Base
|
# at module level, which would fail if DATABASE_URL points to a non-existent DB).
|
||||||
|
from app.models.base import Base
|
||||||
import app.models.tenant # noqa: F401
|
import app.models.tenant # noqa: F401
|
||||||
import app.models.user # noqa: F401
|
import app.models.user # noqa: F401
|
||||||
import app.models.device # noqa: F401
|
import app.models.device # noqa: F401
|
||||||
|
|||||||
@@ -10,15 +10,8 @@ from sqlalchemy.ext.asyncio import (
|
|||||||
async_sessionmaker,
|
async_sessionmaker,
|
||||||
create_async_engine,
|
create_async_engine,
|
||||||
)
|
)
|
||||||
from sqlalchemy.orm import DeclarativeBase
|
|
||||||
|
|
||||||
from app.config import settings
|
from app.config import settings
|
||||||
|
from app.models.base import Base # noqa: F401 — re-exported for backwards compat
|
||||||
|
|
||||||
class Base(DeclarativeBase):
|
|
||||||
"""Base class for all SQLAlchemy ORM models."""
|
|
||||||
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# Primary engine using postgres superuser (for migrations/admin)
|
# Primary engine using postgres superuser (for migrations/admin)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ from sqlalchemy import (
|
|||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class AlertRule(Base):
|
class AlertRule(Base):
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from sqlalchemy import DateTime, ForeignKey, Text, func
|
|||||||
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class ApiKey(Base):
|
class ApiKey(Base):
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from sqlalchemy import DateTime, ForeignKey, String, Text, func
|
|||||||
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class AuditLog(Base):
|
class AuditLog(Base):
|
||||||
|
|||||||
9
backend/app/models/base.py
Normal file
9
backend/app/models/base.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
"""SQLAlchemy declarative base — importable without triggering engine creation."""
|
||||||
|
|
||||||
|
from sqlalchemy.orm import DeclarativeBase
|
||||||
|
|
||||||
|
|
||||||
|
class Base(DeclarativeBase):
|
||||||
|
"""Base class for all SQLAlchemy ORM models."""
|
||||||
|
|
||||||
|
pass
|
||||||
@@ -12,7 +12,7 @@ from sqlalchemy import DateTime, ForeignKey, LargeBinary, String, Text, func
|
|||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class CertificateAuthority(Base):
|
class CertificateAuthority(Base):
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from sqlalchemy import (
|
|||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class ConfigBackupRun(Base):
|
class ConfigBackupRun(Base):
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from sqlalchemy import (
|
|||||||
from sqlalchemy.dialects.postgresql import JSON, UUID
|
from sqlalchemy.dialects.postgresql import JSON, UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class ConfigTemplate(Base):
|
class ConfigTemplate(Base):
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from sqlalchemy import (
|
|||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class DeviceStatus(str, Enum):
|
class DeviceStatus(str, Enum):
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ from sqlalchemy.dialects.postgresql import UUID
|
|||||||
from sqlalchemy.orm import Mapped, mapped_column
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
from sqlalchemy import ForeignKey
|
from sqlalchemy import ForeignKey
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class FirmwareVersion(Base):
|
class FirmwareVersion(Base):
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from sqlalchemy import DateTime, ForeignKey, Integer, LargeBinary, Text, func
|
|||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class UserKeySet(Base):
|
class UserKeySet(Base):
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from sqlalchemy import Boolean, DateTime, ForeignKey, Text, VARCHAR, func
|
|||||||
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class MaintenanceWindow(Base):
|
class MaintenanceWindow(Base):
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from sqlalchemy import DateTime, LargeBinary, Integer, String, Text, func
|
|||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class Tenant(Base):
|
class Tenant(Base):
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from sqlalchemy import Boolean, DateTime, ForeignKey, LargeBinary, SmallInteger,
|
|||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class UserRole(str, Enum):
|
class UserRole(str, Enum):
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, LargeBinary, Stri
|
|||||||
from sqlalchemy.dialects.postgresql import UUID
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
from sqlalchemy.orm import Mapped, mapped_column
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
|
|
||||||
from app.database import Base
|
from app.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
class VpnConfig(Base):
|
class VpnConfig(Base):
|
||||||
|
|||||||
Reference in New Issue
Block a user