{ "info": { "author": "Nando Florestan", "author_email": "nandoflorestan@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "====================================================================\nEasily write a script to release a new version, with variable steps.\n====================================================================\n\nReleasing software is a painful process. There are several checks that\nthe developer must make for each new version. The developer is prone\nto forget one of them or perform the checks out of the optimal order.\nAs Murphy would have it, many buggy releases are created for this reason.\n\n*releaser* is a little framework the developer can use to write a script to\nguide him through the new version release process, such that many checks\nare performed automatically. (Each software project will have\na release script that differs a little bit from others.)\n\nNow that I use *releaser* I can release my Python libraries more quickly and\neasily, so I find that I release more often. Well worth the initial investment.\n\nMany steps of a common Python release process have already been implemented,\nand you can easily write your own. If you do write a step, please donate it\nto the project by making a pull request on GitHub_.\n\n\nInstalling *releaser*\n=====================\n\nActivate your virtualenv, then::\n\n easy_install -UZ releaser\n\n\nGetting started\n===============\n\nSimply `download this script`_ to the root of your project::\n\n curl -O https://raw.github.com/nandoflorestan/releaser/master/release_new_version.py\n chmod +x ./release_new_version.py\n git add release_new_version.py\n\nThen edit the script as necessary. (You can `read it here`_.)\n\nWhen you execute the script, the configured steps are executed in order. The\nscreen shows little information, but you have all details in the log file.\n\nSome of the steps are interactive; for instance, you may be asked to\nverify the contents of a zip or wheel file before it is uploaded to pypi_.\n*releaser* also makes you type the number of the version being released, which\nis then validated (for instance, it is compared to the current version), then\nwritten to a source code file that belongs to your project.\n\n\nRolling back\n============\n\nIf any one of the steps fails, *releaser* asks you whether you would like it to\nrewind the process. (Yes, you get to decide.) How does this work?\n\nA few of the steps (especially those involving git) have a rollback() method.\nFor other steps (especially those that just check things at the beginning)\nrewinding wouldn't make any sense since they don't leave durable artifacts.\n\nIf your steps are correctly configured, rolling back leaves you exactly as you\nwere before *releaser* ran. But:\n\nNote the GitPush step has special behaviour. When it executes successfully\nbut an error occurs in a later step, *releaser* decides NOT to roll back\nGitPush and the steps that preceded it. This is because one cannot\ndelete git history once it has been pushed to a public server and\nGitPush tends to be one of the last steps anyway, so it is easier to\nfinish the release manually than to deal with git history inconsistencies.\n\nOther steps (such as creating a release on pypi_) cannot be automatically\nrewinded for technical reasons, but *releaser* warns you that you have to\ndo it manually before asking whether to roll back the release.\n\n\nLinks\n=====\n\nOur project home and issue tracker are at GitHub_.\nIt's easy to `read the source code`_.\n\nA popular alternative to *releaser* is the project `zest.releaser`_. It differs\nin features, manners of extensibility and support for Python versions.\n\n*releaser* supports Python 2.6, 2.7, 3.2, 3.3, 3.4 and 3.5 (without translation)\nthrough the nine_ project.\n\n.. _`download this script`: https://raw.github.com/nandoflorestan/releaser/master/release_new_version.py\n.. _`read it here`: https://github.com/nandoflorestan/releaser/blob/master/release_new_version.py\n.. _pypi: https://pypi.python.org/pypi\n.. _GitHub: https://github.com/nandoflorestan/releaser\n.. _`read the source code`: https://github.com/nandoflorestan/releaser/tree/master/releaser\n.. _nine: https://pypi.python.org/pypi/nine\n.. _`zest.releaser`: https://pypi.python.org/pypi/zest.releaser\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/nandoflorestan/releaser", "keywords": "python", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "releaser", "package_url": "https://pypi.org/project/releaser/", "platform": "", "project_url": "https://pypi.org/project/releaser/", "project_urls": { "Homepage": "https://github.com/nandoflorestan/releaser" }, "release_url": "https://pypi.org/project/releaser/1.2/", "requires_dist": null, "requires_python": "", "summary": "Automates the process of releasing a new version of some software.", "version": "1.2" }, "last_serial": 3263677, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "9caa6b2b94d395c367de17fecc8adf48", "sha256": "9a45b8c4d2517d96cedea46af95415fc1a995257ed6cc09fed6fa604ccd5acdb" }, "downloads": -1, "filename": "releaser-0.1.1.tar.gz", "has_sig": false, "md5_digest": "9caa6b2b94d395c367de17fecc8adf48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7892, "upload_time": "2013-08-01T01:39:51", "url": "https://files.pythonhosted.org/packages/87/4b/b404920e794d411b196e8fcb3cfb46eb9b927f1d113580f35378d431f277/releaser-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "f645a7a4648cfcd8f6c1cd58cd6c3232", "sha256": "5d0c817bfbca110c5f0bbf7a3233696af7c73a052bf95d6a1740d254e7536883" }, "downloads": -1, "filename": "releaser-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f645a7a4648cfcd8f6c1cd58cd6c3232", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9812, "upload_time": "2013-08-01T23:20:16", "url": "https://files.pythonhosted.org/packages/92/47/c46869bbf3623ab96eb0fd438ab6817ecc4bdeae52a687667841e883cb70/releaser-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "e6b9b922b8a4a9c1bff447f81ccae02e", "sha256": "31e8abb9cd96fce56e8e9fb14ac89061953deed67f0922972920923772bbcfd3" }, "downloads": -1, "filename": "releaser-0.1.3.tar.gz", "has_sig": false, "md5_digest": "e6b9b922b8a4a9c1bff447f81ccae02e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10355, "upload_time": "2013-08-02T19:57:01", "url": "https://files.pythonhosted.org/packages/9c/1c/0546e17a7ffc5c1b87984d175b1ac18c2a1dc5e2f7690c117407b1c524a7/releaser-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "56a31180b3821abdeb595c2f0d569d9d", "sha256": "5eb15a41cec10c44b5c6e2fb737701551439d72be5efbe9483103e791234af42" }, "downloads": -1, "filename": "releaser-0.1.4.tar.gz", "has_sig": false, "md5_digest": "56a31180b3821abdeb595c2f0d569d9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10362, "upload_time": "2013-08-12T10:22:37", "url": "https://files.pythonhosted.org/packages/48/2d/e9d43cc1e1e99df59408fe9a0c367ce0a86be8074e3118569b5a2ff40d3f/releaser-0.1.4.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "24a391e61cd346dc9e24693c9ed2da08", "sha256": "ca0bdf06219ba896940174061187d900f1bfde81337e99aae18023e0e2bf9801" }, "downloads": -1, "filename": "releaser-0.2.tar.gz", "has_sig": false, "md5_digest": "24a391e61cd346dc9e24693c9ed2da08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10422, "upload_time": "2015-02-05T13:23:47", "url": "https://files.pythonhosted.org/packages/5c/af/e7c9361c83cac896cf7ee3fc13dbb015e0c729ad35aa561f3706b85db7fb/releaser-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "8e0f94def3bbabab8300d2ce22572edb", "sha256": "6e43be9f01749dced15144f8c4835f229196a30873c9cd1f18bcb7274731ca53" }, "downloads": -1, "filename": "releaser-0.3.tar.gz", "has_sig": false, "md5_digest": "8e0f94def3bbabab8300d2ce22572edb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10398, "upload_time": "2016-02-24T21:05:36", "url": "https://files.pythonhosted.org/packages/e8/18/e82724326a17634d51e0db8df7edcbbf7811ecd94eb9d96994bd9b72dedb/releaser-0.3.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "b01149302c6156b94ca940e589c07839", "sha256": "e11d2738f8af387f202240c9744d079f32a3fa81dc2188ee8dc3b233d13404cd" }, "downloads": -1, "filename": "releaser-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b01149302c6156b94ca940e589c07839", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 14054, "upload_time": "2016-05-22T17:24:29", "url": "https://files.pythonhosted.org/packages/49/83/fc7fcd07654b0f528fd6123391545c1ddfd3c9679356ec586da33519d931/releaser-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d09e2901fa9bb8841e2cf80cc83b2bf", "sha256": "95392882eccefcccedddd4d83d3e5e5325ed5bee1da4320e518721e93e2d89d6" }, "downloads": -1, "filename": "releaser-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0d09e2901fa9bb8841e2cf80cc83b2bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11019, "upload_time": "2016-05-22T17:24:18", "url": "https://files.pythonhosted.org/packages/80/6e/eea612b55bec306b2fc8d9d83c29659537be1ff4ca8b161f79a6981f4298/releaser-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "4f93404b4e933a7140c06543f3fd6334", "sha256": "926744b9571afcb937443215e63432830880362e10260e64d67342e1b5a59e82" }, "downloads": -1, "filename": "releaser-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4f93404b4e933a7140c06543f3fd6334", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 14061, "upload_time": "2016-05-22T23:15:25", "url": "https://files.pythonhosted.org/packages/3a/2b/e91a6b02181e911ba41c247bdb7872cebb04840d49b925c632c67db13ada/releaser-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c8a7082bceabac80479ec43749ca98f", "sha256": "2d6de030363f21805454a79ce45199ff1e23fcb2afdce411ca9157095caca796" }, "downloads": -1, "filename": "releaser-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9c8a7082bceabac80479ec43749ca98f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11023, "upload_time": "2016-05-22T23:15:17", "url": "https://files.pythonhosted.org/packages/1d/43/16cb1c260140ec60bafa83915303599b8e6587b428607209991cb3c83b48/releaser-1.1.0.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "be8e1c49a37c716ed003351c69b12909", "sha256": "1c3c714118d31dc68ba52e0207124305dbd459dfa06b81703524f4d87f538b98" }, "downloads": -1, "filename": "releaser-1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be8e1c49a37c716ed003351c69b12909", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 14070, "upload_time": "2017-10-19T18:27:31", "url": "https://files.pythonhosted.org/packages/7b/1b/52e11671e2b7a954f746fd44f8bf7d450d5a536f917b47e5a2f9c7338c04/releaser-1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b08cad566cfc851ad11565e3b9577db", "sha256": "31b806666b8d018c4ea8a0217f2f39d734b9818fc59f7491a050b89d7f94a6b6" }, "downloads": -1, "filename": "releaser-1.2.tar.gz", "has_sig": false, "md5_digest": "8b08cad566cfc851ad11565e3b9577db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11158, "upload_time": "2017-10-19T18:27:24", "url": "https://files.pythonhosted.org/packages/ac/e3/d7ce536eb5f175e15a5ee33f82f1aa731ea3fb573c533183aa5ffe392272/releaser-1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "be8e1c49a37c716ed003351c69b12909", "sha256": "1c3c714118d31dc68ba52e0207124305dbd459dfa06b81703524f4d87f538b98" }, "downloads": -1, "filename": "releaser-1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be8e1c49a37c716ed003351c69b12909", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 14070, "upload_time": "2017-10-19T18:27:31", "url": "https://files.pythonhosted.org/packages/7b/1b/52e11671e2b7a954f746fd44f8bf7d450d5a536f917b47e5a2f9c7338c04/releaser-1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b08cad566cfc851ad11565e3b9577db", "sha256": "31b806666b8d018c4ea8a0217f2f39d734b9818fc59f7491a050b89d7f94a6b6" }, "downloads": -1, "filename": "releaser-1.2.tar.gz", "has_sig": false, "md5_digest": "8b08cad566cfc851ad11565e3b9577db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11158, "upload_time": "2017-10-19T18:27:24", "url": "https://files.pythonhosted.org/packages/ac/e3/d7ce536eb5f175e15a5ee33f82f1aa731ea3fb573c533183aa5ffe392272/releaser-1.2.tar.gz" } ] }