{"id":13541920,"url":"https://github.com/jhermann/rituals","last_synced_at":"2025-06-28T11:06:34.967Z","repository":{"id":27447565,"uuid":"30926120","full_name":"jhermann/rituals","owner":"jhermann","description":":wrench: :package: Project automation task library for ‘Invoke’ tasks that are needed again and again.","archived":false,"fork":false,"pushed_at":"2023-02-08T01:13:34.000Z","size":588,"stargazers_count":30,"open_issues_count":26,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-20T03:43:38.994Z","etag":null,"topics":["invoke","project-automation","python","release-automation","tasks"],"latest_commit_sha":null,"homepage":"http://rituals.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jhermann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-02-17T16:36:28.000Z","updated_at":"2025-05-16T15:12:39.000Z","dependencies_parsed_at":"2024-08-01T10:16:07.643Z","dependency_job_id":"35cbce9c-d4af-4bbd-977c-aae4274ff91e","html_url":"https://github.com/jhermann/rituals","commit_stats":{"total_commits":503,"total_committers":3,"mean_commits":"167.66666666666666","dds":0.007952286282306154,"last_synced_commit":"39022c50d0072428fb7392d3c3a71eaaa636e261"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/jhermann/rituals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Frituals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Frituals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Frituals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Frituals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jhermann","download_url":"https://codeload.github.com/jhermann/rituals/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhermann%2Frituals/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262419807,"owners_count":23308100,"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":["invoke","project-automation","python","release-automation","tasks"],"created_at":"2024-08-01T10:00:58.939Z","updated_at":"2025-06-28T11:06:34.950Z","avatar_url":"https://github.com/jhermann.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Rituals\n\nCommon tasks for [Invoke](http://www.pyinvoke.org/) that are needed again and again.\n\n![GINOSAJI](https://raw.githubusercontent.com/jhermann/rituals/master/docs/_static/img/symbol-200.png) … and again and again.\n\n [![Groups](https://img.shields.io/badge/Google_groups-rituals--dev-orange.svg)](https://groups.google.com/forum/#!forum/rituals-dev)\n [![Travis CI](https://api.travis-ci.org/jhermann/rituals.svg)](https://travis-ci.org/jhermann/rituals)\n [![Coveralls](https://img.shields.io/coveralls/jhermann/rituals.svg)](https://coveralls.io/r/jhermann/rituals)\n [![GitHub Issues](https://img.shields.io/github/issues/jhermann/rituals.svg)](https://github.com/jhermann/rituals/issues)\n [![License](https://img.shields.io/pypi/l/rituals.svg)](https://github.com/jhermann/rituals/blob/master/LICENSE)\n [![Development Status](https://img.shields.io/pypi/status/rituals.svg)](https://pypi.python.org/pypi/rituals/)\n [![Latest Version](https://img.shields.io/pypi/v/rituals.svg)](https://pypi.python.org/pypi/rituals/)\n\n\n## Overview\n\n“Rituals” is a task library for [Invoke](http://www.pyinvoke.org/) that keeps the\nmost common tasks you always need out of your project, and makes them centrally maintained.\nThis leaves your `tasks.py` small and to the point,\nwith only things specific to the project at hand.\nThe following lists the common task implementations that the ``rituals.easy`` module offers.\nSee the [full docs](https://rituals.readthedocs.io/en/latest/usage.html#adding-rituals-to-your-project)\non how to integrate them into your `tasks.py`.\n\n* ``help`` –    Default task, when invoked with no task names.\n* ``clean`` –   Perform house-cleaning.\n* ``build`` –   Build the project.\n* ``test`` –    Perform standard unittests.\n* ``check`` –   Perform source code checks.\n* ``release.bump`` – Bump a development version.\n* ``release.dist`` – Distribute the project.\n* ``release.prep`` – Prepare for a release (perform QA checks, and switch to non-dev versioning).\n* … and *many* more, see `inv -l` for a complete list.\n\nThe guiding principle for these tasks is to strictly separate\nlow-level tasks for building and installing (via ``setup.py``)\nfrom high-level convenience tasks a developer uses (via ``invoke``).\nInvoke tasks can use Setuptools ones as building blocks,\nbut never the other way 'round\n– this avoids any bootstrapping headaches during package installations.\n\nUse ``inv -h ‹task›`` as usual to get details on the options of these tasks.\nLook at the modules in [acts](https://github.com/jhermann/rituals/blob/master/src/rituals/acts)\nif you want to know what these tasks do exactly.\nAlso consult the [full documentation](https://rituals.readthedocs.io/)\nfor a complete reference.\n\n:bulb: | The easiest way to get a working project using `rituals` is the [py-generic-project](https://github.com/Springerle/py-generic-project) cookiecutter archetype. That way you have a working project skeleton within minutes that is fully equipped, with all aspects of building, testing, quality checks, continuous integration, documentation, and releasing covered.\n---- | :----\n\n\n## Some Practical Examples\n\nThe following table shows a selection of typical use-cases and how to\ncarry them out in projects that include *Rituals* in their `tasks.py`\n(e.g. this one).\n\nCommand | Description\n----: | :----\n`inv docs -w -b` | Start a `sphinx-autobuild` watchdog and open the resulting live-reload preview in your browser.\n`inv test.tox --clean -e py34` | Run `tox` for Python 3.4 with a clean status, i.e. an empty `.tox` directory.\n`inv release.bump` | Set the `tag_build` value in `setup.cfg` to something like `0.3.0.dev117+0.2.0.g993edd3.20150408t1747`, uniquely identifying dev builds, even in dirty working directories.\n\nSee the [full documentation](https://rituals.readthedocs.io/)\nfor more examples and a complete reference.\n\n\n## Contributing\n\nTo create a working directory for this project, call these commands:\n\n```sh\ngit clone \"https://github.com/jhermann/rituals.git\"\ncd rituals\ncommand . .env --yes --develop  # add '--virtualenv /usr/bin/virtualenv' for Python2\ninvoke build --docs test check\n```\n\nTo use the source in this working directory within another project,\nchange your current directory to _this_ project,\nthen call `bin/pip` from *that* project's virtualenv like so:\n\n    …/.venv/…/bin/pip install -e .\n\nSee [CONTRIBUTING](https://github.com/jhermann/rituals/blob/master/CONTRIBUTING.md) for more.\n\n[![Throughput Graph](https://graphs.waffle.io/jhermann/rituals/throughput.svg)](https://waffle.io/jhermann/rituals/metrics)\n\n\n## Releasing\n\nThis is the process of releasing  ``rituals`` itself,\nprojects that use it will have an identical to very similar sequence of commands.\n\n```sh\ninv release.prep\ninv release.dist --devpi # local release + tox testing\n\ngit push \u0026\u0026 git push --tags # … and wait for Travis CI to do its thing\n\ntwine upload -r pypi dist/*\n```\n\nIf you have any pending changes, staged or unstaged, you'll get an error like this:\n\n![uncommitted changes](https://raw.githubusercontent.com/jhermann/rituals/master/docs/_static/img/invoke-release-prep-changes.png)\n\n\n## Related Projects\n\n* [Springerle/py-generic-project](https://github.com/Springerle/py-generic-project) – Cookiecutter template that creates a basic Python project, which can be later on augmented with various optional accessories.\n* [pyinvoke/invoke](https://github.com/pyinvoke/invoke) – Task execution tool \u0026 library.\n* [pyinvoke/invocations](https://github.com/pyinvoke/invocations) – A collection of reusable Invoke tasks and task modules.\n\n\n## Acknowledgements\n\n* Logo elements from [clker.com Free Clipart](http://www.clker.com/).\n* In case you wonder about the logo, [watch this](http://youtu.be/9VDvgL58h_Y).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhermann%2Frituals","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjhermann%2Frituals","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhermann%2Frituals/lists"}