Added SQL migrations and bootstrapping
ci/woodpecker/push/ociImagePush Pipeline was successful
Details
ci/woodpecker/push/ociImagePush Pipeline was successful
Details
This commit is contained in:
parent
c16593b8c1
commit
fd26fdef93
|
@ -383,6 +383,42 @@ dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap"
|
||||||
|
version = "3.2.25"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"clap_derive",
|
||||||
|
"clap_lex",
|
||||||
|
"indexmap",
|
||||||
|
"once_cell",
|
||||||
|
"textwrap",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_derive"
|
||||||
|
version = "3.2.25"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008"
|
||||||
|
dependencies = [
|
||||||
|
"heck 0.4.1",
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 1.0.109",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_lex"
|
||||||
|
version = "0.2.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
|
||||||
|
dependencies = [
|
||||||
|
"os_str_bytes",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "core-foundation-sys"
|
name = "core-foundation-sys"
|
||||||
version = "0.8.4"
|
version = "0.8.4"
|
||||||
|
@ -482,6 +518,14 @@ version = "2.5.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
|
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ext_calckey_model_migration"
|
||||||
|
version = "0.2.0"
|
||||||
|
dependencies = [
|
||||||
|
"sea-orm-migration",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fnv"
|
name = "fnv"
|
||||||
version = "1.0.7"
|
version = "1.0.7"
|
||||||
|
@ -996,6 +1040,7 @@ dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"ck",
|
"ck",
|
||||||
"dotenvy",
|
"dotenvy",
|
||||||
|
"ext_calckey_model_migration",
|
||||||
"magnetar_common",
|
"magnetar_common",
|
||||||
"sea-orm",
|
"sea-orm",
|
||||||
"serde",
|
"serde",
|
||||||
|
@ -1194,6 +1239,12 @@ version = "1.17.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
|
checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "os_str_bytes"
|
||||||
|
version = "6.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ouroboros"
|
name = "ouroboros"
|
||||||
version = "0.15.6"
|
version = "0.15.6"
|
||||||
|
@ -1728,6 +1779,22 @@ dependencies = [
|
||||||
"uuid",
|
"uuid",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sea-orm-cli"
|
||||||
|
version = "0.11.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "efbf34a2caf70c2e3be9bb1e674e9540f6dfd7c8f40f6f05daf3b9740e476005"
|
||||||
|
dependencies = [
|
||||||
|
"chrono",
|
||||||
|
"clap",
|
||||||
|
"dotenvy",
|
||||||
|
"regex",
|
||||||
|
"sea-schema",
|
||||||
|
"tracing",
|
||||||
|
"tracing-subscriber",
|
||||||
|
"url",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sea-orm-macros"
|
name = "sea-orm-macros"
|
||||||
version = "0.11.3"
|
version = "0.11.3"
|
||||||
|
@ -1741,6 +1808,23 @@ dependencies = [
|
||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sea-orm-migration"
|
||||||
|
version = "0.11.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "278d3adfd0832b6ffc17d3cfbc574d3695a5c1b38814e0bc8ac238d33f3d87cf"
|
||||||
|
dependencies = [
|
||||||
|
"async-trait",
|
||||||
|
"clap",
|
||||||
|
"dotenvy",
|
||||||
|
"futures",
|
||||||
|
"sea-orm",
|
||||||
|
"sea-orm-cli",
|
||||||
|
"sea-schema",
|
||||||
|
"tracing",
|
||||||
|
"tracing-subscriber",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sea-query"
|
name = "sea-query"
|
||||||
version = "0.28.5"
|
version = "0.28.5"
|
||||||
|
@ -1785,6 +1869,29 @@ dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sea-schema"
|
||||||
|
version = "0.11.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "eeb2940bb5a10bc6cd05b450ce6cd3993e27fddd7eface2becb97fc5af3a040e"
|
||||||
|
dependencies = [
|
||||||
|
"futures",
|
||||||
|
"sea-query",
|
||||||
|
"sea-schema-derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sea-schema-derive"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "56821b7076f5096b8f726e2791ad255a99c82498e08ec477a65a96c461ff1927"
|
||||||
|
dependencies = [
|
||||||
|
"heck 0.3.3",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 1.0.109",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sea-strum"
|
name = "sea-strum"
|
||||||
version = "0.23.0"
|
version = "0.23.0"
|
||||||
|
@ -2147,6 +2254,12 @@ dependencies = [
|
||||||
"unic-segment",
|
"unic-segment",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "textwrap"
|
||||||
|
version = "0.16.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.40"
|
version = "1.0.40"
|
||||||
|
|
|
@ -29,6 +29,7 @@ log = "0.4"
|
||||||
miette = "5.9"
|
miette = "5.9"
|
||||||
percent-encoding = "2.2"
|
percent-encoding = "2.2"
|
||||||
sea-orm = "0.11"
|
sea-orm = "0.11"
|
||||||
|
sea-orm-migration = "0.11"
|
||||||
serde = "1"
|
serde = "1"
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
tera = { version = "1", default-features = false }
|
tera = { version = "1", default-features = false }
|
||||||
|
|
|
@ -4,9 +4,6 @@
|
||||||
|
|
||||||
A social networking server anyone can self-host
|
A social networking server anyone can self-host
|
||||||
|
|
||||||
**WARNING: Currently the project cannot be bootstrapped from scratch as
|
|
||||||
it requires a Calckey 14.0RC3 database model.**
|
|
||||||
|
|
||||||
**This project is in early development.**
|
**This project is in early development.**
|
||||||
|
|
||||||
## Quick start
|
## Quick start
|
||||||
|
|
|
@ -8,6 +8,8 @@ crate-type = ["rlib"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
ck = { path = "./entity_ck" }
|
ck = { path = "./entity_ck" }
|
||||||
|
ext_calckey_model_migration = { path = "./migration" }
|
||||||
|
|
||||||
magnetar_common = { path = "../magnetar_common" }
|
magnetar_common = { path = "../magnetar_common" }
|
||||||
|
|
||||||
dotenvy = { workspace = true}
|
dotenvy = { workspace = true}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
[package]
|
||||||
|
name = "ext_calckey_model_migration"
|
||||||
|
version.workspace = true
|
||||||
|
edition.workspace = true
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "migrate"
|
||||||
|
path = "src/main.rs"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
name = "ext_calckey_model_migration"
|
||||||
|
path = "src/lib.rs"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
tokio = { workspace = true, features = ["full"] }
|
||||||
|
sea-orm-migration = { workspace = true, features = ["runtime-tokio-rustls", "sqlx-postgres"] }
|
|
@ -0,0 +1,41 @@
|
||||||
|
# Running Migrator CLI
|
||||||
|
|
||||||
|
- Generate a new migration file
|
||||||
|
```sh
|
||||||
|
cargo run -- migrate generate MIGRATION_NAME
|
||||||
|
```
|
||||||
|
- Apply all pending migrations
|
||||||
|
```sh
|
||||||
|
cargo run
|
||||||
|
```
|
||||||
|
```sh
|
||||||
|
cargo run -- up
|
||||||
|
```
|
||||||
|
- Apply first 10 pending migrations
|
||||||
|
```sh
|
||||||
|
cargo run -- up -n 10
|
||||||
|
```
|
||||||
|
- Rollback last applied migrations
|
||||||
|
```sh
|
||||||
|
cargo run -- down
|
||||||
|
```
|
||||||
|
- Rollback last 10 applied migrations
|
||||||
|
```sh
|
||||||
|
cargo run -- down -n 10
|
||||||
|
```
|
||||||
|
- Drop all tables from the database, then reapply all migrations
|
||||||
|
```sh
|
||||||
|
cargo run -- fresh
|
||||||
|
```
|
||||||
|
- Rollback all applied migrations, then reapply all migrations
|
||||||
|
```sh
|
||||||
|
cargo run -- refresh
|
||||||
|
```
|
||||||
|
- Rollback all applied migrations
|
||||||
|
```sh
|
||||||
|
cargo run -- reset
|
||||||
|
```
|
||||||
|
- Check the status of all migrations
|
||||||
|
```sh
|
||||||
|
cargo run -- status
|
||||||
|
```
|
|
@ -0,0 +1,223 @@
|
||||||
|
alter table drive_folder
|
||||||
|
drop constraint "FK_f4fc06e49c0171c85f1c48060d2";
|
||||||
|
|
||||||
|
alter table drive_file
|
||||||
|
drop constraint "FK_860fa6f6c7df5bb887249fba22e";
|
||||||
|
|
||||||
|
drop table poll_vote;
|
||||||
|
|
||||||
|
drop table note_reaction;
|
||||||
|
|
||||||
|
drop table note_watching;
|
||||||
|
|
||||||
|
drop table note_unread;
|
||||||
|
|
||||||
|
drop table notification;
|
||||||
|
|
||||||
|
drop type notification_type_enum;
|
||||||
|
|
||||||
|
drop table access_token;
|
||||||
|
|
||||||
|
drop table meta;
|
||||||
|
|
||||||
|
drop type meta_sensitivemediadetection_enum;
|
||||||
|
|
||||||
|
drop type meta_sensitivemediadetectionsensitivity_enum;
|
||||||
|
|
||||||
|
drop table following;
|
||||||
|
|
||||||
|
drop table instance;
|
||||||
|
|
||||||
|
drop table muting;
|
||||||
|
|
||||||
|
drop table sw_subscription;
|
||||||
|
|
||||||
|
drop table blocking;
|
||||||
|
|
||||||
|
drop table user_list_joining;
|
||||||
|
|
||||||
|
drop table hashtag;
|
||||||
|
|
||||||
|
drop table note_favorite;
|
||||||
|
|
||||||
|
drop table abuse_user_report;
|
||||||
|
|
||||||
|
drop table registration_ticket;
|
||||||
|
|
||||||
|
drop table messaging_message;
|
||||||
|
|
||||||
|
drop table signin;
|
||||||
|
|
||||||
|
drop table auth_session;
|
||||||
|
|
||||||
|
drop table app;
|
||||||
|
|
||||||
|
drop table follow_request;
|
||||||
|
|
||||||
|
drop table emoji;
|
||||||
|
|
||||||
|
drop table user_note_pining;
|
||||||
|
|
||||||
|
drop table poll;
|
||||||
|
|
||||||
|
drop type poll_notevisibility_enum;
|
||||||
|
|
||||||
|
drop table user_keypair;
|
||||||
|
|
||||||
|
drop table user_publickey;
|
||||||
|
|
||||||
|
drop table user_profile;
|
||||||
|
|
||||||
|
drop type user_profile_ffvisibility_enum;
|
||||||
|
|
||||||
|
drop table __chart__active_users;
|
||||||
|
|
||||||
|
drop table __chart__drive;
|
||||||
|
|
||||||
|
drop table __chart__federation;
|
||||||
|
|
||||||
|
drop table __chart__hashtag;
|
||||||
|
|
||||||
|
drop table __chart__instance;
|
||||||
|
|
||||||
|
drop table __chart__network;
|
||||||
|
|
||||||
|
drop table __chart__notes;
|
||||||
|
|
||||||
|
drop table __chart__per_user_drive;
|
||||||
|
|
||||||
|
drop table __chart__per_user_following;
|
||||||
|
|
||||||
|
drop table __chart__per_user_notes;
|
||||||
|
|
||||||
|
drop table __chart__per_user_reaction;
|
||||||
|
|
||||||
|
drop table __chart__test_grouped;
|
||||||
|
|
||||||
|
drop table __chart__test_unique;
|
||||||
|
|
||||||
|
drop table __chart__test;
|
||||||
|
|
||||||
|
drop table __chart__users;
|
||||||
|
|
||||||
|
drop table page_like;
|
||||||
|
|
||||||
|
drop table page;
|
||||||
|
|
||||||
|
drop type page_visibility_enum;
|
||||||
|
|
||||||
|
drop table user_group_invite;
|
||||||
|
|
||||||
|
drop table attestation_challenge;
|
||||||
|
|
||||||
|
drop table user_security_key;
|
||||||
|
|
||||||
|
drop table moderation_log;
|
||||||
|
|
||||||
|
drop table used_username;
|
||||||
|
|
||||||
|
drop table announcement_read;
|
||||||
|
|
||||||
|
drop table announcement;
|
||||||
|
|
||||||
|
drop table clip_note;
|
||||||
|
|
||||||
|
drop table clip;
|
||||||
|
|
||||||
|
drop table antenna_note;
|
||||||
|
|
||||||
|
drop table antenna;
|
||||||
|
|
||||||
|
drop type antenna_src_enum;
|
||||||
|
|
||||||
|
drop table user_list;
|
||||||
|
|
||||||
|
drop table user_group_joining;
|
||||||
|
|
||||||
|
drop table user_group_invitation;
|
||||||
|
|
||||||
|
drop table user_group;
|
||||||
|
|
||||||
|
drop table promo_note;
|
||||||
|
|
||||||
|
drop table promo_read;
|
||||||
|
|
||||||
|
drop table relay;
|
||||||
|
|
||||||
|
drop type relay_status_enum;
|
||||||
|
|
||||||
|
drop table muted_note;
|
||||||
|
|
||||||
|
drop type muted_note_reason_enum;
|
||||||
|
|
||||||
|
drop table channel_following;
|
||||||
|
|
||||||
|
drop table channel_note_pining;
|
||||||
|
|
||||||
|
drop table registry_item;
|
||||||
|
|
||||||
|
drop table gallery_like;
|
||||||
|
|
||||||
|
drop table gallery_post;
|
||||||
|
|
||||||
|
drop table password_reset_request;
|
||||||
|
|
||||||
|
drop table ad;
|
||||||
|
|
||||||
|
drop table user_pending;
|
||||||
|
|
||||||
|
drop table note_thread_muting;
|
||||||
|
|
||||||
|
drop table __chart_day__federation;
|
||||||
|
|
||||||
|
drop table __chart_day__notes;
|
||||||
|
|
||||||
|
drop table __chart_day__users;
|
||||||
|
|
||||||
|
drop table __chart_day__network;
|
||||||
|
|
||||||
|
drop table __chart_day__active_users;
|
||||||
|
|
||||||
|
drop table __chart_day__instance;
|
||||||
|
|
||||||
|
drop table __chart_day__per_user_notes;
|
||||||
|
|
||||||
|
drop table __chart_day__drive;
|
||||||
|
|
||||||
|
drop table __chart_day__per_user_reaction;
|
||||||
|
|
||||||
|
drop table __chart_day__hashtag;
|
||||||
|
|
||||||
|
drop table __chart_day__per_user_following;
|
||||||
|
|
||||||
|
drop table __chart_day__per_user_drive;
|
||||||
|
|
||||||
|
drop table __chart__ap_request;
|
||||||
|
|
||||||
|
drop table __chart_day__ap_request;
|
||||||
|
|
||||||
|
drop table webhook;
|
||||||
|
|
||||||
|
drop table user_ip;
|
||||||
|
|
||||||
|
drop table renote_muting;
|
||||||
|
|
||||||
|
drop table note_edit;
|
||||||
|
|
||||||
|
drop table note;
|
||||||
|
|
||||||
|
drop type note_visibility_enum;
|
||||||
|
|
||||||
|
drop table channel;
|
||||||
|
|
||||||
|
drop table "user";
|
||||||
|
|
||||||
|
drop table drive_file;
|
||||||
|
|
||||||
|
drop table drive_folder;
|
||||||
|
|
||||||
|
drop function note_replies(varchar, integer, integer);
|
||||||
|
|
||||||
|
drop type log_level_enum;
|
||||||
|
|
||||||
|
drop type user_profile_mutingnotificationtypes_enum;
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,12 @@
|
||||||
|
pub use sea_orm_migration::prelude::*;
|
||||||
|
|
||||||
|
mod m20220101_000001_bootstrap;
|
||||||
|
|
||||||
|
pub struct Migrator;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigratorTrait for Migrator {
|
||||||
|
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
|
||||||
|
vec![Box::new(m20220101_000001_bootstrap::Migration)]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
use sea_orm_migration::prelude::*;
|
||||||
|
|
||||||
|
#[derive(DeriveMigrationName)]
|
||||||
|
pub struct Migration;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigrationTrait for Migration {
|
||||||
|
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
let db = manager.get_connection();
|
||||||
|
|
||||||
|
db.execute_unprepared(include_str!("bootstrap_up.sql"))
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
let db = manager.get_connection();
|
||||||
|
|
||||||
|
db.execute_unprepared(include_str!("bootstrap_down.sql"))
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
use sea_orm_migration::prelude::*;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
cli::run_cli(ext_calckey_model_migration::Migrator).await;
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
use ck::user;
|
use ck::user;
|
||||||
|
use ext_calckey_model_migration::{Migrator, MigratorTrait};
|
||||||
use sea_orm::{ColumnTrait, ConnectOptions, DatabaseConnection, EntityTrait, QueryFilter};
|
use sea_orm::{ColumnTrait, ConnectOptions, DatabaseConnection, EntityTrait, QueryFilter};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
use tracing::log::LevelFilter;
|
use tracing::log::LevelFilter;
|
||||||
|
@ -29,6 +30,12 @@ impl CalckeyModel {
|
||||||
Ok(CalckeyModel(sea_orm::Database::connect(opt).await?))
|
Ok(CalckeyModel(sea_orm::Database::connect(opt).await?))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn migrate(&self) -> Result<(), CalckeyDbError> {
|
||||||
|
Migrator::up(&self.0, None).await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn get_user_by_tag(
|
pub async fn get_user_by_tag(
|
||||||
&self,
|
&self,
|
||||||
name: &str,
|
name: &str,
|
||||||
|
|
|
@ -37,6 +37,8 @@ async fn main() -> miette::Result<()> {
|
||||||
.await
|
.await
|
||||||
.into_diagnostic()?;
|
.into_diagnostic()?;
|
||||||
|
|
||||||
|
db.migrate().await.into_diagnostic()?;
|
||||||
|
|
||||||
let well_known_router = Router::new()
|
let well_known_router = Router::new()
|
||||||
.route(
|
.route(
|
||||||
"/webfinger",
|
"/webfinger",
|
||||||
|
|
Loading…
Reference in New Issue