From e12b69985b6a472adbce3b6061cbd12d85826cf2 Mon Sep 17 00:00:00 2001 From: Bob Farrell Date: Sat, 16 Nov 2024 17:16:29 +0000 Subject: [PATCH] Fix database CLI environment variables config Use the same environment setup as the main Jetzig app when running database CLI commands. --- build.zig.zon | 4 ++-- cli/build.zig.zon | 4 ++-- src/commands/database.zig | 39 ++++++++++++++++++++++++++------------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/build.zig.zon b/build.zig.zon index b6a6b17..82d6a6f 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -15,8 +15,8 @@ .hash = "12201d75d73aad5e1c996de4d5ae87a00e58479c8d469bc2eeb5fdeeac8857bc09af", }, .jetquery = .{ - .url = "https://github.com/jetzig-framework/jetquery/archive/cc3aca60511079636f38701c790c2751582666b4.tar.gz", - .hash = "122042fe961bce870e1b072d346fe21863d4baa3f78906eafd35e3aaae8dab020c78", + .url = "https://github.com/jetzig-framework/jetquery/archive/4069610e0aea2dcdf9f73ca55f3aeb96f01fca5e.tar.gz", + .hash = "122043f7b1614c94d311df1153c7702492b30fb56210fafbb80b52ab39de08a25092", }, .jetcommon = .{ .url = "https://github.com/jetzig-framework/jetcommon/archive/a248776ba56d6cc2b160d593ac3305756adcd26e.tar.gz", diff --git a/cli/build.zig.zon b/cli/build.zig.zon index 3ba5677..2132bd0 100644 --- a/cli/build.zig.zon +++ b/cli/build.zig.zon @@ -9,8 +9,8 @@ .hash = "1220411a8c46d95bbf3b6e2059854bcb3c5159d428814099df5294232b9980517e9c", }, .jetquery = .{ - .url = "https://github.com/jetzig-framework/jetquery/archive/cc3aca60511079636f38701c790c2751582666b4.tar.gz", - .hash = "122042fe961bce870e1b072d346fe21863d4baa3f78906eafd35e3aaae8dab020c78", + .url = "https://github.com/jetzig-framework/jetquery/archive/4069610e0aea2dcdf9f73ca55f3aeb96f01fca5e.tar.gz", + .hash = "122043f7b1614c94d311df1153c7702492b30fb56210fafbb80b52ab39de08a25092", }, }, .paths = .{ diff --git a/src/commands/database.zig b/src/commands/database.zig index e773a75..6717478 100644 --- a/src/commands/database.zig +++ b/src/commands/database.zig @@ -39,45 +39,57 @@ pub fn main() !void { }); const action = map.get(args[1]) orelse return error.JetzigUnrecognizedArgument; + const env = try jetzig.Environment.init(allocator, .{ .silent = true }); + const repo_env = try jetzig.database.repoEnv(env); + const maybe_database = repo_env.database orelse + if (comptime @hasField(@TypeOf(config), "database")) config.database else null; + + const database = maybe_database orelse { + std.debug.print("Missing `database` option in `config/database.zig` " ++ + "for current environment or `JETQUERY_DATABASE` environment variable.\n", .{}); + std.process.exit(1); + return; + }; + switch (action) { .migrate => { - var repo = try migrationsRepo(action, allocator); + var repo = try migrationsRepo(action, allocator, repo_env); defer repo.deinit(); try Migrate(config.adapter).init(&repo).migrate(); }, .rollback => { - var repo = try migrationsRepo(action, allocator); + var repo = try migrationsRepo(action, allocator, repo_env); defer repo.deinit(); try Migrate(config.adapter).init(&repo).rollback(); }, .create => { - var repo = try migrationsRepo(action, allocator); + var repo = try migrationsRepo(action, allocator, repo_env); defer repo.deinit(); - try repo.createDatabase(config.database, .{}); + try repo.createDatabase(database, .{}); }, .drop => { if (environment == .production) { const confirm = std.process.getEnvVarOwned(allocator, confirm_drop_env) catch |err| { switch (err) { error.EnvironmentVariableNotFound => { - std.log.err(production_drop_failure_message, .{config.database}); + std.log.err(production_drop_failure_message, .{database}); std.process.exit(1); }, else => return err, } }; - if (std.mem.eql(u8, confirm, config.database)) { - var repo = try migrationsRepo(action, allocator); + if (std.mem.eql(u8, confirm, database)) { + var repo = try migrationsRepo(action, allocator, repo_env); defer repo.deinit(); - try repo.dropDatabase(config.database, .{}); + try repo.dropDatabase(database, .{}); } else { - std.log.err(production_drop_failure_message, .{config.database}); + std.log.err(production_drop_failure_message, .{database}); std.process.exit(1); } } else { - var repo = try migrationsRepo(action, allocator); + var repo = try migrationsRepo(action, allocator, repo_env); defer repo.deinit(); - try repo.dropDatabase(config.database, .{}); + try repo.dropDatabase(database, .{}); } }, .reflect => { @@ -88,7 +100,7 @@ pub fn main() !void { var repo = try Repo.loadConfig( allocator, std.enums.nameCast(jetquery.Environment, environment), - .{ .context = .migration }, + .{ .context = .migration, .env = repo_env }, ); const reflect = @import("jetquery_reflect").Reflect(config.adapter, Schema).init( allocator, @@ -113,7 +125,7 @@ pub fn main() !void { } const MigrationsRepo = jetquery.Repo(config.adapter, MigrateSchema); -fn migrationsRepo(action: Action, allocator: std.mem.Allocator) !MigrationsRepo { +fn migrationsRepo(action: Action, allocator: std.mem.Allocator, repo_env: anytype) !MigrationsRepo { return try MigrationsRepo.loadConfig( allocator, std.enums.nameCast(jetquery.Environment, environment), @@ -124,6 +136,7 @@ fn migrationsRepo(action: Action, allocator: std.mem.Allocator) !MigrationsRepo .reflect => unreachable, // We use a separate repo for schema reflection. }, .context = .migration, + .env = repo_env, }, ); }