diff --git a/deploy/db/migrate.sh b/deploy/db/migrate.sh index 5775d8c..629d5f4 100755 --- a/deploy/db/migrate.sh +++ b/deploy/db/migrate.sh @@ -4,7 +4,7 @@ set -e if [[ -z "$1" ]]; then - echo "Usage: $0 " + echo "Usage: $0 up-to|down-to " exit 1 fi ENVR="$1" @@ -12,57 +12,53 @@ if [[ "$ENVR" != "production" && "$ENVR" != "staging" ]]; then echo "Error: environment must be 'production' or 'staging'." exit 1 fi - if [[ -z "$2" ]]; then - echo "Usage: $0 " + echo "Usage: $0 up-to|down-to " exit 1 fi -VER="$2" +CMD="$2" +if [[ "$CMD" != "up-to" && "$CMD" != "down-to" ]]; then + echo "Error: Command must be 'up-to' or 'down-to'." + exit 1 +fi +if [[ -z "$3" ]]; then + echo "Usage: $0 up-to|down-to " + exit 1 +fi +VER="$3" re='^[0-9]+$' if ! [[ $VER =~ $re ]] ; then echo "Error: version not a number" >&2; exit 1 fi -BACKUP_FILE=$(/bin/bash ./test.sh "$ENVR" "$VER" | grep -oP '(?<=Backup created: ).*') +BACKUP_FILE=$(/bin/bash ./backup.sh "$ENVR" "$VER" | grep -oP '(?<=Backup created: ).*') if [[ "$BACKUP_FILE" == "" ]]; then echo "Error: backup failed" exit 1 fi - -# Get current datetime in YYYY-MM-DD-HHMM format TIMESTAMP=$(date +"%Y-%m-%d-%H%M") -# REAL VALUES -# ACTIVE_DIR="/home/deploy/$ENVR" -# DATA_DIR="/home/deploy/data/$ENVR" -# BACKUP_DIR="/home/deploy/data/backups/$ENVR" -# UPDATED_BACKUP="$BACKUP_DIR/${VER}-${TIMESTAMP}.db" -# UPDATED_COPY="$DATA_DIR/${VER}.db" -# UPDATED_LINK="$ACTIVE_DIR/${VER}.db" -# ##################################################################### -# TEST VALUES -ACTIVE_DIR="./deploy/$ENVR" -DATA_DIR="./deploy/data/$ENVR" -BACKUP_DIR="./deploy/data/backups/$ENVR" +ACTIVE_DIR="/home/deploy/$ENVR" +DATA_DIR="/home/deploy/data/$ENVR" +BACKUP_DIR="/home/deploy/data/backups/$ENVR" UPDATED_BACKUP="$BACKUP_DIR/${VER}-${TIMESTAMP}.db" UPDATED_COPY="$DATA_DIR/${VER}.db" UPDATED_LINK="$ACTIVE_DIR/${VER}.db" -# back to real code -# #################################################################### cp $BACKUP_FILE $UPDATED_BACKUP -# #################################################################### -# do migration +failed_cleanup() { + rm $UPDATED_BACKUP +} +trap 'if [ $? -ne 0 ]; then failed_cleanup; fi' EXIT + echo "Migration in progress" - - - - - -# TODO: if failed delete updated_backup +echo $UPDATED_BACKUP $CMD $VER +./psmigrate $UPDATED_BACKUP $CMD $VER +if [ $? -ne 0 ]; then + echo "Migration failed" + exit 1 +fi echo "Migration completed" -# end migration -# #################################################################### cp $UPDATED_BACKUP $UPDATED_COPY ln -s $UPDATED_COPY $UPDATED_LINK diff --git a/deploy/db/test.sh b/deploy/db/test.sh deleted file mode 100755 index 48b5a1e..0000000 --- a/deploy/db/test.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -# Exit on error -set -e - -if [[ -z "$1" ]]; then - echo "Usage: $0 " - exit 1 -fi - -ENVR="$1" -if [[ "$ENVR" != "production" && "$ENVR" != "staging" ]]; then - echo "Error: environment must be 'production' or 'staging'." - exit 1 -fi -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "random output" -echo "Error" -FILE="00001-2025-02-19-0927.db" -ACTIVE_DIR="./deploy/$ENVR" -DATA_DIR="./deploy/data/$ENVR" -BACKUP_DIR="./deploy/data/backups/$ENVR" -mkdir -p $ACTIVE_DIR -mkdir -p $DATA_DIR -mkdir -p $BACKUP_DIR -touch "$BACKUP_DIR/$FILE" -echo "Backup created: $BACKUP_DIR/$FILE" diff --git a/migrate/migrate.go b/migrate/migrate.go index 4f1b3a7..d42531a 100644 --- a/migrate/migrate.go +++ b/migrate/migrate.go @@ -32,7 +32,9 @@ func main() { if err != nil { log.Fatalf("Invalid version number: %v", err) } - + if _, err := os.Stat(filePath); os.IsNotExist(err) { + log.Fatalf("Database file does not exist: %v", filePath) + } db, err := sql.Open("sqlite", filePath) if err != nil { log.Fatalf("Failed to open database: %v", err)