From 7008b4a11bd13a65d4a02260433eb8b57012b9b8 Mon Sep 17 00:00:00 2001 From: Leons Aleksandrovs <58330666+Skrazzo@users.noreply.github.com> Date: Wed, 22 Oct 2025 10:46:36 +0300 Subject: [PATCH] init --- sync-project.sh | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100755 sync-project.sh diff --git a/sync-project.sh b/sync-project.sh new file mode 100755 index 0000000..d2a81a1 --- /dev/null +++ b/sync-project.sh @@ -0,0 +1,118 @@ +#!/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}" +