blob: fbf5183d08266a6966a48201678347a9dfe7434d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
use anyhow::Result;
use rusqlite::Connection;
use std::env;
use sts::{Config, MigrationRunner};
fn main() -> Result<()> {
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
print_usage();
return Ok(());
}
let config = Config::from_env();
let conn = Connection::open(&config.database_path)?;
let runner = MigrationRunner::new(&conn)?;
match args[1].as_str() {
"up" => {
println!("Running migrations...");
runner.run_migrations()?;
}
"status" => {
runner.show_migration_status()?;
}
"rollback" => {
if args.len() < 3 {
eprintln!("Error: rollback requires a version number");
eprintln!("Usage: cargo run --bin migrate rollback <version>");
return Ok(());
}
let version: i64 = args[2]
.parse()
.map_err(|_| anyhow::anyhow!("Invalid version number: {}", args[2]))?;
runner.rollback_to_version(version)?;
}
_ => {
eprintln!("Error: Unknown command '{}'", args[1]);
print_usage();
}
}
Ok(())
}
fn print_usage() {
println!("OAuth2 STS Migration Tool");
println!("========================");
println!("");
println!("Usage:");
println!(" cargo run --bin migrate up # Run pending migrations");
println!(" cargo run --bin migrate status # Show migration status");
println!(" cargo run --bin migrate rollback <timestamp> # Rollback to timestamp");
println!("");
println!("Environment Variables:");
println!(" DATABASE_PATH Path to SQLite database (default: oauth.db)");
println!("");
println!("Examples:");
println!(" cargo run --bin migrate up");
println!(" cargo run --bin migrate status");
println!(" cargo run --bin migrate rollback 20231201120000");
}
|