SyncoDeMayo
A simple FTP syncing tool
What? That server you're uploading files to doesn't support rsync?! Yeah, me too. So here's a simple tool that will sync changed files to an FTP server.
It's pretty simple. SyncoDeMayo caches a list of known files, and their CRCs, on the server. On subsequent syncs it will only upload local files with a different CRC hash value.
Install globally:
$ npm install -g syncodemayo
Or install locally:
$ npm install syncodemayo
Suggested usage as NPM script:
{
"script": {
"sync": "syncodemayo sync staging",
"sync:production": "syncodemayo sync production"
}
}
$ syncodemayo
Usage: syncodemayo [options] [command]
Options:
-V, --version output the version number
-c, --config [file] Specify local config [file]
-h, --help output usage information
Commands:
init [target] Configure local folder and/or server to sync
changes|diff [target] Perform sync dry run and display the changes
verify [target] Verify server is configured
sync [options] [target] Perform sync to server
ls List defined targets in config
Example syncodemayo.json config:
{
"local": {
"path": "public",
"files": "**/**",
"exclude": ["**/*.map", "**/.DS_Store", "**/.git*"],
"defaultTarget": "staging",
"deleteRemoteFiles": true
},
"targets": {
"staging": {
"host": "www.myapp.com",
"path": "MyApp/www/stage",
"user": "USERNAME",
"pass": "PASSWORD",
"port": 21,
"cache": ".synco-filelist",
"prompt": false,
"enabled": false
},
"production": {
"host": "www.myapp.com",
"path": "MyApp/www",
"user": "USERNAME",
"prompt": "This is for PRODUCTION! Do you really mean it?"
}
}
}
You can put the FTP password in the config, but if you're adding it to source control I wouldn't. Instead, add the password to an .env file that you set to ignored in your SCM.
Example .env for above config:
STAGING_PWD=ftpPasswordHere
PRODUCTION_PWD="Other password here"
SyncoDeMayo will automatically look in your .env for passwords if they aren't in your config.
Note: Comments are allowed in config JSON files.