{"id":29231221,"url":"https://github.com/jekwwer/python-workspace","last_synced_at":"2026-04-22T21:32:36.728Z","repository":{"id":293737504,"uuid":"983344586","full_name":"Jekwwer/python-workspace","owner":"Jekwwer","description":"Ready-to-use Python workspace with a devcontainer, VS Code settings, linting, formatting, type checks, pre-commit hooks, and automated updates.","archived":false,"fork":false,"pushed_at":"2025-06-23T15:36:10.000Z","size":374,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-27T05:57:54.914Z","etag":null,"topics":["ci","codespaces","devcontainer","formatting","linting","pre-commit-hooks","python","template","vscode"],"latest_commit_sha":null,"homepage":"https://jekwwer.github.io/python-workspace/","language":"JavaScript","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/Jekwwer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"jekwwer","buy_me_a_coffee":"jekwwer","ko_fi":"jekwwer","liberapay":"jekwwer","open_collective":"jekwwer","patreon":"jekwwer"}},"created_at":"2025-05-14T08:42:26.000Z","updated_at":"2025-06-23T15:36:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"6672373b-d30f-49ba-8f8d-2ad9c9cdfe92","html_url":"https://github.com/Jekwwer/python-workspace","commit_stats":null,"previous_names":["jekwwer/python-workspace"],"tags_count":5,"template":true,"template_full_name":null,"purl":"pkg:github/Jekwwer/python-workspace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fpython-workspace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fpython-workspace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fpython-workspace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fpython-workspace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Jekwwer","download_url":"https://codeload.github.com/Jekwwer/python-workspace/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jekwwer%2Fpython-workspace/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263342224,"owners_count":23451979,"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":["ci","codespaces","devcontainer","formatting","linting","pre-commit-hooks","python","template","vscode"],"created_at":"2025-07-03T14:30:49.675Z","updated_at":"2026-04-22T21:32:31.709Z","avatar_url":"https://github.com/Jekwwer.png","language":"JavaScript","funding_links":["https://github.com/sponsors/jekwwer","https://buymeacoffee.com/jekwwer","https://ko-fi.com/jekwwer","https://liberapay.com/jekwwer","https://opencollective.com/jekwwer","https://patreon.com/jekwwer"],"categories":[],"sub_categories":[],"readme":"# Python Workspace\n\n![github-release](https://img.shields.io/github/v/release/Jekwwer/python-workspace?logo=github\u0026link=https%3A%2F%2Fgithub.com%2FJekwwer%2Fpython-workspace%2Freleases%2Flatest)\n![github-release-date](https://img.shields.io/github/release-date/Jekwwer/python-workspace?link=https%3A%2F%2Fgithub.com%2FJekwwer%2Fpython-workspace%2Freleases%2Flatest)\n![github-commits-since-latest-release](https://img.shields.io/github/commits-since/Jekwwer/python-workspace/latest?link=https%3A%2F%2Fgithub.com%2FJekwwer%2Fpython-workspace%2Freleases%2Flatest)\n![tests-status](https://img.shields.io/github/actions/workflow/status/Jekwwer/python-workspace/ci.yml?label=tests)\n[![tests-coverage-status](https://codecov.io/gh/Jekwwer/python-workspace/graph/badge.svg?token=5PLRAD5I82)](https://codecov.io/gh/Jekwwer/python-workspace)\n![libraries.io-dependency-status-for-github-repo](https://img.shields.io/librariesio/github/Jekwwer/python-workspace?logo=librariesdotio\u0026logoColor=%23FFFFFF)\n![github-open-issues](https://img.shields.io/github/issues/Jekwwer/python-workspace?logo=github\u0026link=https%3A%2F%2Fgithub.com%2FJekwwer%2Fpython-workspace%2Fissues)\n![is-maintained](https://img.shields.io/maintenance/yes/2025)\n![license](https://img.shields.io/github/license/Jekwwer/python-workspace?link=https%3A%2F%2Fgithub.com%2FJekwwer%2Fpython-workspace%2Fblob%2Fmain%2FLICENSE)\n\n## Project Overview 🚀\n\nThis repository is a robust template for Python development using **Poetry** and isolated virtual environments,\ndelivering a consistent and reproducible local package workflow. It comes equipped with tools for testing, formatting,\nlinting, spell-checking, a ready-to-use devcontainer, custom VS Code settings, essential repo files, automated checks,\nintegrated VS Code extensions, semantic releases, automated documentation deployment, and extensive in-repo guides for\nproject management and customization.\n\n## Features ✨\n\n- **Devcontainer \u0026 VS Code:** Ubuntu-based Docker container with Python 3.12 and Poetry installed, plus recommended VS\n  Code extensions and workspace settings.\n- **Dependency Management:** Poetry for declarative `pyproject.toml` configuration and `poetry.lock` locking.\n- **Virtual Environments:** Project-scoped `.venv` directory automatically managed by Poetry (no need to install or\n  activate manually).\n- **Linting \u0026 Formatting:** Ruff for Python, Prettier for JSON/Markdown/YAML; enforced via pre-commit hooks and editor\n  integrations.\n- **Type Checking:** MyPy with automatic installation of missing stub packages.\n- **Testing:** pytest suite with coverage reporting.\n- **Spell Checking:** cspell for both code and documentation.\n- **Pre-commit Hooks:** Runs Ruff, MyPy, pytest, rstfmt, yamllint, markdownlint, markdown-link-check, pyupgrade,and\n  other checks before commit.and other checks before commit.\n- **CI/CD:** GitHub Actions for testing, semantic-release versioning, and Sphinx docs deployment.\n- **Documentation:** Sphinx configured with `autoapi`, `napoleon`, and `viewcode`; live preview during development and\n  publishing to GitHub Pages.\n- **In-Repo Guides:** `CONTRIBUTING.md`, `STYLEGUIDE.md`, `SECURITY.md` to enforce best practices and streamline\n  onboarding.\n\n## Installation 📦\n\nDesigned for **GitHub Codespaces**—running locally is untested and may require extra configuration.\n\n[![open-in-github-codespaces](https://github.com/codespaces/badge.svg)][open-in-codespaces]\n\n## Usage 🛠️\n\nMost manual quality checks and workflows are exposed via `Makefile` targets. These commands mirror the editor\nintegrations, pre-commit hooks, and CI pipelines.\n\n### CLI\n\nInvoke the project’s command-line interface:\n\n```bash\npoetry run cli --help\n```\n\n### Formatting\n\nMost formatting tasks are automated and enforced using various tools. Feel free to adjust these settings for your\nproject. The repository configurations are described in the [`STYLEGUIDE.md`][STYLEGUIDE].\n\n```bash\nmake format             # check formatting\nmake format-fix         # apply formatting fixes\n```\n\n### Linting\n\n```bash\nmake lint               # detect lint issues\nmake lint-fix           # auto-fix lint issues\n```\n\n### Static Analysis\n\n- **Type Checking** with MyPy\n\n  ```bash\n  make type\n  ```\n\n- **Spell Checking** with cspell\n\n  ```bash\n  make spell\n  ```\n\n### Testing\n\nRun the test suite (with coverage):\n\n```bash\nmake test\n```\n\n### Documentation\n\n- **Build HTML docs** with Sphinx:\n\n  ```bash\n  make docs-build\n  ```\n\n- **Live-serve docs** locally:\n\n  ```bash\n  make docs-serve\n  ```\n\n- **Clean docs** build artifacts:\n\n  ```bash\n  make docs-clean\n  ```\n\n## Contributing 👥\n\nContributions are welcome! Please read the [Contributing Guidelines][CONTRIBUTING] and check the [Issues][issues] page.\n\n## License 🛡️\n\nThis project is licensed under the [MIT License][LICENSE].\n\n## Contact 📬\n\nFor questions, reach out via [evgenii.shiliaev@jekwwer.com][evgenii.shiliaev@jekwwer.com] or open an [issue][issues].\n\n---\n\n**Migration Note:** This project previously used PDM (last PDM-based release: [v1.0.1]). As of [v2.0.0], Poetry is used\nfor dependency and environment management.\n\n---\n\nThis document is based on a template by [Evgenii Shiliaev][evgenii-shiliaev-github], licensed under [CC BY\n4.0][jekwwer-markdown-docs-kit-license]. All additional content is licensed under [LICENSE][LICENSE].\n\n[CONTRIBUTING]: CONTRIBUTING.md\n[LICENSE]: LICENSE\n[STYLEGUIDE]: STYLEGUIDE.md\n[evgenii-shiliaev-github]: https://github.com/Jekwwer\n[evgenii.shiliaev@jekwwer.com]: mailto:evgenii.shiliaev@jekwwer.com\n[issues]: https://github.com/Jekwwer/python-workspace/issues\n[jekwwer-markdown-docs-kit-license]: https://github.com/Jekwwer/markdown-docs-kit/blob/main/LICENSE\n[open-in-codespaces]: https://codespaces.new/Jekwwer/python-workspace\n[v1.0.1]: https://github.com/Jekwwer/python-workspace/tree/v1.0.1\n[v2.0.0]: https://github.com/Jekwwer/python-workspace/tree/v2.0.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjekwwer%2Fpython-workspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjekwwer%2Fpython-workspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjekwwer%2Fpython-workspace/lists"}