diff --git a/.github/workflows/check_changelog.yml b/.github/workflows/check_changelog.yml new file mode 100644 index 00000000..71e8dfdb --- /dev/null +++ b/.github/workflows/check_changelog.yml @@ -0,0 +1,11 @@ +name: check-changelog +on: + pull_request: + +jobs: + check-changelog: + runs-on: ubuntu-latest + steps: + - uses: tarides/changelog-check-action@v2 + with: + changelog: CHANGELOG.md diff --git a/.github/workflows/run_migrations.yml b/.github/workflows/run_migrations.yml index 776c95a6..9b928204 100644 --- a/.github/workflows/run_migrations.yml +++ b/.github/workflows/run_migrations.yml @@ -66,3 +66,8 @@ jobs: with: command: run args: migrate + - name: Revert migrations + uses: actions-rs/cargo@v1 + with: + command: run + args: migrate --revert diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f4977e0..9eac3f68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - [244](https://github.com/thoth-pub/thoth/issues/244) - Expose GraphQL schema file in /schema.graphql +### Added + - [503](https://github.com/thoth-pub/thoth/issues/503) - Allow reverting migrations in the CLI and check that migrations can be reverted in run-migration github action + - [557](https://github.com/thoth-pub/thoth/pull/557) - Added github action to chech that the changelog has been updated on PRs + ## [[0.11.15]](https://github.com/thoth-pub/thoth/releases/tag/v0.11.15) - 2024-01-18 ### Changed - [536](https://github.com/thoth-pub/thoth/issues/536) - Rename "SciELO" location platform to "SciELO Books" diff --git a/src/bin/thoth.rs b/src/bin/thoth.rs index 1595db5d..ac3cf990 100644 --- a/src/bin/thoth.rs +++ b/src/bin/thoth.rs @@ -1,10 +1,10 @@ -use clap::{crate_authors, crate_version, value_parser, Arg, Command}; +use clap::{crate_authors, crate_version, value_parser, Arg, ArgAction, Command}; use dialoguer::{console::Term, theme::ColorfulTheme, Input, MultiSelect, Password, Select}; use dotenv::dotenv; use std::env; use thoth::api::account::model::{AccountData, LinkedPublisher}; use thoth::api::account::service::{all_emails, all_publishers, register, update_password}; -use thoth::api::db::{establish_connection, run_migrations}; +use thoth::api::db::{establish_connection, revert_migrations, run_migrations}; use thoth::api_server; use thoth::app_server; use thoth::export_server; @@ -129,7 +129,16 @@ fn thoth_commands() -> Command { .about(env!("CARGO_PKG_DESCRIPTION")) .subcommand_required(true) .arg_required_else_help(true) - .subcommand(Command::new("migrate").about("Run the database migrations")) + .subcommand( + Command::new("migrate") + .about("Run the database migrations") + .arg( + Arg::new("revert") + .long("revert") + .help("Revert all database migrations") + .action(ArgAction::SetTrue), + ), + ) .subcommand( Command::new("start") .about("Start an instance of Thoth API or GUI") @@ -240,7 +249,10 @@ fn main() -> ThothResult<()> { } _ => unreachable!(), }, - Some(("migrate", _)) => run_migrations(), + Some(("migrate", migrate_matches)) => match migrate_matches.get_flag("revert") { + true => revert_migrations(), + false => run_migrations(), + }, Some(("init", init_matches)) => { let host = init_matches.get_one::("host").unwrap().to_owned(); let port = init_matches.get_one::("port").unwrap().to_owned(); diff --git a/thoth-api/src/db.rs b/thoth-api/src/db.rs index 8e82f279..cc981931 100644 --- a/thoth-api/src/db.rs +++ b/thoth-api/src/db.rs @@ -39,3 +39,11 @@ pub fn run_migrations() -> ThothResult<()> { Err(error) => Err(ThothError::DatabaseError(error.to_string())), } } + +pub fn revert_migrations() -> ThothResult<()> { + let mut connection = establish_connection().get().unwrap(); + match connection.revert_all_migrations(MIGRATIONS) { + Ok(_) => Ok(()), + Err(error) => Err(ThothError::DatabaseError(error.to_string())), + } +}