Skip to content

Commit

Permalink
migrate pglite dynamically if no postgres url
Browse files Browse the repository at this point in the history
  • Loading branch information
lalalune committed Feb 28, 2025
1 parent 349394b commit 673bc75
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 15 deletions.
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
"lint": "turbo run lint:fix --filter=./packages/*",
"check": "biome check . --fix --unsafe --verbose",
"preinstall": "npx only-allow bun",
"migrate": "turbo run migrate --filter=./packages/plugin-sql",
"migrate:generate": "turbo run migrate:generate --filter=./packages/plugin-sql",
"swarm": "turbo run build --filter=./packages/core && concurrently \"turbo run start --filter=@elizaos/agent -- --swarm \" \"turbo run start --filter=!@elizaos/agent --filter=!@elizaos/docs --filter=!@elizaos/core\"",
"swarm:scenario": "turbo run build --filter=./packages/core && concurrently \"turbo run start --filter=@elizaos/agent -- --swarm --scenario \" \"turbo run start --filter=!@elizaos/agent --filter=!@elizaos/docs --filter=!@elizaos/core\"",
"build": "turbo run build --filter=./packages/core && turbo run build --filter=./packages/*",
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-sql/drizzle.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export default defineConfig({
prefix: 'timestamp',
},
dbCredentials: {
url: process.env.POSTGRES_URL as string,
url: process.env.POSTGRES_URL || 'file://../../pglite',
},
breakpoints: true,
});
4 changes: 3 additions & 1 deletion packages/plugin-sql/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@
},
"scripts": {
"build": "tsup --format esm --dts",
"dev": "tsup --format esm --dts --watch"
"dev": "tsup --format esm --dts --watch",
"migrate:generate": "drizzle-kit generate:pg",
"migrate": "tsup src/migrate.ts --format esm --onSuccess \"node dist/migrate.js\""
},
"peerDependencies": {
"typescript": "^5.0.0"
Expand Down
33 changes: 20 additions & 13 deletions packages/plugin-sql/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,33 @@
import { type Adapter, logger, type IAgentRuntime, type Plugin, type IDatabaseAdapter, type IDatabaseCacheAdapter } from '@elizaos/core';
import { PgDatabaseAdapter } from './pg/adapter';
import { PgliteDatabaseAdapter } from './pg-lite/adapter';
import { PGliteClientManager } from './pg-lite/manager';
import { PostgresConnectionManager } from './pg/manager';
import {
type Adapter,
logger,
type IAgentRuntime,
type Plugin,
type IDatabaseAdapter,
type IDatabaseCacheAdapter,
} from "@elizaos/core";
import { PgDatabaseAdapter } from "./pg/adapter";
import { PgliteDatabaseAdapter } from "./pg-lite/adapter";
import { PGliteClientManager } from "./pg-lite/manager";
import { PostgresConnectionManager } from "./pg/manager";

let pgLiteClientManager: PGliteClientManager;

export function createDatabaseAdapter(config: {
dataDir?: string;
postgresUrl?: string;
}): IDatabaseAdapter & IDatabaseCacheAdapter {
if (config.dataDir) {
if (!pgLiteClientManager) {
pgLiteClientManager = new PGliteClientManager({ dataDir: config.dataDir });
}
return new PgliteDatabaseAdapter(pgLiteClientManager);
}
if (config.postgresUrl) {
const manager = new PostgresConnectionManager(config.postgresUrl);
return new PgDatabaseAdapter(manager);
}
throw new Error("No valid database configuration provided");

const dataDir = config.dataDir ?? "../../pgLite";

if (!pgLiteClientManager) {
pgLiteClientManager = new PGliteClientManager({ dataDir });
}
return new PgliteDatabaseAdapter(pgLiteClientManager);
}

const drizzleDatabaseAdapter: Adapter = {
Expand All @@ -39,7 +46,7 @@ const drizzleDatabaseAdapter: Adapter = {
logger.error("Failed to initialize database:", error);
throw error;
}
}
},
};

const drizzlePlugin: Plugin = {
Expand Down
30 changes: 30 additions & 0 deletions packages/plugin-sql/src/migrate.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { drizzle } from 'drizzle-orm/pglite';
import { migrate as pgliteMigrate } from 'drizzle-orm/pglite/migrator';
import { PGlite } from '@electric-sql/pglite';
import { config } from 'dotenv';

config({ path: '../../.env' });

async function runMigrations() {
if (process.env.POSTGRES_URL) {
console.log('Using PostgreSQL database');
// You'll need to add PostgreSQL migration logic here if needed
return;
}

console.log('Using PGlite database');
const client = new PGlite('file://../../pglite');
const db = drizzle(client);

try {
await pgliteMigrate(db, {
migrationsFolder: './drizzle/migrations',
});
console.log('Migrations completed successfully');
} catch (error) {
console.error('Migration failed:', error);
process.exit(1);
}
}

runMigrations().catch(console.error);
6 changes: 6 additions & 0 deletions turbo.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@
},
"swarm": {
"dependsOn": ["build"]
},
"migrate": {
"dependsOn": ["build"]
},
"migrate:generate": {
"dependsOn": ["build"]
}
}
}

0 comments on commit 673bc75

Please sign in to comment.