{"id":35230931,"url":"https://github.com/coveo/stew","last_synced_at":"2026-04-01T20:43:55.546Z","repository":{"id":37091643,"uuid":"496582240","full_name":"coveo/stew","owner":"coveo","description":"Complete Python CI/CD solution built around Poetry.","archived":false,"fork":false,"pushed_at":"2026-03-30T17:38:41.000Z","size":686,"stargazers_count":25,"open_issues_count":13,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-30T19:26:40.540Z","etag":null,"topics":["ci","continuous-integration","github-actions","poetry","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coveo.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-05-26T10:50:01.000Z","updated_at":"2026-02-02T19:21:48.000Z","dependencies_parsed_at":"2024-01-31T21:28:27.966Z","dependency_job_id":"b6c7453b-3d56-4624-87b0-1c9114009d24","html_url":"https://github.com/coveo/stew","commit_stats":{"total_commits":90,"total_committers":2,"mean_commits":45.0,"dds":0.06666666666666665,"last_synced_commit":"01365f0d53ee73166a0d2092531d3f250fe019e4"},"previous_names":[],"tags_count":94,"template":false,"template_full_name":null,"purl":"pkg:github/coveo/stew","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveo%2Fstew","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveo%2Fstew/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveo%2Fstew/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveo%2Fstew/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coveo","download_url":"https://codeload.github.com/coveo/stew/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coveo%2Fstew/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["ci","continuous-integration","github-actions","poetry","python"],"created_at":"2025-12-30T02:29:17.566Z","updated_at":"2026-04-01T20:43:55.539Z","avatar_url":"https://github.com/coveo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# coveo-stew\n\n![Version](https://img.shields.io/pypi/v/coveo-stew)\n![License](https://img.shields.io/github/license/coveo/stew)\n\ncoveo-stew is a Poetry plugin that delivers simple CI/CD tools for python using [poetry](https://python-poetry.org) as its backend.\n\n\u003e [!IMPORTANT]\n\u003e **Version 4.0 Breaking Changes**\n\u003e \n\u003e Version 4.0 is a major breaking change as `coveo-stew` was rewritten as a Poetry plugin\n\u003e which required some changes to the command line interface.\n\u003e \n\u003e If you're upgrading from a previous version, please refer to the [upgrade guide](./README_UPGRADE.md).\n\n## Features\n\n### CI tools\n- Config-free pytest, mypy and black runners\n- Add your own linters and tools\n- JUnit report generation\n- GitHub Action that runs all your CI tools\n\nSimilar to: tox\n\n### CD tools\n- GitHub Action for Continuous Delivery (CD) (publish to pypi)\n- Automated \"patch\" version bumps (requires a `pypi` server)\n- Can download locked dependencies into a folder, for offline distribution\n\nSimilar to: poetry, flit, pbr, setuptools\n\n### Multiple projects\n- Support for several isolated poetry projects in one GitHub repository\n- Support for local path references\n- A \"one ring to rule them all\" virtual environment that includes all subprojects within the repository\n- Batch operations\n\nSimilar to: nothing! it's unique! 😎\n\n## Prerequisites\n\n- Poetry 2.0 or higher\n- Poetry must be installed with Python 3.10 or higher\n\n## Installation\n\n`coveo-stew` can be installed either as a Poetry plugin or as a standalone CLI tool.\n\n### As a Poetry plugin (recommended for CI servers)\n\nStarting from coveo-stew version 4.0, you can install stew as a Poetry plugin.\n\nWe recommend this approach for CI servers: it's easier to inject a plugin into poetry than to install a new CLI tool\ninto the path.\nAlso, since poetry and stew share some common dependencies, it can translate into faster setups.\n\nInstallation depends on how you installed Poetry:\n\n#### Using pipx\n\n```shell\npipx install poetry\npipx inject poetry \"coveo-stew\u003e=4\"\n```\n\nSee the [poetry documentation](https://python-poetry.org/docs/plugins/#using-plugins) for more information and alternative installation methods.\n\n### As a standalone CLI tool\n\nThe main appeal of this approach is that it's shorter to type, making it a popular option for local development.\n\nIn order to install stew as a standalone CLI tool, we recommend using `pipx`:\n\n```shell\npipx install coveo-stew\n```\n\n\u003e Note: Having both the plugin and the CLI won't cause issues.\n \n\n## GitHub Action\n\nThis action installs Python, Poetry, and Stew, then runs \"stew ci\" on your Python project.\n\n```yml\njobs:\n  stew-ci:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: coveo/stew@main\n        with:\n          python-version: \"3.10\"\n          project-name: your-project-name\n```\n\nSee additional options and documentation in [the action file](./action.yml).\n\n## Repository Structure\n\nPlease read these guides to learn how to organize your repository for maximum compatibility:\n\n- [For a single library](README_SINGLE_LIBRARY.md)\n- [For multiple libraries](README_MULTIPLE_LIBRARIES.md)\n\n## Commands\n\n### General command usage\n\nCalling coveo-stew will depend on how you installed it:\n\n1. As a Poetry plugin:\n\n    ```bash\n    poetry stew \u003ccommand\u003e [options]\n    ```\n\n2. As a standalone CLI tool:\n\n    ```bash\n    stew \u003ccommand\u003e [options]\n    ```\n\nBoth interfaces provide identical functionality. You can choose whichever approach you prefer based on your workflow.\n\nUnless a project name is specified, commands will operate on all projects in a git repository:\n\n```bash\n# Perform a command on all projects\npoetry stew \u003ccommand\u003e\n# Or using the standalone CLI\nstew \u003ccommand\u003e\n\n# Get help about a specific command\npoetry stew \u003ccommand\u003e --help\n# Or using the standalone CLI\nstew \u003ccommand\u003e --help\n```\n\nSome commands allow specifying a project name:\n\n```bash\n# Run on all projects with \u003cproject-name\u003e in their name (partial, case-insensitive)\npoetry stew \u003ccommand\u003e \u003cproject-name\u003e\n# Or using the standalone CLI\nstew \u003ccommand\u003e \u003cproject-name\u003e\n\n# Disable partial project name matching\npoetry stew \u003ccommand\u003e \u003cproject-name\u003e --exact-match\n# Or using the standalone CLI\nstew \u003ccommand\u003e \u003cproject-name\u003e --exact-match\n\n# Only consider the project at this location\npoetry stew \u003ccommand\u003e .\u003cpath\u003e\n# Or using the standalone CLI\nstew \u003ccommand\u003e .\u003cpath\u003e\n```\n\nThe remainder of the documentation will use `stew \u003ccommand\u003e` for brevity. Simply prefix with `poetry` if you installed it as a plugin.\n\n## Main Commands\n\n### `stew ci`\n\nRuns all CI tools on one or multiple projects. Errors will show in the console, and JUnit XML reports will be generated inside the `.ci` folder.\n\nWithout configuration, this command will run:\n- mypy (using opinionated, strict rules)\n- poetry check\n- stew check-outdated\n\nOptions:\n- `--fix`: Reformat code if `black` fails\n- `--check \u003crunner\u003e`: Launch only that runner (can be repeated)\n- `--skip \u003crunner\u003e`: Skip that runner (takes precedence over `--check`, can be repeated)\n- `--quick`: Skip running `poetry install --remove-untracked` before running the checks\n- `--extra \u003cextra\u003e`: Install the specified extra(s) for this run (can be repeated)\n- `--all-extras`: Install all extras for this run\n- `--no-extras`: Don't install any extras for this run\n- `--show-success-output`: Display output from successful checks (automatically enabled in GitHub Actions)\n\n### `stew build`\n\nStore the project and its **locked dependencies** to disk for offline installation:\n\n```bash\nstew build --target \u003cfolder\u003e\n```\n\nThe folder can later be installed offline with:\n\n```bash\npip install --no-index --find-links \u003cfolder\u003e \u003cproject-name\u003e\n```\n\nOptions:\n- `--target`: Specifies where wheels should be downloaded\n- `--python`: Target a different Python version/environment\n\n**Important**: Make sure your target folder is clean before building.\n\n### Other useful commands\n\n- `stew check-outdated`: Check for or update out-of-date files\n- `stew pull-dev-requirements`: Update dev requirements in a `pydev` project\n- `stew bump`: Run `poetry lock` on all projects\n- `stew refresh`: Run `poetry install` on all projects\n- `stew fresh-eggs`: Clear `.egg-info` folders (useful when changing `[tool.poetry.scripts]`)\n- `stew locate \u003cproject\u003e`: Return the path to a project\n\n## Configuration\n\nConfiguration is done through the `pyproject.toml` file:\n\n```toml\n[tool.stew]\nbuild-without-hashes = false  # Disable hashes when calling pip during stew build\npydev = false                 # Enable pydev mode (see multiple-libraries guide)\nbuild-dependencies = {}       # Additional dependencies for stew build\nextras = []                   # Extras to install during stew build and stew ci\nall-extras = false            # Install all extras during stew build and stew ci\nquick = {}                    # Controls which checks are skipped with --quick\n\n[tool.stew.ci]\nmypy = true\npytest = false\nblack = false\npoetry-check = true\ncheck-outdated = true\noffline-build = false\n\n# Custom runners\n[tool.stew.ci.custom-runners]\nflake8 = true\nbandit.check-args = [\"--quiet\", \"--recursive\", \".\"]\n\n[tool.stew.ci.custom-runners.isort]\ncheck-args = [\"--check\", \".\", \"--profile\", \"black\"]\nautofix-args = [\".\", \"--profile\", \"black\"]\n```\n\nSee the full documentation for [stew configuration](README_CONFIGURATION.md) and [CI runners](README_RUNNERS.md).\n\n## FAQ and Troubleshooting\n\nSee our [FAQ and Troubleshooting guide](README_FAQ.md) for solutions to common issues and best practices.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoveo%2Fstew","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoveo%2Fstew","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoveo%2Fstew/lists"}