{"id":16907974,"url":"https://github.com/cjrh/bumpymcbumpface","last_synced_at":"2025-04-05T13:24:51.124Z","repository":{"id":52258923,"uuid":"184231553","full_name":"cjrh/bumpymcbumpface","owner":"cjrh","description":"Version bump, tag and deploy your python packages","archived":false,"fork":false,"pushed_at":"2021-05-03T04:06:37.000Z","size":31,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-13T03:45:06.081Z","etag":null,"topics":["automation","bump-version","bumpversion","deploy","pypi","release","tagging"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cjrh.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":["cjrh"]}},"created_at":"2019-04-30T09:19:35.000Z","updated_at":"2021-05-03T04:06:37.000Z","dependencies_parsed_at":"2022-09-24T22:40:44.857Z","dependency_job_id":null,"html_url":"https://github.com/cjrh/bumpymcbumpface","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Fbumpymcbumpface","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Fbumpymcbumpface/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Fbumpymcbumpface/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjrh%2Fbumpymcbumpface/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cjrh","download_url":"https://codeload.github.com/cjrh/bumpymcbumpface/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247340701,"owners_count":20923304,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","bump-version","bumpversion","deploy","pypi","release","tagging"],"created_at":"2024-10-13T18:49:36.270Z","updated_at":"2025-04-05T13:24:51.104Z","avatar_url":"https://github.com/cjrh.png","language":"Python","funding_links":["https://github.com/sponsors/cjrh"],"categories":[],"sub_categories":[],"readme":".. image:: https://img.shields.io/pypi/pyversions/bumpymcbumpface.svg\n    :target: https://pypi.python.org/pypi/bumpymcbumpface\n\n.. image:: https://img.shields.io/github/tag/cjrh/bumpymcbumpface.svg\n    :target: https://img.shields.io/github/tag/cjrh/bumpymcbumpface.svg\n\n.. image:: https://img.shields.io/badge/install-pip%20install%20bumpymcbumpface-ff69b4.svg\n    :target: https://img.shields.io/badge/install-pip%20install%20$bumpymcbumpface-ff69b4.svg\n\n.. image:: https://img.shields.io/pypi/v/bumpymcbumpface.svg\n    :target: https://img.shields.io/pypi/v/bumpymcbumpface.svg\n\n.. image:: https://img.shields.io/badge/calver-YYYY.MM.MINOR-22bfda.svg\n    :target: http://calver.org/\n\n\nBumpy McBumpface\n================\n\nTL,DR\n-----\n\nTo run:\n\n.. code-block:: shell\n\n    /home/blah/myproject $ bumpymcbumpface --push-git --push-pypi\n\nTo get help:\n\n.. code-block:: shell\n\n    /home/blah/myproject $ bumpymcbumpface -h\n    usage: bumpymcbumpface.py [-h] [--debug] [--show] [--dry-run] [--push-git]\n                              [--push-pypi]\n                              [{major,minor,patch}]\n\n    bumpymcbumpface - version-bump, tag, push, deploy\n\n    positional arguments:\n      {major,minor,patch}\n\n    optional arguments:\n      -h, --help           show this help message and exit\n      --debug              Print debugging messages (default: False)\n      --show               Show the current version and exit (default: False)\n      --dry-run            Describe what would be done, and exit (default: False)\n      --push-git           Push the new commit and tag to github (default: False)\n      --push-pypi          Push the new built packages to PyPI (default: False)\n    /home/blah/myproject $\n\nOverview\n--------\n\nWhen doing a new release, I got real tired of doing these things by hand:\n\n1. Update the version number of my package\n2. Commit that change to git\n3. Create a git tag with the new version\n4. Push the tag (and the new commit) to github\n5. Build new distributable packages: wheel (``.whl``) and source dist (``.tar.gz``)\n6. Upload the new packages to pypi\n\n*Bumpy McBumpface* will do these things, and will not ask questions.\n\nRequirements\n------------\n\nYou need to have these:\n\n- A file called ``VERSION`` in your project root, with MAJOR.MINOR.PATCH numbers\n- git\n- twine (set up `keyring \u003chttps://twine.readthedocs.io/en/latest/#keyring-support\u003e`_\n  so that twine won't ask you for login/password)\n- pip\n- wheel\n\nYou probably **SHOULD BE** in master branch branch when you run, but you\nonly need to be in a branch that has a valid remote.\n\nInstructions\n------------\n\nThere are a several options, but only two important ones. By default,\nit will NOT do these things automatically:\n\n- Push to github\n- Deploy to PyPI\n\nThis is just so that it defaults to \"safe\" by not affecting anything\nbeyond your computer during testing. To make it do these things too,\nrun it like this:\n\n.. code-block:: shell\n\n    $ bumpymcbumpface --push-git --push-pypi\n\n*Bumpy McBumpface* assumes that your version number is in the following\nformat::\n\n    MAJOR.MINOR.PATCH\n\nwhere each of the three fields is an integer. This also works for\ncalendar-based versioning. By default, the PATCH value will be increased\nby 1 if you run without arguments. These two are the same:\n\n.. code-block:: shell\n\n    $ bumpymcbumpface --push-git --push-pypi\n    $ bumpymcbumpface --push-git --push-pypi patch\n\nFor a MINOR bump, change the word *patch* to *minor*. Likewise for *major*.\n\nNow that you're using a file called ``VERSION`` in your project root to\nstore your version number, how do you get it into your ``setup.py``?\nJust read it in, like this:\n\n.. code-block:: python\n\n    # setup.py\n    from os import path\n    from io import open  # For universal packages + py27\n\n    here = path.abspath(path.dirname(__file__))\n\n    setup(\n        name='bumpymcbumpface',\n        version=open(path.join(here, 'VERSION')).readline().strip(),\n        ...\n    )\n\n\nGood luck!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjrh%2Fbumpymcbumpface","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcjrh%2Fbumpymcbumpface","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjrh%2Fbumpymcbumpface/lists"}