{"id":28602863,"url":"https://github.com/lucaspar/uv-demo","last_synced_at":"2026-02-24T19:41:35.874Z","repository":{"id":259995797,"uuid":"869799570","full_name":"lucaspar/uv-demo","owner":"lucaspar","description":"Just a demo of the uv package manager for Python.","archived":false,"fork":false,"pushed_at":"2025-04-23T00:55:19.000Z","size":134,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-24T06:47:59.539Z","etag":null,"topics":["gh-actions","makefile","pre-commit","pypi","python-packaging","tox","tox-uv","uv"],"latest_commit_sha":null,"homepage":"https://lucaspar.github.io/uv-demo/","language":"Just","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/lucaspar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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,"zenodo":null}},"created_at":"2024-10-08T23:01:00.000Z","updated_at":"2025-04-23T00:55:23.000Z","dependencies_parsed_at":"2024-10-29T01:26:21.465Z","dependency_job_id":"ef868505-cca6-4d2d-9056-fc4dd83fc973","html_url":"https://github.com/lucaspar/uv-demo","commit_stats":null,"previous_names":["lucaspar/uv-demo"],"tags_count":6,"template":true,"template_full_name":null,"purl":"pkg:github/lucaspar/uv-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspar%2Fuv-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspar%2Fuv-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspar%2Fuv-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspar%2Fuv-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucaspar","download_url":"https://codeload.github.com/lucaspar/uv-demo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucaspar%2Fuv-demo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259294335,"owners_count":22835782,"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":["gh-actions","makefile","pre-commit","pypi","python-packaging","tox","tox-uv","uv"],"created_at":"2025-06-11T16:12:30.777Z","updated_at":"2026-02-24T19:41:35.862Z","avatar_url":"https://github.com/lucaspar.png","language":"Just","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `uv-demo` PyPI package\n\n[![PyPI - Version](https://img.shields.io/pypi/v/uv-demo)](https://pypi.org/project/uv-demo/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/uv-demo)](https://pypi.org/project/uv-demo/)\n[![Pepy Total Downloads](https://img.shields.io/pepy/dt/uv-demo)](https://pypi.org/project/uv-demo/)\n[![Code Quality](https://github.com/lucaspar/uv-demo/actions/workflows/qa.yaml/badge.svg)](https://github.com/lucaspar/uv-demo/actions/workflows/qa.yaml)\n\nA demo and template for a modern Python package managed by `uv`. Very useless as a\npackage.\n\nUse this as a template for new projects, or as a reference for how to set up a Python\nproject with the following:\n\n+ [x] `uv` as the Python package manager.\n+ [x] [`pre-commit` hooks](./.pre-commit-config.yaml) for code formatting, linting, and\n  quality checks.\n+ [x] [GitHub Actions](./.github/workflows/) for testing and publishing.\n+ [x] Multiple Python versions tested with `uv -p ${python-version} run pytest [...]`.\n+ [x] `gh-act` for running GitHub Actions locally.\n+ [x] [Justfile](./justfile) with common recipes.\n+ [x] Documentation with `pdoc` + GitHub Pages.\n+ [x] Deptry to highlight missing and unused dependencies.\n\n## System Dependencies\n\n+ `uv`\n    + `curl -LsSf https://astral.sh/uv/install.sh | sh`\n+ `just`\n    + `sudo apt install just`\n    + `sudo pacman -S just`\n    + [More](https://github.com/casey/just#linux) installation methods.\n+ For running GitHub Actions locally\n    + [Docker](https://docs.docker.com/desktop/install/linux/)\n    + `gh` (GitHub CLI)\n        + `sudo pacman -S github-cli`\n        + [Others](https://github.com/cli/cli/blob/trunk/docs/install_linux.md)\n    + [`gh-act`](https://github.com/nektos/gh-act)\n        + `gh extension install nektos/gh-act`\n\n## Quick start\n\nThis will install all dependencies (`uv sync`) and run the entrypoint script:\n\n```bash\nuv run uv-demo\n```\n\n## `just` Recipes\n\n```bash\n# just --list\nAvailable recipes:\n    list                      # List available recipes\n    clean                     # Clean up generated files\n\n    [dev]\n    install                   # Install pre-commit hooks and development project dependencies with uv\n    upgrade                   # Upgrade all project and pre-commit dependencies respecting pyproject.toml constraints [alias: update]\n    pre-commit *args          # Run pre-commit hooks on all files; you may pass the hook ID: `just pre-commit pyrefly`` [alias: check]\n    deptry                    # Run deptry to check for unused and missing dependencies\n\n    [build]\n    build                     # Build the package and run tests\n    publish                   # Build and publish the package to PyPI\n\n    [test]\n    test *pytest_args         # Simple execution of tests with coverage\n    test-lowest *pytest_args  # runs tests with the lowest compatible versions of dependencies, to check compatibility issues\n    test-verbose *pytest_args # Run tests with coverage and increased output\n    test-all                  # Run static checker and tests for all compatible python versions\n    serve-coverage            # Serve the coverage report with a simple HTTP server\n\n    [docs]\n    docs                      # Generate and serve documentation\n    docs-gen                  # Generate documentation using pdoc\n    docs-serve                # Serve the docs with a simple HTTP server\n\n    [ci]\n    gact *args                # GH Actions workflow with custom arguments. Example: `just gact -j qa-lint` to run only the linting job.\n    gact-pull-request         # GH Actions workflow for pull requests, featuring QA jobs. [alias: gact-pr]\n    gact-release              # GH Actions workflow for release\n```\n\n## Integration with GitHub Actions\n\nSee the [Upload Python Package workflow file](.github/workflows/python-publish.yaml) for\nthis package.\n\n### Running actions locally\n\nYou can use `act` to run GitHub Actions locally. Use cases:\n\n1. While writing a workflow, to test the workflow locally before pushing to the\n   repository.\n2. Run the publishing workflow without setting secrets on GitHub.\n3. Before opening a pull request, to check the workflow will pass.\n\nCopy the example secrets file:\n\n```bash\ncp \"config/secrets.env.example\" \"config/secrets.env\"\n```\n\nThen edit the new file to add your secrets.\n\nAfter that, run `just gact --list` to see the available jobs.\n\n```bash\njust gact -j qa-lint\n```\n\nOr, run predefined workflows e.g. for pull requests:\n\n```bash\njust gact-pr\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucaspar%2Fuv-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucaspar%2Fuv-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucaspar%2Fuv-demo/lists"}