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:
Jason Staack
2026-03-14 22:58:39 -05:00
parent ce8f5720d8
commit ac2a09e2bd
17 changed files with 27 additions and 23 deletions

View File

@@ -47,6 +47,7 @@ jobs:
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: latest
working-directory: poller
frontend-lint:

View File

@@ -9,8 +9,9 @@ from sqlalchemy import pool
from sqlalchemy.engine import Connection
from sqlalchemy.ext.asyncio import async_engine_from_config
# Import all models to register them with Base.metadata
from app.database import Base
# Import Base without triggering engine creation (app.database creates engines
# 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.user # noqa: F401
import app.models.device # noqa: F401

View File

@@ -10,15 +10,8 @@ from sqlalchemy.ext.asyncio import (
async_sessionmaker,
create_async_engine,
)
from sqlalchemy.orm import DeclarativeBase
from app.config import settings
class Base(DeclarativeBase):
"""Base class for all SQLAlchemy ORM models."""
pass
from app.models.base import Base # noqa: F401 — re-exported for backwards compat
# Primary engine using postgres superuser (for migrations/admin)

View File

@@ -16,7 +16,7 @@ from sqlalchemy import (
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base
from app.models.base import Base
class AlertRule(Base):

View File

@@ -8,7 +8,7 @@ from sqlalchemy import DateTime, ForeignKey, Text, func
from sqlalchemy.dialects.postgresql import JSONB, UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base
from app.models.base import Base
class ApiKey(Base):

View File

@@ -8,7 +8,7 @@ from sqlalchemy import DateTime, ForeignKey, String, Text, func
from sqlalchemy.dialects.postgresql import JSONB, UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base
from app.models.base import Base
class AuditLog(Base):

View 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

View File

@@ -12,7 +12,7 @@ from sqlalchemy import DateTime, ForeignKey, LargeBinary, String, Text, func
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base
from app.models.base import Base
class CertificateAuthority(Base):

View File

@@ -18,7 +18,7 @@ from sqlalchemy import (
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base
from app.models.base import Base
class ConfigBackupRun(Base):

View File

@@ -14,7 +14,7 @@ from sqlalchemy import (
from sqlalchemy.dialects.postgresql import JSON, UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
from app.models.base import Base
class ConfigTemplate(Base):

View File

@@ -18,7 +18,7 @@ from sqlalchemy import (
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
from app.models.base import Base
class DeviceStatus(str, Enum):

View File

@@ -15,7 +15,7 @@ from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy import ForeignKey
from app.database import Base
from app.models.base import Base
class FirmwareVersion(Base):

View File

@@ -7,7 +7,7 @@ from sqlalchemy import DateTime, ForeignKey, Integer, LargeBinary, Text, func
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
from app.models.base import Base
class UserKeySet(Base):

View File

@@ -11,7 +11,7 @@ from sqlalchemy import Boolean, DateTime, ForeignKey, Text, VARCHAR, func
from sqlalchemy.dialects.postgresql import JSONB, UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base
from app.models.base import Base
class MaintenanceWindow(Base):

View File

@@ -7,7 +7,7 @@ from sqlalchemy import DateTime, LargeBinary, Integer, String, Text, func
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
from app.models.base import Base
class Tenant(Base):

View File

@@ -8,7 +8,7 @@ from sqlalchemy import Boolean, DateTime, ForeignKey, LargeBinary, SmallInteger,
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
from app.models.base import Base
class UserRole(str, Enum):

View File

@@ -8,7 +8,7 @@ from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, LargeBinary, Stri
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column
from app.database import Base
from app.models.base import Base
class VpnConfig(Base):