{ "info": { "author": "Remi Caput", "author_email": "python.org+creep@mirari.fr", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Topic :: Software Development :: Build Tools", "Topic :: System :: Archiving :: Mirroring", "Topic :: System :: Software Distribution" ], "description": "Creep README file\n=================\n\n[![Build Status](https://travis-ci.org/r3c/creep.svg?branch=master)](https://travis-ci.org/r3c/creep)\n\nOverview\n--------\n\nCreep is an incremental deploy tool. It allows delta update from any Git\nrepository or a regular directory to a FTP or SSH remote server. Its purpose is\nto deploy applications where files needed on remote servers (e.g. production)\nmatch local files, that is to say when \"deployment\" actually means \"copy with\nsome optional files preprocessing\". For example it works best for HTML/CSS/JS\nwebsites or server technologies like PHP.\n\nIncremental deployment means Creep keeps track of deployed files on all remote\nlocations. Only modified files are transferred between two deployments. This\ntracking mechanism depends on the type of directory used, for exemple Creep uses\nrevision hashes when deploying from a Git repository.\n\nInstalling\n----------\n\nYou can install Creep using either pip or manual install from sources. If you\nchoose to use pip, just type the following:\n\n\t$ pip install creep\n\t$ creep -h # display help to ensure install worked properly\n\nIf you prefer manual install checkout the Git repository anywhere you want. Then\ncreate a symbolic link in your `$PATH` to file `creep/creep.py`. Last step is\nconvenient but not mandatory, you can call Creep using full path to `creep.py`:\n\n\t$ git clone https://github.com/r3c/creep.git\n\t$ cd creep\n\t$ sudo ln -s creep/creep.py /usr/bin/creep\n\t$ creep -h # display help\n\nAfter installation go to your project folder and continue reading to deploy your\nfirst project.\n\nQuick start\n-----------\n\nFirst go to the directory you want to deploy, e.g. the `src` folder of some\nproject. It can be inside a Git repository or just a regular folder, Creep will\nselect a suitable default configuration either way. Create a new `.creep.env`\nfile inside this directory with following JSON content:\n\n\t{\n\t\t\"default\": {\n\t\t\t\"connection\": \"file:////tmp/creep-quickstart\"\n\t\t}\n\t}\n\nMind the quadruple slash in `file:////tmp/creep-quickstart` string. Once file is\nsaved, create the directory and execute creep with no parameter:\n\n\t$ mkdir /tmp/creep-quickstart\n\t$ creep\n\nCreep will tell you about deploying this project for the first time and ask you\nto confirm. Enter `Y` to continue. It will display the full list of files in\nyour project (by scanning file system or Git history) then ask you again to\nconfirm. Enter `Y` and Creep will deploy your project to directory\n`/tmp/creep-quickstart`.\n\nNow if you try to execute creep again you'll see a message saying no action is\nrequired. Deployment location now contains an up-to-date version of your project\nand Creep saved this information. Try to change some file (and `git commit` them\nif you were using Git) then execute the command again. This time Creep will send\nonly the file you changed rather than the full project.\n\nThis basic example shows how to incrementally deploy a project to some local\ndirectory. Next sections will show how to deploy to remote locations (FTP or\nSSH) and register several locations.\n\nEnvironment file\n----------------\n\nAs seen before Creep reads deployment location(s) from a configuration file\ncalled _environment_ file. It contains one or more named location(s) pointing to\nservers you want to deploy to. Name this file `.creep.env` and put it in any\ndirectory you want to deploy.\n\nCreep will deploy contents of this directory to remote location(s) and preserve\nhierarchical structure. You can have several environment files in several\nsub-directories inside your projet. For example one in `src` directory to deploy\nexecutable code and another one in `assets` directory to deploy static files to\nweb servers.\n\nEnvironment configuration file uses JSON format and looks like this:\n\n\t{\n\t\t\"default\": {\n\t\t\t\"connection\": \"file:///../webdev/my-project\"\n\t\t},\n\t\t\"integration\": {\n\t\t\t\"connection\": \"ftp://me:password@my-dev-server/www-data\"\n\t\t},\n\t\t\"production\": {\n\t\t\t\"connection\": \"ssh://login@my-prod-server.com/www-data\"\n\t\t}\n\t}\n\nElements in the root object specifies an available deployment location. Each one\r\nmust contain at least a `connection` string specifying protocol, address,\ncredentials and/or path. Read details below for more information about supported\nprotocols.\n\nOnce environment configuration file is ready you can start using Creep. Just\ntype `creep ` where `` is name of a configured location. You can\nalso specify multiple locations, or use `*` to deploy everywhere. If you don't\r\nspecify any name Creep will deploy to `default` location.\n\nCreep will then fetch last deployed revision from remote location and compute\ndifference. When you deploy for the first time there is no last deployed\nrevision so Creep will perform a full deploy. After each successful\ndeployment it will save revision to remote location in a `.creep.rev` file.\n\nStoring revision information on remote location keeps related data altogether\nand works well if you're not the only developer doing deployments. In case you\nprefer storing them locally, just add a new `local` option with value `true`\nfor all affected locations in your `.creep.env` file:\n\n\t{\n\t\t...\n\t\t\"integration\": {\n\t\t\t\"connection\": \"ftp://me:password@my-dev-server/www-data/\",\n\t\t\t\"local\": true\n\t\t},\n\t\t...\n\t}\n\nYou can specify some options depending on the protocol you're using. To specify\noptions just add a `options` JSON object property holding required options:\n\n\t{\n\t\t...\n\t\t\"default\": {\n\t\t\t\"connection\": \"ssh://www-data@localhost/www.mywebsite.com/\",\n\t\t\t\"options\": {\n\t\t\t\t\"extra\": \"-o StrictHostKeyChecking=no\"\n\t\t\t}\n\t\t},\n\t\t...\n\t}\n\nHere is the list of supported protocols with expected connection string format\nand available options:\n\n- Local file system:\r\n - Use connection format `file:///path` where path is relative to current\r\n directory.\r\n - Note the use of triple slash `///` because file protocol has no hostname.\r\n- FTP:\r\n - Use connection format `ftp://user:pass@host:port/path` where `user` and\r\n `pass` are optional credentials (anonymous login will be used if they're\r\n missing), `port` is an optional FTP port which defaults to 21, and `path` is\r\n a path relative to FTP user home directory.\r\n - Boolean option `passive` enables (default) or disables passive mode.\r\n- SSH:\r\n - Use connection format `ssh://user@host:port/path` with same variables than\r\n the ones used for FTP deployment. No password can be specified here so\n you'll need to either enter password manually or setup SSH keys and start\n SSH agent.\n - String option `extra` can be used to pass parameters to SSH command as shown\r\n in example above.\n\nPath is relative by default in all protocols. Start your path by a slash `/`\ncharacter to specify an absolute path, e.g. `file:////var/opt/myproject`.\n\nNote that environment files only describe information about external locations\nand may contain passwords. For those reasons they should be excluded from your\nversionning and kept only on machines performing deployments.\n\nIf you prefer not to write environment configuration as files, you can also\npass it as a JSON string using `-e` command line option:\n\n\tcreep -e '{\"default\": {\"connection\": \"ftp://me:password@host\"}}'\n\nDefinition file\n---------------\n\nCreep supports another configuration file, called _definition_ file. It's used\nto define how to detect changes what preprocessing operations to apply on files\nupon transfer. Name this file `.creep.def` and put it in the same directories\nyour environment files are. As opposed to environment files this one is bound to\nyour project and should be shared along with other project files.\n\nDefinition configuration file uses JSON format and looks like this:\n\n\t{\n\t\t\"source\": \"hash\",\n\t\t\"options\": {\n\t\t\t\"algorithm\": \"md5\",\n\t\t\t\"follow\": false\n\t\t},\n\t\t\"modifiers\": [\n\t\t\t{\n\t\t\t\t\"pattern\": \"\\\\.dist$\",\n\t\t\t\t\"filter\": \"false\"\n\t\t\t}\n\t\t]\n\t}\n\nThe `source` part specifies how Creep should analyze differences when you\nexecute it inside this directory. When this option is not specified Creep will\nauto-detect it based on current environment. The `options` allows you to tune\nbehavior of the selected `source` by specifying custom parameters. Here is the\nlist of supported sources and associated options:\n\n- Git versionning:\n - Specify `git` source so local `git` executable is used to get diff between\n two revisions. When using this mode Creep relies on Git history and only\n needs to remember which revision has been deployed. It also allows you to\n manually specify the revision you want to deploy through command line\n argument.\n - No options are available for this source type.\n- File hash:\n - Specify `hash` source to have Creep computing a hash of each file to detect\n differences. This mode has a higher overhead than Git since it has to save\n a value for each file rather than one unique revision, but can work with any\n regular folder.\n - String option `algorithm` selects the hashing algorithm to be used among\n sha1, sha256, sha512 or md5 (default).\n - Boolean option `follow` specifies whether symbolic links should be\n followed or ignored (default).\n\nThe `modifiers` part defines actions to perform on files before they're sent to\nremote locations (e.g. rename, compile, minify, obfuscate, etc.). Each modifier\nmust define a regular expression `pattern` property to select files it affects,\nand processing actions that will be applied on them.\n\nHere is an example of `modifiers` section in a definition configuration.\nRemember backslashes must be escaped in JSON, hence the double `\\\\` used in\nregular expression patterns:\n\n\t{\n\t\t...\n\t\t\"modifiers\": [\n\t\t\t{\n\t\t\t\t\"pattern\": \"\\\\.dist$\",\n\t\t\t\t\"filter\": \"false\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"pattern\": \"\\\\.min\\\\.js$\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"pattern\": \"\\\\.js$\",\n\t\t\t\t\"modify\": \"uglifyjs --compress --mangle -- '{}'\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"pattern\": \"(.*)\\\\.less$\",\n\t\t\t\t\"rename\": \"\\\\1.css\",\n\t\t\t\t\"modify\": \"lessc --clean-css '{}'\",\n\t\t\t\t\"link\": \"find . -name '*.less' | xargs grep -Fl \\\"$(basename '{}')\\\" || true\"\n\t\t\t}\n\t\t]\n\t\t...\n\t}\n\nCreep evaluates modifiers in sequence and one file can only match one modifier:\nevaluation stops after the first matched one. For each file matching a modifier,\nassociated actions (if any) are applied on it. Available modifier actions are\nlisted below:\n\n- `filter` action specifies a shell command to be executed, where special `{}`\n token is replaced by an absolute path to the file being matched. If this\n command returns a non-zero result file won't be sent to remote location.\n - In the example above, the `false` command is used to exclude files with name\r\n ending with `.dist` from deployment.\n - Empty string value can also be used to always exclude files. It's equivalent\r\n to the `false` command used in the example above but has better portability.\n- `rename` action specifies a new name for file and supports back references on\n the regular expression used in `pattern`.\n - In the example above, files ending with `.less` will have their extension\r\n changed to `.css`: the back reference `\\\\1` captured original file name\n without extension in associated pattern.\n- `modify` action specifies a shell command (similar to `filter` action).\r\n Standard output of this command will replace content of the file before it's\n sent to remote location.\n - In the example above, executable `uglifyjs` is called to minify JavaScript\r\n files (ending with `.js`).\n - Note presence of a rule which matches files with name ending with `.min.js`:\r\n it doesn't specify any action but prevents the `\\.js$` rule from being\n triggered for files that are already minified.\n- `link` action specifies a shell command similar to the `adapt` one but is\r\n expected to return a path (relative to deployment directory) to all files that\n should be sent whenever matched ones are matched.\n - In the example above, a command using `find` and `grep` is used to list all\r\n files referencing currently ones, so they're also sent to remote location\n whenever the file they reference is changed.\n - Note the regular expression could have been more specific, but the point is\r\n to be sure to include all changed files when deploying ; a few false\n positives will just cause harmless extra synchronizations.\n\nCreep always appends two modifiers to filter to exclude environment and\ndefinition files from deployments. You shouldn't need to change this behavior,\nbut you may do so by adding explicit modifiers matching them.\n\nLike for environment configuration you can also specify definition\nconfiguration as a JSON string instead of file using `-d` command line option:\n\n\tcreep -d '{\"source\": \"hash\"}'\n\nTroubleshooting\n---------------\n\nThis project is still under develpement and may not behave as you would expect.\nIn case of issue the `-v` (verbose) switch may help you understanding how your\nenvironment and definition files are used.\n\nIf you can't figure out what's happening don't hesitate to open an issue on\nGitHub or contact me!", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/r3c/creep", "keywords": "deploy deployment incremetal ftp ssh git", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "creep", "package_url": "https://pypi.org/project/creep/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/creep/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/r3c/creep" }, "release_url": "https://pypi.org/project/creep/0.3.4/", "requires_dist": null, "requires_python": null, "summary": "Incremental FTP/SSH deployment tool", "version": "0.3.4" }, "last_serial": 2388553, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "f2036eae133bdb1c07a9aed353831586", "sha256": "9317e4a6b92d02df4b25651bcf0dce7da8e9a48e54cbc0bf4e7d56ed4be3971a" }, "downloads": -1, "filename": "creep-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f2036eae133bdb1c07a9aed353831586", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22147, "upload_time": "2016-05-13T21:41:20", "url": "https://files.pythonhosted.org/packages/3e/1f/ee321b15cfaf5a1ff165a9b1345f70ef22cce3a298c60725978e8b87fa47/creep-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7055b1fd571590a8ff303a6e6472883c", "sha256": "1530c59ebadf44c273fee58638a4dc97f3fdb9356fcfc8d92a77456ac61d2d10" }, "downloads": -1, "filename": "creep-0.2.0.tar.gz", "has_sig": false, "md5_digest": "7055b1fd571590a8ff303a6e6472883c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22449, "upload_time": "2016-05-14T11:27:04", "url": "https://files.pythonhosted.org/packages/95/9b/71823b4d23645e96f8526abcb7f53264d79db498bb2910d4b21bdb4bee54/creep-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "1921db4940b17b29773f7b80d6349e21", "sha256": "bcce306a2913936fb756469a0d38ffa1d1441d206477178bc9af58f3247ff96d" }, "downloads": -1, "filename": "creep-0.2.1.tar.gz", "has_sig": false, "md5_digest": "1921db4940b17b29773f7b80d6349e21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22004, "upload_time": "2016-05-15T22:15:28", "url": "https://files.pythonhosted.org/packages/29/14/785f18fca51928d80f97d62d16497a049b9d6bbf6c923972ef6777daf7c8/creep-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "0bc8a2f7199004b14f71ecd1dc4eee7b", "sha256": "3481d068eb21fac30ef31f5daa8e2941f5486313887b137a306ad271e54e8132" }, "downloads": -1, "filename": "creep-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0bc8a2f7199004b14f71ecd1dc4eee7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17793, "upload_time": "2016-10-02T08:12:36", "url": "https://files.pythonhosted.org/packages/75/79/44904c4065599e8870e0681525555de6ec668ff89cd8a63320d1ccd557ca/creep-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "37f6492784522710facbba5770956a9f", "sha256": "cefb1b3bee892c1592c4ddac131fcfad34319f5f24b329c439e93d1d643c2ba9" }, "downloads": -1, "filename": "creep-0.3.1.tar.gz", "has_sig": false, "md5_digest": "37f6492784522710facbba5770956a9f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17943, "upload_time": "2016-10-02T09:09:52", "url": "https://files.pythonhosted.org/packages/39/9e/e19f39d0910e387bdbcee967d5d1a5614e2623ab57aee371e1bbe5da8ed9/creep-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "8b582cff81ffc437eb64d4248801c76d", "sha256": "1f6a2f2168190eb9c62a59f64ca094e21314f0ce44f85410ab125dc49f70a971" }, "downloads": -1, "filename": "creep-0.3.2.tar.gz", "has_sig": false, "md5_digest": "8b582cff81ffc437eb64d4248801c76d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23040, "upload_time": "2016-10-02T15:27:43", "url": "https://files.pythonhosted.org/packages/47/4d/653f1e41b1f11b59675579e2deb35cba1cba6f4a2ebb283611dc8ab69170/creep-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "09fc51cec95b2f083a2210dfb41ecf92", "sha256": "9a5e36eca416f6580c524b613ea6d929403e6765dcc5681cfe775c9ea70ce884" }, "downloads": -1, "filename": "creep-0.3.3.tar.gz", "has_sig": false, "md5_digest": "09fc51cec95b2f083a2210dfb41ecf92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18033, "upload_time": "2016-10-06T20:33:32", "url": "https://files.pythonhosted.org/packages/7f/6f/b0a0583c95693b68df6a6d3118665274a41031f218a96d66c95d612ffb85/creep-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "baa3354f9f9b619e89d197f9bc512dc7", "sha256": "315945b21110e40d5c821141d0b26567a3771896b946e281227e8a573d47322c" }, "downloads": -1, "filename": "creep-0.3.4.tar.gz", "has_sig": false, "md5_digest": "baa3354f9f9b619e89d197f9bc512dc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18460, "upload_time": "2016-10-08T18:31:19", "url": "https://files.pythonhosted.org/packages/6e/1f/6e84e9f27ff655eca1d751d976ce1761f2959e5050823a6625e705ae4727/creep-0.3.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "baa3354f9f9b619e89d197f9bc512dc7", "sha256": "315945b21110e40d5c821141d0b26567a3771896b946e281227e8a573d47322c" }, "downloads": -1, "filename": "creep-0.3.4.tar.gz", "has_sig": false, "md5_digest": "baa3354f9f9b619e89d197f9bc512dc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18460, "upload_time": "2016-10-08T18:31:19", "url": "https://files.pythonhosted.org/packages/6e/1f/6e84e9f27ff655eca1d751d976ce1761f2959e5050823a6625e705ae4727/creep-0.3.4.tar.gz" } ] }