{ "info": { "author": "Thomas Kluyver", "author_email": "thomas@kluyver.me.uk", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 3" ], "description": "*Modeltee* is a tool to automate software releases.\n\nI find that release time often involves several manual steps:\nremember to update the version number in several places, commit, make a clean\nbuild, upload, make and push a git tag...\n\nWhy a new tool? I could automate all that with a shell script. Modeltee lets you:\n\n- Define a reusable release procedure and subclass that for different projects.\n- Automatically check for required tools before starting a release.\n- Share components which can add checks and information.\n\nInstall it with::\n\n pip install modeltee\n\nYou define a release process as a subclass of ``modeltee.ReleaserBase``. There\nare five steps you can control.\n\n1. Automated checks (``check_prereqs``): check that e.g. ``git`` is installed.\n The base method runs checks from components you're using. If you\n override it, it's recommended to call it using ``super()``.\n2. Manual confirmation (``user_confirm``): present information to the user,\n and give them an opportunity to cancel. The base method presents information\n provided by components you're using.\n3. Steps before release (``before_release``): you might want to set the version\n number, make a clean build, give the tests a final run...\n4. The release itself (``do_release``): upload and tag the release.\n This is the one step you *must* define.\n5. Steps after release (``after_release``): e.g. set the version number to\n x+1.dev.\n\nA simple releaser for a Python package might look like this:\n\n.. code-block:: python\n\n from modeltee import ReleaserBase, Command, Bumpversion, Git\n import sys\n\n class Releaser(ReleaserBase):\n # These are components: they define checks to run before starting and\n # info to present, as well as providing shortcuts to use below.\n git = Git()\n twine = Command('twine')\n python = Command(sys.executable)\n bumpversion = Bumpversion()\n\n def before_release(self):\n self.bumpversion('--new-version', self.version, 'minor')\n self.python('setup.py', 'sdist')\n self.git('commit', '-am', 'version number -> {}'.format(self.version))\n self.git('push')\n\n def do_release(self):\n self.twine('upload', 'dist/foo-{}.tar.gz'.format(self.version))\n self.git('tag', str(self.version))\n self.git('push', '--tags')\n\n if __name__ == '__main__':\n Releaser.main()\n\n\nAnd you'd run it like this::\n\n ./release.py 1.3\n\nModeltee is named after the Ford `Model T `_,\none of the first cars to be mass produced on an assembly line.\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/takluyver/modeltee", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "modeltee", "package_url": "https://pypi.org/project/modeltee/", "platform": "", "project_url": "https://pypi.org/project/modeltee/", "project_urls": { "Homepage": "https://gitlab.com/takluyver/modeltee" }, "release_url": "https://pypi.org/project/modeltee/0.1.1/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A framework for automating software releases", "version": "0.1.1" }, "last_serial": 3234306, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "c6b0a9df8369a78a668933fb313d3887", "sha256": "8ec57243ae89bc633d72b06b0352c12dbf7ff7ddebdf2e7662ef28f4a15abf82" }, "downloads": -1, "filename": "modeltee-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c6b0a9df8369a78a668933fb313d3887", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7036, "upload_time": "2017-10-08T14:26:13", "url": "https://files.pythonhosted.org/packages/9a/97/ffd7abba3f4f4865a2a6222289ff8cb55e6d6b271412f02572d2b9e729da/modeltee-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "80da0d1a966f148d6a4faa4f6a3d16c9", "sha256": "a1aac7991807b0015f1efbd474f0f6dc6c3ec92154e95f1b4c2d10c65f5ea2fb" }, "downloads": -1, "filename": "modeltee-0.1.tar.gz", "has_sig": false, "md5_digest": "80da0d1a966f148d6a4faa4f6a3d16c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3639, "upload_time": "2017-10-08T14:26:14", "url": "https://files.pythonhosted.org/packages/b0/f3/b7d5f3417086d7f2a876cee93dfea7eba06ed487b9f07402493a00a88de9/modeltee-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1b2d24f4e83df30b1894aada6be6312a", "sha256": "45327a522009a1594946fee2d652fb38e6d75e09c76cd0571f743bc89c688529" }, "downloads": -1, "filename": "modeltee-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1b2d24f4e83df30b1894aada6be6312a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 8947, "upload_time": "2017-10-08T14:45:11", "url": "https://files.pythonhosted.org/packages/35/a9/c3467ae34225c7b52061f488029bb9663935668aee6fb32302027a4b28bb/modeltee-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c75eeae452c8dccd8b68f420b6571a6", "sha256": "76c2a99adbee9754d695453c9309934228f7095e2cd0dd7111e74cdccd08dd44" }, "downloads": -1, "filename": "modeltee-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7c75eeae452c8dccd8b68f420b6571a6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4680, "upload_time": "2017-10-08T14:45:14", "url": "https://files.pythonhosted.org/packages/41/22/883a8afdb8bd4e94b1b7d2678c94456de5d24b7ca18004846ba25bc530e2/modeltee-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1b2d24f4e83df30b1894aada6be6312a", "sha256": "45327a522009a1594946fee2d652fb38e6d75e09c76cd0571f743bc89c688529" }, "downloads": -1, "filename": "modeltee-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1b2d24f4e83df30b1894aada6be6312a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 8947, "upload_time": "2017-10-08T14:45:11", "url": "https://files.pythonhosted.org/packages/35/a9/c3467ae34225c7b52061f488029bb9663935668aee6fb32302027a4b28bb/modeltee-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c75eeae452c8dccd8b68f420b6571a6", "sha256": "76c2a99adbee9754d695453c9309934228f7095e2cd0dd7111e74cdccd08dd44" }, "downloads": -1, "filename": "modeltee-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7c75eeae452c8dccd8b68f420b6571a6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4680, "upload_time": "2017-10-08T14:45:14", "url": "https://files.pythonhosted.org/packages/41/22/883a8afdb8bd4e94b1b7d2678c94456de5d24b7ca18004846ba25bc530e2/modeltee-0.1.1.tar.gz" } ] }