{"id":20269584,"url":"https://github.com/omnilib/thx","last_synced_at":"2025-04-10T01:12:20.124Z","repository":{"id":39218110,"uuid":"353933005","full_name":"omnilib/thx","owner":"omnilib","description":"Simple, composable command runner for Python projects","archived":false,"fork":false,"pushed_at":"2025-04-05T01:03:44.000Z","size":268,"stargazers_count":32,"open_issues_count":11,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-10T01:12:14.891Z","etag":null,"topics":["command-runner","python","task-runner"],"latest_commit_sha":null,"homepage":"https://thx.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/omnilib.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","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":"2021-04-02T06:51:13.000Z","updated_at":"2025-04-05T01:03:41.000Z","dependencies_parsed_at":"2024-05-17T17:43:44.466Z","dependency_job_id":"ef807b84-2449-4691-bbc1-b8cd490dfda0","html_url":"https://github.com/omnilib/thx","commit_stats":{"total_commits":160,"total_committers":4,"mean_commits":40.0,"dds":0.30625,"last_synced_commit":"198ce345474299b8707e614aac07a3d2dc3a9e6c"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omnilib%2Fthx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omnilib%2Fthx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omnilib%2Fthx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omnilib%2Fthx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/omnilib","download_url":"https://codeload.github.com/omnilib/thx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248137889,"owners_count":21053775,"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":["command-runner","python","task-runner"],"created_at":"2024-11-14T12:25:58.947Z","updated_at":"2025-04-10T01:12:20.080Z","avatar_url":"https://github.com/omnilib.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"thx\n===\n\nRapid development assistant, and fast command runner for Python projects.\n\n.. image:: https://img.shields.io/pypi/v/thx.svg\n   :target: https://pypi.org/project/thx\n   :alt: PyPI Release\n.. image:: https://readthedocs.org/projects/thx/badge/?version=stable\n   :target: https://thx.readthedocs.io/\n   :alt: Documentation Status\n.. image:: https://img.shields.io/badge/change-log-blue\n   :target: https://github.com/omnilib/thx/blob/main/CHANGELOG.md\n   :alt: Changelog\n.. image:: https://img.shields.io/pypi/l/thx.svg\n   :target: https://github.com/omnilib/thx/blob/main/LICENSE\n   :alt: MIT Licensed\n\n\n`thx` (\"thanks\") is capable of running arbitrary jobs, configured via simple options\nin the `PEP 518 \u003chttps://peps.python.org/pep-0518/\u003e`_ standardized ``pyproject.toml``.\nJobs can be run on multiple Python versions at once, and independent steps can be\nexecuted in parallel for faster results.\n\nWatch `thx` format the codebase, build sphinx docs, run the test and linter suites on\nfive Python versions, and generate a final coverage report:\n\n.. image:: https://asciinema.org/a/ZoT8qYbQ2g8wl1FrR9JSpRqRZ.svg\n    :target: https://asciinema.org/a/ZoT8qYbQ2g8wl1FrR9JSpRqRZ\n    :alt: Demo of thx\n\n`thx` can also watch for modifications to your project, and automatically run jobs\nevery time changes are detected—it will even reload its configuration when your\n``pyproject.toml`` changes:\n\n.. image:: https://asciinema.org/a/uE79pfl07YzTiDmGnNzgY1GWG.svg\n    :target: https://asciinema.org/a/uE79pfl07YzTiDmGnNzgY1GWG\n    :alt: Demo of thx in watch mode\n\n\nUsage\n-----\n\nConfiguration uses standard `TOML \u003chttps://toml.io\u003e`_ elements, and jobs can\nreference shared values, which will be interpolated at runtime:\n\n.. code-block:: toml\n\n    [tool.thx.values]\n    module = \"thx\"\n\n    [tool.thx.jobs]\n    lint = [\n        \"flake8 {module}\",\n        \"ufmt check {module}\",\n    ]\n    test = \"python -m unittest -v {module}.tests\"\n\nThe configuration above defines two jobs, \"lint\" and \"test\"; the \"lint\" job defines\ntwo steps, and these can optionally be run in parallel. Both jobs present themselves\nas separate commands in `thx`. Note the automatic replacement of ``{module}`` with\nthe configured value ``thx`` when running jobs:\n\n.. code-block:: shell-session\n\n    $ thx lint\n    \u003e flake8 thx\n    \u003e ufmt check thx\n\n.. code-block:: shell-session\n\n    $ thx test\n    \u003e python -m unittest thx.tests\n\nThey can also be run together in order, similar to `makefiles`:\n\n.. code-block:: shell-session\n    \n    $ thx test lint\n    \u003e python -m unittest thx.tests\n    \u003e flake8 thx\n    \u003e ufmt check thx\n\nBy default, `thx` uses the active Python runtime for jobs, but can also run jobs on \nmultiple runtimes in parallel:\n\n.. code-block:: toml\n\n    [tool.thx]\n    python_versions = [\"3.7\", \"3.8\", \"3.9\"]\n\n.. code-block:: shell-session\n\n    $ thx test\n    3.9\u003e python -m unittest thx.tests\n    3.8\u003e python -m unittest thx.tests\n    3.7\u003e python -m unittest thx.tests\n\nSee the `user guide \u003chttps://thx.omnilib.dev\u003e`_ for details on all available\nconfiguration options.\n\n\nInstall\n-------\n\n.. note::\n\n    `thx` is still in active development. Configuration options should be stable, but\n    compatibility between minor releases is not guaranteed. For important production\n    cases, please be sure to pin yourself to a single version, and test any new releases\n    thoroughly.\n\n`thx` is available on `PyPI \u003chttps://pypi.org/project/thx\u003e`_:\n\n.. code-block:: shell-session\n\n    $ pip install thx\n\nSee the `user guide \u003chttps://thx.omnilib.dev\u003e`_ for help getting started.\n\n\nLicense\n-------\n\n`thx` is copyright `Amethyst Reese \u003chttps://noswap.com\u003e`_, and licensed under\nthe MIT license. I am providing code in this repository to you under an open\nsource license. This is my personal repository; the license you receive to my\ncode is from me and not from my employer. See the `LICENSE`_ file for details.\n\n.. _LICENSE: https://github.com/omnilib/thx/blob/main/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomnilib%2Fthx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomnilib%2Fthx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomnilib%2Fthx/lists"}