Last active
April 2, 2021 15:34
-
-
Save mattbloomfield/92103e409a5d6f6ea8105be641d3ae6b to your computer and use it in GitHub Desktop.
Custom `pull` command to sync your local db with a remote env
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# This command is used for when assets are stored locally. For AWS syncing, see sync_aws.sh | |
## Custom `pull` command to sync your local db with a remote env. | |
## NOTE THAT THIS WILL REPLACE YOUR EXISTING DATABASE | |
## Usage: fin sync | |
BLUE=\\x1B[34m | |
YELLOW=\\x1B[33m | |
GREEN=\\x1B[32m | |
RED=\\x1B[31m | |
RESET=\\x1b[0m | |
# Forces whole job to error on failure | |
set -e | |
TRANSACTION_ID=$(date +"%Y-%m-%d_%H-%M-%S") | |
if [ "$1" = "development" ] || [ "$1" = "master" ] || [ "$1" = "staging" ] || [ "$1" = "production" ]; then | |
REMOTE_ENV=$1 | |
fi | |
if [ "$1" = 'db' ] || [ "$2" = 'db' ] || [ "$3" = 'db' ] || [ "$4" = 'db' ]; then | |
PULL_DB="Yes" | |
fi | |
if [ "$1" = 'files' ] || [ "$2" = 'files' ] || [ "$3" = 'files' ] || [ "$4" = 'files' ]; then | |
SYNC_FILES="Yes" | |
fi | |
if [ "$1" = 'assets' ] || [ "$2" = 'assets' ] || [ "$3" = 'assets' ] || [ "$4" = 'assets' ]; then | |
SYNC_FILES="Yes" | |
fi | |
if [ -z "$REMOTE_ENV" ] | |
then | |
echo "${BLUE}Please choose an environment to pull from${RESET}" | |
select REMOTE_ENV in "development" "staging" "production"; do | |
case $REMOTE_ENV in | |
"development") | |
echo "Development not yet functional. Please try staging or prod" | |
;; | |
"staging") | |
break | |
;; | |
"production") | |
break | |
;; | |
*) | |
echo "Invalid option $REPLY";; | |
esac | |
done | |
fi | |
if [ -z "$PULL_DB" ] | |
then | |
echo "${BLUE}Do you want to pull the database? This will replace your local database with ${REMOTE_ENV}${RESET}" | |
select PULL_DB in "Yes" "No"; do | |
case $PULL_DB in | |
"Yes") | |
echo "Noted." | |
break | |
;; | |
"No") | |
echo "Ok, your loss!" | |
break | |
;; | |
*) | |
echo "Invalid option $REPLY";; | |
esac | |
done | |
fi | |
if [ -z "$SYNC_FILES" ] | |
then | |
echo "${BLUE}Do you want to pull the files? This will replace your local files with ${REMOTE_ENV}${RESET} files" | |
select SYNC_FILES in "Yes" "No"; do | |
case $SYNC_FILES in | |
"Yes") | |
echo "Noted." | |
break | |
;; | |
"No") | |
echo "Ok, your loss!" | |
break | |
;; | |
*) | |
echo "Invalid option $REPLY";; | |
esac | |
done | |
fi | |
if [ $PULL_DB = 'Yes' ]; then | |
echo "${YELLOW}DUMPING LOCAL DB TO /tmp/${MYSQL_DATABASE}_local.sql${RESET}" | |
# Dump existing local database (for safety) | |
fin db dump /tmp/${MYSQL_DATABASE}_local_${TRANSACTION_ID}.sql | |
echo "${YELLOW}DROPPING LOCAL DB${RESET}" | |
# Delete local database if exists | |
fin db cli "DROP DATABASE ${MYSQL_DATABASE}" | |
echo "${YELLOW}CREATING LOCAL DB${RESET}" | |
# Create new local database | |
fin db create $MYSQL_DATABASE | |
echo "${YELLOW}DUMPING REMOTE DB FROM ${REMOTE_ENV}${RESET}" | |
# Dump the remote database and save locally | |
fin platform db:dump --gzip --project xxxxx -e $REMOTE_ENV -f /tmp/${MYSQL_DATABASE}_remote_${REMOTE_ENV}_${TRANSACTION_ID}.sql.gz | |
echo "${YELLOW}IMPORTING REMOTE DB${RESET}" | |
# Import locally saved database into container | |
fin exec "zcat < /tmp/${MYSQL_DATABASE}_remote_${REMOTE_ENV}_${TRANSACTION_ID}.sql.gz | mysql -u root -p$MYSQL_ROOT_PASSWORD -h db $MYSQL_DATABASE" | |
fi | |
if [ $SYNC_FILES = 'Yes' ]; then | |
fin sync_files $REMOTE_ENV | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment