119 lines
2.9 KiB
Bash
119 lines
2.9 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# This script is used to sync a project from
|
||
|
|
# a remote server to a local machine.
|
||
|
|
#
|
||
|
|
# Considerations:
|
||
|
|
# 1. The server must have an SSH key set up for password-less login.
|
||
|
|
# 2. The server must have the project files in a specific folder. (~/public_leo, etc..)
|
||
|
|
#
|
||
|
|
# How it works:
|
||
|
|
# 1. created an archive on the server
|
||
|
|
# 2. copy the archive to the local machine
|
||
|
|
# 3. extract the archive locally
|
||
|
|
# 4. delete the local archive
|
||
|
|
# 5. delete the server archive
|
||
|
|
# 6. create .vscode/sftp.json file
|
||
|
|
|
||
|
|
# Colors for output
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
RED='\033[0;31m'
|
||
|
|
BLUE='\033[0;34m'
|
||
|
|
NC='\033[0m' # No Color
|
||
|
|
|
||
|
|
echo -e "${BLUE}=== Project Sync Configuration ===${NC}"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Prompt for configuration
|
||
|
|
read -p "Server user@host (e.g., leo@server.com): " SERVER_HOST
|
||
|
|
read -p "Server project path (e.g., ~/public_leo): " SERVER_PROJECT_PATH
|
||
|
|
read -p "Local folder path (e.g., ./local_project): " LOCAL_FOLDER
|
||
|
|
read -sp "SSH Password: " SSH_PASSWORD
|
||
|
|
echo ""
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
ARCHIVE_NAME="leo.tar.gz"
|
||
|
|
|
||
|
|
echo "Starting project sync..."
|
||
|
|
|
||
|
|
# Step 1: SSH into server and create tar archive
|
||
|
|
echo "Creating archive on server..."
|
||
|
|
sshpass -p "${SSH_PASSWORD}" ssh ${SERVER_HOST} "cd ${SERVER_PROJECT_PATH} && tar -czf ../${ARCHIVE_NAME} ."
|
||
|
|
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo -e "${RED}Failed to create archive on server${NC}"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -e "${GREEN}Archive created successfully${NC}"
|
||
|
|
|
||
|
|
# Step 2: Create local folder if it doesn't exist
|
||
|
|
mkdir -p "${LOCAL_FOLDER}"
|
||
|
|
|
||
|
|
# Step 3: Copy archive from server to local
|
||
|
|
echo "Copying archive to local machine..."
|
||
|
|
sshpass -p "${SSH_PASSWORD}" scp ${SERVER_HOST}:~/${ARCHIVE_NAME} "${LOCAL_FOLDER}/"
|
||
|
|
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo -e "${RED}Failed to copy archive${NC}"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -e "${GREEN}Archive copied successfully${NC}"
|
||
|
|
|
||
|
|
# Step 4: Extract archive locally
|
||
|
|
echo "Extracting archive..."
|
||
|
|
cd "${LOCAL_FOLDER}"
|
||
|
|
tar -xzf ${ARCHIVE_NAME}
|
||
|
|
|
||
|
|
if [ $? -ne 0 ]; then
|
||
|
|
echo -e "${RED}Failed to extract archive${NC}"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -e "${GREEN}Archive extracted successfully${NC}"
|
||
|
|
|
||
|
|
# Step 5: Clean up - delete local archive
|
||
|
|
echo "Cleaning up local archive..."
|
||
|
|
rm ${ARCHIVE_NAME}
|
||
|
|
|
||
|
|
# Step 6: Clean up - delete server archive
|
||
|
|
echo "Cleaning up server archive..."
|
||
|
|
sshpass -p "${SSH_PASSWORD}" ssh ${SERVER_HOST} "rm ~/${ARCHIVE_NAME}"
|
||
|
|
|
||
|
|
echo -e "${GREEN}Sync complete!${NC}"
|
||
|
|
|
||
|
|
# Create .vscode sftp.json file
|
||
|
|
mkdir -p .vscode
|
||
|
|
|
||
|
|
# Extract username and host from SERVER_HOST
|
||
|
|
USERNAME="${SERVER_HOST%@*}"
|
||
|
|
HOST="${SERVER_HOST#*@}"
|
||
|
|
|
||
|
|
echo "{
|
||
|
|
\"name\": \"${LOCAL_FOLDER}\",
|
||
|
|
\"host\": \"${HOST}\",
|
||
|
|
\"protocol\": \"sftp\",
|
||
|
|
\"port\": 22,
|
||
|
|
\"username\": \"${USERNAME}\",
|
||
|
|
\"password\": \"${SSH_PASSWORD}\",
|
||
|
|
\"remotePath\": \"${SERVER_PROJECT_PATH}\",
|
||
|
|
\"uploadOnSave\": true,
|
||
|
|
\"useTempFile\": false,
|
||
|
|
\"openSsh\": false,
|
||
|
|
\"ignore\": [
|
||
|
|
\".vscode\",
|
||
|
|
\".DS_Store\",
|
||
|
|
\"node_modules\",
|
||
|
|
\"vendor\",
|
||
|
|
\"storage\",
|
||
|
|
\"uploads\",
|
||
|
|
\"temp\",
|
||
|
|
\"cache\",
|
||
|
|
\"sitepress-multilingual-cms\"
|
||
|
|
]
|
||
|
|
}" >.vscode/sftp.json
|
||
|
|
|
||
|
|
echo -e "${GREEN}.vscode/sftp.json created successfully${NC}"
|
||
|
|
|