{"_id":"tug","_rev":"34-94df807d94fa5d20db50c5f74c2fbe3a","name":"tug","description":"tug at the heart of your deployment process","dist-tags":{"latest":"0.1.8"},"versions":{"0.1.0":{"name":"tug","version":"0.1.0","description":"tug at the heart of your deployment process","repository":{"type":"git","url":"http://github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"keywords":["deployment","automation","prontotype"],"bin":{"tug":"./index.js"},"scripts":{"build":"./build.sh"},"dependencies":{"ssh2":"0.2.x","sshconf-stream":"0.1.x"},"bugs":{"url":"https://github.com/spro/tug/issues"},"_id":"tug@0.1.0","dist":{"shasum":"da6f547b5509a0f2a27462bdcaf859f8af0a650b","tarball":"https://registry.npmjs.org/tug/-/tug-0.1.0.tgz","integrity":"sha512-HkkuLDoQnDiZy5xBS3Ue0iwRGli2KFE2IXmLxWzXV4VgPZtX/1xNrKw7OIwbkCEuunC2/pjhQALMn9Fkuls/ZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGyaSfGgpJxZ4efp0Kt5GLAXIhiAHitFy7mvWr2qGkgFAiEAoSMSiC9bfTCS+f26CMC9KJDAZZ5yyV5M2zizAyeHmoE="}]},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"spro","email":"sprobertson@gmail.com"},"maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}]},"0.1.1":{"name":"tug","version":"0.1.1","description":"tug at the heart of your deployment process","repository":{"type":"git","url":"http://github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"keywords":["deployment","automation","prontotype"],"bin":{"tug":"./index.js"},"scripts":{"build":"./build.sh"},"dependencies":{"ssh2":"0.2.x","sshconf-stream":"0.1.x"},"bugs":{"url":"https://github.com/spro/tug/issues"},"_id":"tug@0.1.1","dist":{"shasum":"9b5d19bb2dfc9b896b47f9e47320228421d8e961","tarball":"https://registry.npmjs.org/tug/-/tug-0.1.1.tgz","integrity":"sha512-ctEaccIwVS1cl+4gvohjA1FIcIjXDYYCB8PvWgUpZ7u/Hji4feLMj8XqMH4Tqb9FeyrP3J1kagZ2IwPe00z/kw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD774wcKnLxLxOxMcmgAnSzA9/6xGEiZNflgZCcWyoxsAIhAMwhWXFR0Mny6MmdvvyPEcU6jptiJ8v4o1mnkTs1fuRL"}]},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"spro","email":"sprobertson@gmail.com"},"maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}]},"0.1.2":{"name":"tug","version":"0.1.2","description":"tug at the heart of your deployment process","repository":{"type":"git","url":"http://github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"keywords":["deployment","automation","prontotype"],"bin":{"tug":"./index.js"},"scripts":{"build":"./build.sh"},"dependencies":{"ssh2":"0.2.x","minimist":"0.0.x","sshconf-stream":"0.1.x"},"bugs":{"url":"https://github.com/spro/tug/issues"},"_id":"tug@0.1.2","dist":{"shasum":"f0a83caa3e8677b505f18cfe9d66f3d7be1b32d0","tarball":"https://registry.npmjs.org/tug/-/tug-0.1.2.tgz","integrity":"sha512-6CrLgNjAEpmRE8aj0bMhED0XNSTVKR9peRbb2Jxv1H50871f9NXooa/2/dbfxNqLv/Lq0HD8aUIlsU0cmaFGGA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBJ3LicopLi+2HJs+ofs0OpOeFOcAGYp+EAGvyzwRorAIgGXpBNdDmLRqTwPH/C4rjZGmxrPtbkAs94tnlOZ6O93o="}]},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"spro","email":"sprobertson@gmail.com"},"maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}]},"0.1.3":{"name":"tug","version":"0.1.3","description":"tug at the heart of your deployment process","repository":{"type":"git","url":"http://github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"keywords":["deployment","automation","prontotype"],"bin":{"tug":"./index.js"},"scripts":{"build":"./build.sh"},"dependencies":{"ssh2":"0.2.x","minimist":"0.0.x","sshconf-stream":"0.1.x"},"bugs":{"url":"https://github.com/spro/tug/issues"},"_id":"tug@0.1.3","dist":{"shasum":"003679ff9908e4958e4cb95e4f4dadc6d59b9f61","tarball":"https://registry.npmjs.org/tug/-/tug-0.1.3.tgz","integrity":"sha512-/HL9yIDgbUeApKlwQ49kIPHgW6XCA5rkivjcAXcWazEwOlftfZSxv3RzNMB7UNre61iVKMX6G6TG7Pg0H3r/nA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEGqw2UrFr5yuHqBroskHCNP8ypFh6ipaxM3PkEyApKKAiEAjrATZoxiwfbnzxpzPD6KLRttzY9/Xn4jISf/YDN2JfY="}]},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"spro","email":"sprobertson@gmail.com"},"maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}]},"0.1.4":{"name":"tug","version":"0.1.4","description":"tug at the heart of your deployment process","repository":{"type":"git","url":"http://github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"keywords":["deployment","automation","prontotype"],"bin":{"tug":"./index.js"},"scripts":{"build":"./build.sh"},"dependencies":{"ssh2":"0.2.x","minimist":"0.0.x","sshconf-stream":"0.1.x"},"bugs":{"url":"https://github.com/spro/tug/issues"},"_id":"tug@0.1.4","dist":{"shasum":"6b833f5dc301c0bd6ce1da15b03388ed4d857a7e","tarball":"https://registry.npmjs.org/tug/-/tug-0.1.4.tgz","integrity":"sha512-qVDqrAT0vFywuLpRlh0FpEZuR1F7SbTqKmxfjfzEKqk9Bs7tbrWQIPCzEvwTREB8D2V8UoK/pRXxxXx4Jb8G+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCa2wQorPmrQ0ELw8lE/TapCvJjQkdC7S4tMe6fkkr1wIgNNCOi8bG61pDaHMf1jHlsd3gT9LDfxh93XRc0Q5qJxA="}]},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"spro","email":"sprobertson@gmail.com"},"maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}]},"0.1.5":{"name":"tug","version":"0.1.5","description":"tug at the heart of your deployment process","repository":{"type":"git","url":"http://github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"keywords":["deployment","automation","prontotype"],"bin":{"tug":"./index.js"},"scripts":{"build":"./build.sh"},"dependencies":{"async":"0.2.x","minimist":"0.0.x","ssh2":"0.2.x","sshconf-stream":"0.1.x"},"bugs":{"url":"https://github.com/spro/tug/issues"},"_id":"tug@0.1.5","dist":{"shasum":"9ff0442708058e6a9275866f3ff269dd2d125a81","tarball":"https://registry.npmjs.org/tug/-/tug-0.1.5.tgz","integrity":"sha512-AnwJI9LQxC3qoj2l02BzI0URj45tGATF2th5/KgwiJA/GX1zp6UiARpFSB/nD+YgiY80HkzVX9WHv7Os7mlV7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLUAiMyWfQ0WtxrrsNppt4afNWL6VJ03ghevMQ7yPe9AIhAPsqKk7iwXJ497hxvcxKfCPyCwNp40WSjqWLqk+QEh20"}]},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"spro","email":"sprobertson@gmail.com"},"maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}]},"0.1.6":{"name":"tug","version":"0.1.6","description":"tug at the heart of your deployment process","repository":{"type":"git","url":"http://github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"keywords":["deployment","automation","prontotype"],"bin":{"tug":"./index.js"},"scripts":{"build":"./build.sh"},"dependencies":{"async":"0.2.x","minimist":"0.0.x","ssh2":"0.2.x","sshconf-stream":"0.1.x"},"gitHead":"4c8f498503a8a2a9fff4cda4f5a5c9c66ae8919d","bugs":{"url":"https://github.com/spro/tug/issues"},"homepage":"https://github.com/spro/tug","_id":"tug@0.1.6","_shasum":"62b97017914d0d5aa39300c5b489618c764f7772","_from":".","_npmVersion":"1.4.24","_npmUser":{"name":"spro","email":"sprobertson@gmail.com"},"maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}],"dist":{"shasum":"62b97017914d0d5aa39300c5b489618c764f7772","tarball":"https://registry.npmjs.org/tug/-/tug-0.1.6.tgz","integrity":"sha512-nkD5iGstNXrCUzBlhYmJjITeLQuiuO4S+gOwNmp36lnju9ox3SCokLWMAOtENQ/vS9PQwqM0SjF309t2kFlIng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDh4AbUlD7usRQbfTMe3bzWG0IrRfpq0oVq12f3pTid0gIgCJIflUrPg2gWLGD5Z1JouXXVnvfSuWgABzYOfylwpqc="}]}},"0.1.7":{"name":"tug","version":"0.1.7","description":"tug at the heart of your deployment process","repository":{"type":"git","url":"http://github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"keywords":["deployment","automation","prontotype"],"bin":{"tug":"./index.js"},"scripts":{"build":"./build.sh"},"dependencies":{"async":"0.2.x","minimist":"0.0.x","levenshtein":"1.0.x","ssh2":"0.2.x","sshconf-stream":"0.1.x"},"gitHead":"e387c5de20fea54e45ee33b70135e457520b18c9","bugs":{"url":"https://github.com/spro/tug/issues"},"homepage":"https://github.com/spro/tug","_id":"tug@0.1.7","_shasum":"d419cc12a1bc36fccf4f3ff5f4138b63c542ae79","_from":".","_npmVersion":"1.4.24","_npmUser":{"name":"spro","email":"sprobertson@gmail.com"},"maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}],"dist":{"shasum":"d419cc12a1bc36fccf4f3ff5f4138b63c542ae79","tarball":"https://registry.npmjs.org/tug/-/tug-0.1.7.tgz","integrity":"sha512-+odSC+UP1BCqanfGDQ6BMfRQbhnNQe0A8Pf8r9WvCUVlA2CsvsDEVPLHTbqk/q5x6g2x1bkScwMeKGxXrSxtrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDl+GZRiwsxskZd8AWsixV2Rn1JGvej12UUlHxCRb0D5QIgC1yUD2FLjTZG7xRh+zagDWsiYjiBOTSuxlVqo+zwXZo="}]}},"0.1.8":{"name":"tug","version":"0.1.8","description":"tug at the heart of your deployment process","repository":{"type":"git","url":"git+ssh://git@github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"keywords":["deployment","automation","prontotype"],"bin":{"tug":"./index.js"},"scripts":{"build":"make"},"dependencies":{"async":"0.2.x","minimist":"0.0.x","levenshtein":"1.0.x","ssh2":"0.2.x","sshconf-stream":"0.1.2"},"gitHead":"3cc2c7154df8b3da59e33b5a222ad1587411549b","bugs":{"url":"https://github.com/spro/tug/issues"},"homepage":"https://github.com/spro/tug#readme","_id":"tug@0.1.8","_shasum":"6a887ebffd9aecdaaf03a77f09d99e0fd8795182","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.1.0","_npmUser":{"name":"spro","email":"sprobertson@gmail.com"},"maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}],"dist":{"shasum":"6a887ebffd9aecdaaf03a77f09d99e0fd8795182","tarball":"https://registry.npmjs.org/tug/-/tug-0.1.8.tgz","integrity":"sha512-0fCG5VLYlFtpP9P5MdEbImYbGQEYM4oVj4eriMZllgm4LxkkZnupfoVrb8zrE9XjhqjW/aTzx6SDCaCwbqGPbw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0t2f8reGFcpzcAidOCD5kOqJc5UbrI2QQ16Ou3PxSKQIhAKdgspQvXnsjVdqyXPCP8DnGlU2Ma8Yo6i9c3yuoRRxl"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/tug-0.1.8.tgz_1466450850744_0.9779017423279583"}}},"readme":"tug\n===\n\ntug at the heart of your deployment process\n\n![tugboat](https://github.com/spro/tug/blob/master/tugboat.png?raw=true)\n\nTug is a super-simple tool to make remote server administration a tiny bit easier. It lets you define common tasks as sets of shell scripts, and provides a simple way to execute those scripts remotely from the comfort of your local shell.\n\n### 1. Install\n\nInstall `tug` globally with  `npm install -g tug`\n\n### 2. Define a tug script\n\nWe want to deploy our website, *boat.com*, by pulling updates from a git repository, building the dependencies, and restarting the HTTP daemon. We have three load-balanced web servers and we need to perform the same steps on each.\n\nMake sure each host has an entry in `~/.ssh/config`, and create a `.tug` file called `~/.tug/boat.tug`:\n\n```\n[hosts]\nwww1.boat.com\nwww2.boat.com\nwww3.boat.com\n\n[step update]\ncd ~/project\ngit pull\n\n[step build]\ncd ~/project\nmake\n\n[step restart]\nnginx -s reload\n```\n\n### 3. `tug`\n\nBy default the first step in the tugfile is run:\n\n```\ntug boat\n```\n\n```\n[www1.boat.com]\n... git updated\n\n[www2.boat.com]\n... git updated\n\n[www3.boat.com]\n... git updated\n```\n\nTo run all steps, use the `-a` or `--all` option:\n\n```\ntug boat -a\n```\n\n```\n[www1.boat.com]\n... git updated\n... project built\n... nginx reloaded\n\n[www2.boat.com]\n... git updated\n... project built\n... nginx reloaded\n\n[www3.boat.com]\n... git updated\n... project built\n... nginx reloaded\n```\n\n#### Running specific steps\n\nPerhaps you need to reload nginx but don't need or want to update the repository. Steps can be specified on the command line with the `--steps` or `-s` option.\n\n```\ntug boat -s restart\n```\n\n```\n[www1.boat.com]\n... nginx reloaded\n\n[www2.boat.com]\n... nginx reloaded\n\n[www3.boat.com]\n... nginx reloaded\n```\n\nOptionally specify multiple steps to run in order, separated with commas:\n\n```\ntug boat -s build,restart\n```\n\n#### Running on specific hosts\n\nUse the `--hosts` or `-h` option to specify hosts to execute steps on, e.g.:\n\n```\ntug boat --hosts www2.boat.com\ntug boat -h www3.boat.com --steps update\n```\n\nAgain optionally specify multiple with commas:\n\n```\ntug boat -h www2.boat.com,www3.boat.com -s update,build\n```\n\n#### Local .tug files\n\nAs an alternative to using a central `~/.tug` directory, you can include a single `.tug` file in your project directory. Tug will look for this file if a name is not specified:\n\n```\ncd test\ntug -a\n```\n\n```\n[www.test.com]\n... git updated\n... project built\n... nginx reloaded\n```\n\n","maintainers":[{"name":"spro","email":"sprobertson@gmail.com"}],"time":{"modified":"2022-06-27T23:10:29.649Z","created":"2014-03-30T12:43:52.990Z","0.1.0":"2014-03-30T12:43:54.954Z","0.1.1":"2014-03-30T12:45:56.524Z","0.1.2":"2014-04-07T04:29:42.130Z","0.1.3":"2014-05-24T04:43:35.831Z","0.1.4":"2014-06-24T22:28:03.762Z","0.1.5":"2014-06-25T03:00:40.267Z","0.1.6":"2014-10-30T01:46:28.938Z","0.1.7":"2014-10-30T23:15:05.218Z","0.1.8":"2016-06-20T19:27:31.284Z"},"readmeFilename":"README.md","keywords":["deployment","automation","prontotype"],"repository":{"type":"git","url":"git+ssh://git@github.com/spro/tug.git"},"author":{"name":"Sean Robertson","url":"http://sprobertson.com/"},"bugs":{"url":"https://github.com/spro/tug/issues"},"homepage":"https://github.com/spro/tug#readme"}