python-gitea 0.8.0__tar.gz → 0.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/codeql.yml +3 -3
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/support_floor_update.yml +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.pre-commit-config.yaml +2 -2
- {python_gitea-0.8.0 → python_gitea-0.9.0}/PKG-INFO +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/dev/architecture.md +7 -1
- python_gitea-0.9.0/docs/user-guide/cli.md +519 -0
- python_gitea-0.9.0/docs/user-guide/python-api.md +196 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/pyproject.toml +2 -2
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/comment/add.py +15 -7
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/comment/delete.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/comment/edit.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/comment/list.py +15 -7
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/config/add.py +12 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/config/delete.py +17 -2
- python_gitea-0.9.0/src/gitea/cli/config/list.py +54 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/config/update.py +13 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/create.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/add.py +32 -12
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/list.py +15 -7
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/remove.py +32 -12
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/edit.py +15 -7
- python_gitea-0.9.0/src/gitea/cli/issue/get.py +109 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/list.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/main.py +4 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/label/create.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/label/delete.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/label/list.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/label/update.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/main.py +44 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/milestone/create.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/milestone/list.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/notification/list.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/notification/read.py +1 -1
- python_gitea-0.9.0/src/gitea/cli/output.py +70 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/column/create.py +1 -1
- python_gitea-0.8.0/src/gitea/cli/project/issue/remove.py → python_gitea-0.9.0/src/gitea/cli/project/column/issues.py +19 -10
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/column/list.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/create.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/delete.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/edit.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/get.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/issue/add.py +32 -7
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/issue/move.py +33 -8
- python_gitea-0.9.0/src/gitea/cli/project/issue/remove.py +110 -0
- python_gitea-0.9.0/src/gitea/cli/project/issues.py +108 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/list.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/main.py +4 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/pull_request/list.py +9 -4
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/user/get.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/user/update_settings.py +1 -1
- python_gitea-0.9.0/src/gitea/cli/utils/api.py +96 -0
- python_gitea-0.9.0/src/gitea/cli/utils/errors.py +56 -0
- python_gitea-0.9.0/src/gitea/cli/utils/issue.py +253 -0
- python_gitea-0.9.0/src/gitea/cli/utils/options.py +110 -0
- python_gitea-0.9.0/src/gitea/cli/watch/__init__.py +1 -0
- python_gitea-0.9.0/src/gitea/cli/watch/list.py +419 -0
- python_gitea-0.9.0/src/gitea/cli/watch/main.py +21 -0
- python_gitea-0.9.0/src/gitea/issue/__init__.py +9 -0
- python_gitea-0.9.0/src/gitea/issue/project_column.py +336 -0
- python_gitea-0.9.0/src/gitea/utils/pagination.py +100 -0
- python_gitea-0.9.0/src/gitea/watch/__init__.py +54 -0
- python_gitea-0.9.0/src/gitea/watch/changes.py +336 -0
- python_gitea-0.9.0/src/gitea/watch/state.py +468 -0
- python_gitea-0.9.0/tests/board.py +122 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_add.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_list.py +1 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_add.py +125 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_delete.py +106 -1
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_list.py +63 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_update.py +146 -1
- python_gitea-0.9.0/tests/cli/envelope.py +49 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/issue/dependency/test_cli_issue_dependency.py +5 -5
- python_gitea-0.9.0/tests/cli/issue/test_cli_issue_comment.py +55 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/issue/test_cli_issue_edit.py +1 -1
- python_gitea-0.9.0/tests/cli/issue/test_cli_issue_get.py +206 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/notification/test_cli_notification.py +89 -0
- python_gitea-0.9.0/tests/cli/project/test_cli_project.py +796 -0
- python_gitea-0.9.0/tests/cli/project/test_cli_project_column_issues.py +347 -0
- python_gitea-0.9.0/tests/cli/rendering.py +39 -0
- python_gitea-0.9.0/tests/cli/test_cli_main.py +919 -0
- python_gitea-0.9.0/tests/cli/test_cli_output.py +101 -0
- python_gitea-0.9.0/tests/cli/transport.py +105 -0
- python_gitea-0.9.0/tests/cli/utils/test_cli_utils_api.py +182 -0
- python_gitea-0.9.0/tests/cli/utils/test_cli_utils_errors.py +47 -0
- python_gitea-0.9.0/tests/cli/utils/test_cli_utils_issue.py +410 -0
- python_gitea-0.9.0/tests/cli/utils/test_cli_utils_options.py +113 -0
- python_gitea-0.9.0/tests/cli/watch/__init__.py +1 -0
- python_gitea-0.9.0/tests/cli/watch/test_cli_watch_list.py +1174 -0
- python_gitea-0.9.0/tests/issue/test_issue_async_project_column.py +231 -0
- python_gitea-0.9.0/tests/issue/test_issue_project_column.py +334 -0
- python_gitea-0.9.0/tests/utils/test_utils_pagination.py +139 -0
- python_gitea-0.9.0/tests/watch/__init__.py +1 -0
- python_gitea-0.9.0/tests/watch/test_watch_changes.py +414 -0
- python_gitea-0.9.0/tests/watch/test_watch_state.py +697 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/uv.lock +233 -163
- python_gitea-0.8.0/docs/user-guide/cli.md +0 -152
- python_gitea-0.8.0/docs/user-guide/python-api.md +0 -88
- python_gitea-0.8.0/src/gitea/cli/config/list.py +0 -40
- python_gitea-0.8.0/src/gitea/cli/issue/get.py +0 -76
- python_gitea-0.8.0/src/gitea/cli/utils/api.py +0 -32
- python_gitea-0.8.0/src/gitea/issue/__init__.py +0 -8
- python_gitea-0.8.0/tests/cli/issue/test_cli_issue_get.py +0 -39
- python_gitea-0.8.0/tests/cli/project/test_cli_project.py +0 -404
- python_gitea-0.8.0/tests/cli/test_cli_main.py +0 -99
- python_gitea-0.8.0/tests/cli/utils/test_cli_utils_api.py +0 -46
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.coderabbit.yaml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/pull_request_template.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/ci.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/documentation.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/draft_release.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/publish.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/publish_testpypi.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/release.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/scheduled_release.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.github/workflows/semantic_pull_request.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.gitignore +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.markdownlint.yaml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.prettierrc +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.pypirc +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/.typos.toml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/CITATION.cff +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/CODE_OF_CONDUCT.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/CONTRIBUTING.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/LICENSE +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/README.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/SECURITY.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/SUPPORT.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/cliff.toml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/contributing.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/dev/troubleshooting.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/gen_ref_pages.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/index.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/javascripts/mathjax.js +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/security.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/style/api.css +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/user-guide/configuration.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/user-guide/installation.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/docs/user-guide/quickstart.md +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/mkdocs.yml +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/renovate.json +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/scripts/release_version.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/__main__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/comment/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/comment/main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/config/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/config/main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/issue/dependency/main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/label/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/label/main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/milestone/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/milestone/main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/notification/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/notification/main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/column/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/project/issue/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/pull_request/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/pull_request/main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/user/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/user/main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/utils/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/utils/auth.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/cli/utils/convert.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/client/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/client/async_gitea.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/client/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/client/gitea.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/comment/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/comment/async_comment.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/comment/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/comment/comment.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/config/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/config/manager.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/config/model.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/issue/async_issue.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/issue/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/issue/issue.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/label/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/label/async_label.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/label/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/label/label.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/milestone/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/milestone/async_milestone.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/milestone/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/milestone/milestone.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/notification/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/notification/async_notification.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/notification/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/notification/notification.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/project/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/project/async_project.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/project/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/project/project.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/pull_request/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/pull_request/async_pull_request.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/pull_request/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/pull_request/pull_request.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/repository/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/repository/async_repository.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/repository/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/repository/repository.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/resource/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/resource/async_resource.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/resource/resource.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/user/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/user/async_user.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/user/base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/user/user.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/utils/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/utils/log.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/utils/response.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/src/gitea/version.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/comment/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_delete.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_edit.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/comment/test_cli_comment_main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/config/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/config/test_cli_config_main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/issue/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/issue/dependency/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/issue/test_cli_issue_create.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/issue/test_cli_issue_list.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/issue/test_cli_issue_main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/label/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_create.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_delete.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_list.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/label/test_cli_label_update.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/milestone/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/milestone/test_cli_milestone_create.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/milestone/test_cli_milestone_list.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/milestone/test_cli_milestone_main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/notification/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/project/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/pull_request/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/pull_request/test_cli_pull_request_list.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/pull_request/test_cli_pull_request_main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/user/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/user/test_cli_user_get.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/user/test_cli_user_update_settings.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/utils/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/utils/test_cli_utils_auth.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/cli/utils/test_cli_utils_convert.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/client/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/client/test_client_async_gitea.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/client/test_client_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/client/test_client_gitea.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/comment/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/comment/test_comment_async_comment.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/comment/test_comment_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/comment/test_comment_comment.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/config/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/config/test_config_manager.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/config/test_config_model.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/conftest.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/issue/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/issue/test_issue_async_issue.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/issue/test_issue_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/issue/test_issue_dependencies.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/issue/test_issue_issue.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/label/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/label/test_label_async_label.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/label/test_label_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/label/test_label_label.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/milestone/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/milestone/test_milestone_async_milestone.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/milestone/test_milestone_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/milestone/test_milestone_milestone.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/notification/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/notification/test_notification_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/notification/test_notification_notification.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/project/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/project/test_project_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/project/test_project_project.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/pull_request/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/pull_request/test_pull_request_async_pull_request.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/pull_request/test_pull_request_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/pull_request/test_pull_request_pull_request.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/repository/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/repository/test_repository_async_repository.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/repository/test_repository_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/repository/test_repository_repository.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/resource/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/resource/test_resource_async_resource.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/resource/test_resource_resource.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/smoke_test.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/test_import.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/test_main.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/test_release_version.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/test_version.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/user/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/user/test_user_async_user.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/user/test_user_base.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/user/test_user_user.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/utils/__init__.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/utils/test_utils_log.py +0 -0
- {python_gitea-0.8.0 → python_gitea-0.9.0}/tests/utils/test_utils_response.py +0 -0
|
@@ -22,13 +22,13 @@ jobs:
|
|
|
22
22
|
uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
|
23
23
|
|
|
24
24
|
- name: Initialize CodeQL
|
|
25
|
-
uses: github/codeql-action/init@
|
|
25
|
+
uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
|
|
26
26
|
with:
|
|
27
27
|
languages: python
|
|
28
28
|
queries: security-and-quality
|
|
29
29
|
|
|
30
30
|
- name: Autobuild
|
|
31
|
-
uses: github/codeql-action/autobuild@
|
|
31
|
+
uses: github/codeql-action/autobuild@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
|
|
32
32
|
|
|
33
33
|
- name: Perform CodeQL Analysis
|
|
34
|
-
uses: github/codeql-action/analyze@
|
|
34
|
+
uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
|
|
@@ -22,7 +22,7 @@ jobs:
|
|
|
22
22
|
|
|
23
23
|
- name: Apply support policy (spec0, from pyproject tool table)
|
|
24
24
|
id: policy
|
|
25
|
-
uses: isaac-cf-wong/dependency-support-policy-action@
|
|
25
|
+
uses: isaac-cf-wong/dependency-support-policy-action@7cce60e19b902747b4267c4f8e53820e3f3656ea # v0.2.4
|
|
26
26
|
with:
|
|
27
27
|
mode: update
|
|
28
28
|
|
|
@@ -16,7 +16,7 @@ repos:
|
|
|
16
16
|
- id: check-json
|
|
17
17
|
|
|
18
18
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
19
|
-
rev: v0.16.
|
|
19
|
+
rev: v0.16.3
|
|
20
20
|
hooks:
|
|
21
21
|
- id: ruff
|
|
22
22
|
args: [--fix, --config=pyproject.toml]
|
|
@@ -52,7 +52,7 @@ repos:
|
|
|
52
52
|
- id: actionlint
|
|
53
53
|
|
|
54
54
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
55
|
-
rev: 0.12.
|
|
55
|
+
rev: 0.12.5
|
|
56
56
|
hooks:
|
|
57
57
|
# Update the uv lockfile
|
|
58
58
|
- id: uv-lock
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: python-gitea
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: A Python package for interacting with the Gitea API, offering a simple interface to access repositories, users, organizations, issues, and more for automation and data management.
|
|
5
5
|
Project-URL: Documentation, https://isaac-cf-wong.github.io/python-gitea
|
|
6
6
|
Project-URL: Source, https://github.com/isaac-cf-wong/python-gitea
|
|
@@ -56,8 +56,9 @@ src/gitea/
|
|
|
56
56
|
│ ├── project/ # project, column, and project-issue commands
|
|
57
57
|
│ ├── user/ # user commands
|
|
58
58
|
│ └── utils/ # auth resolution, API helpers, conversions
|
|
59
|
-
└── utils/ # Logging and response helpers
|
|
59
|
+
└── utils/ # Logging, pagination, and response helpers
|
|
60
60
|
├── log.py # Logger setup
|
|
61
|
+
├── pagination.py # Paginated-listing walkers
|
|
61
62
|
└── response.py # Response processing helpers
|
|
62
63
|
```
|
|
63
64
|
|
|
@@ -96,6 +97,11 @@ names. Methods map one-to-one onto Gitea REST endpoints and return either:
|
|
|
96
97
|
JSON payload and `status` carries metadata such as the HTTP status code, or
|
|
97
98
|
- the raw HTTP response for mutating operations.
|
|
98
99
|
|
|
100
|
+
Work that spans several endpoints lives beside the resource rather than inside
|
|
101
|
+
it, so the resource methods stay one-to-one with the API. For example,
|
|
102
|
+
`gitea.issue.project_column` resolves the board column an issue's card sits in,
|
|
103
|
+
which Gitea only reveals through the project's column listings.
|
|
104
|
+
|
|
99
105
|
## CLI Layer
|
|
100
106
|
|
|
101
107
|
The CLI is a single Typer application registered in `cli/main.py`. Each resource
|
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
# Command-Line Interface
|
|
2
|
+
|
|
3
|
+
The `gitea-cli` command wraps the Gitea REST API for quick, scriptable
|
|
4
|
+
operations. Run `gitea-cli --help` for the full list at any time.
|
|
5
|
+
|
|
6
|
+
## Global Options
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
gitea-cli [OPTIONS] COMMAND [ARGS]...
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
| Option | Description |
|
|
13
|
+
| ----------------------- | --------------------------------------------------------------------------------------- |
|
|
14
|
+
| `--config-path <path>` | Config file path; defaults to `PYTHON_GITEA_CONFIG_PATH` or platform location. |
|
|
15
|
+
| `-v, --verbose <level>` | Log level; default `INFO`. |
|
|
16
|
+
| `-o, --output <format>` | Output format, `text` or `json`; default `text`. See [Output formats](#output-formats). |
|
|
17
|
+
| `--version` | Print the installed `python-gitea` version and exit. |
|
|
18
|
+
|
|
19
|
+
All resource commands share authentication options:
|
|
20
|
+
|
|
21
|
+
| Option | Description |
|
|
22
|
+
| ----------------------- | -------------------------------------- |
|
|
23
|
+
| `--account-name <name>` | Use the stored account with this name. |
|
|
24
|
+
| `--token <token>` | Token for authentication. |
|
|
25
|
+
| `--base-url <url>` | Base URL of the Gitea platform. |
|
|
26
|
+
|
|
27
|
+
See [Configuration](configuration.md) for how authentication is resolved.
|
|
28
|
+
|
|
29
|
+
## Output formats
|
|
30
|
+
|
|
31
|
+
`--output` is a **global** option accepted by every subcommand, so a script
|
|
32
|
+
never has to know which command renders text and which renders JSON. Because it
|
|
33
|
+
belongs to the top-level command, it goes **before** the subcommand:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
gitea-cli --output json config list # correct
|
|
37
|
+
gitea-cli config list --output json # not a valid option here
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
It can also be set once for a whole session with the `PYTHON_GITEA_OUTPUT`
|
|
41
|
+
environment variable; an explicit `--output` on the command line wins.
|
|
42
|
+
|
|
43
|
+
Two formats are supported:
|
|
44
|
+
|
|
45
|
+
- `text` (default) — human-readable rendering where a command has one. Commands
|
|
46
|
+
that only report an API result print the JSON envelope below in either format,
|
|
47
|
+
so `text` never loses information. One command prints nothing at all in this
|
|
48
|
+
format when it has nothing to say: see
|
|
49
|
+
[Watch](#watch---report-what-changed-since-the-last-run).
|
|
50
|
+
- `json` — always the same envelope on stdout:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"data": ...,
|
|
55
|
+
"metadata": { ... }
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`data` is the result itself and is never wrapped any further: the object or list
|
|
60
|
+
returned by the Gitea API, or - for local commands such as `config` - an object
|
|
61
|
+
describing what the command read or changed.
|
|
62
|
+
|
|
63
|
+
`metadata` describes the call rather than the result, and its keys vary by
|
|
64
|
+
command:
|
|
65
|
+
|
|
66
|
+
- API commands report `status_code`.
|
|
67
|
+
- Commands that page through the API add counts, such as `column_count` and
|
|
68
|
+
`issue_count` for `project issues`.
|
|
69
|
+
- `config` commands report `config_path`.
|
|
70
|
+
- It is `{}` when the command made no call at all.
|
|
71
|
+
|
|
72
|
+
Errors are not part of the envelope: messages go to stderr and the process exits
|
|
73
|
+
non-zero, so nothing is printed on stdout for a failed command. Log output also
|
|
74
|
+
goes to stderr in both formats, so stdout stays parsable.
|
|
75
|
+
|
|
76
|
+
One failure is deliberately not an error: the board lookup that fills in the
|
|
77
|
+
`column_id` of `issue get`. A refused, timed-out or otherwise failed lookup logs
|
|
78
|
+
a warning to stderr and reports that project's column as `null`, because the
|
|
79
|
+
issue the command was asked for has already been retrieved and is not worth
|
|
80
|
+
failing over an enrichment of it.
|
|
81
|
+
|
|
82
|
+
Tokens are never included in the output of `config` commands in either format.
|
|
83
|
+
|
|
84
|
+
## Option naming
|
|
85
|
+
|
|
86
|
+
Every resource command addresses its target the same way, so an invocation can
|
|
87
|
+
be written without reading `--help` first:
|
|
88
|
+
|
|
89
|
+
| Option | Meaning |
|
|
90
|
+
| --------------- | -------------------------------------------------------- |
|
|
91
|
+
| `--owner` | The user or organization that owns the target. Required. |
|
|
92
|
+
| `--repository` | Narrows the target to one repository of that owner. |
|
|
93
|
+
| `--<entity>-id` | Names the entity acted on. |
|
|
94
|
+
|
|
95
|
+
The entity options are `--issue-id`, `--project-id`, `--column-id`, `--label-id`
|
|
96
|
+
and `--comment-id`.
|
|
97
|
+
|
|
98
|
+
Omitting `--repository` asks for the target that belongs to the owner itself
|
|
99
|
+
rather than to one of its repositories. The `project` commands have both forms:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
gitea-cli project get --owner my-org --project-id 1 # organization project
|
|
103
|
+
gitea-cli project get --owner my-org --repository my-repo --project-id 1 # repository project
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The other families have no owner-wide endpoint - an issue, a comment, a label, a
|
|
107
|
+
milestone and a pull request all live in a repository - so omitting
|
|
108
|
+
`--repository` there is reported as an error naming the option to pass:
|
|
109
|
+
|
|
110
|
+
```console
|
|
111
|
+
$ gitea-cli issue get --owner my-org --issue-id 42
|
|
112
|
+
ERROR 'gitea-cli issue get' needs a repository: pass --repository REPOSITORY.
|
|
113
|
+
Omitting --repository asks for the target of the owner itself, which only
|
|
114
|
+
the 'gitea-cli project' commands have.
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
A second target named in the same command carries its own coordinates, and those
|
|
118
|
+
are required together because there is no scope for them to fall back to:
|
|
119
|
+
`issue dependency add` takes `--dependency-owner`, `--dependency-repository` and
|
|
120
|
+
`--dependency-issue-id`.
|
|
121
|
+
|
|
122
|
+
`notification` is the one family where `--owner` is optional as well: given
|
|
123
|
+
neither `--owner` nor `--repository` it acts on the authenticated user's
|
|
124
|
+
notifications, and the two must be passed together or not at all.
|
|
125
|
+
|
|
126
|
+
### Deprecated option names
|
|
127
|
+
|
|
128
|
+
`--index` has been renamed to `--issue-id`, so that one option name means "which
|
|
129
|
+
issue" in every family. The old names are still accepted and log a deprecation
|
|
130
|
+
warning naming their replacement, so existing scripts keep working; they are
|
|
131
|
+
hidden from `--help` and will be removed in a future release.
|
|
132
|
+
|
|
133
|
+
| Deprecated | Use instead |
|
|
134
|
+
| -------------------- | ----------------------- |
|
|
135
|
+
| `--index` | `--issue-id` |
|
|
136
|
+
| `--dependency-index` | `--dependency-issue-id` |
|
|
137
|
+
|
|
138
|
+
`--index` is still accepted by `issue get`, `issue edit`, the three
|
|
139
|
+
`issue dependency` commands and `comment add`/`comment list` - and by the same
|
|
140
|
+
commands under the `issue comment` alias. `--dependency-index` is still accepted
|
|
141
|
+
by `issue dependency add` and `issue dependency remove`.
|
|
142
|
+
|
|
143
|
+
Passing both names for the same issue is accepted while they agree, and is an
|
|
144
|
+
error when they disagree.
|
|
145
|
+
|
|
146
|
+
## Commands
|
|
147
|
+
|
|
148
|
+
An option written bare below has to be passed; one written `[--like this]` may
|
|
149
|
+
be omitted. `--repository` is bare outside the `project` and `notification`
|
|
150
|
+
families: those commands accept the invocation without it - the option is
|
|
151
|
+
optional everywhere, as the convention above says - but they have no owner-wide
|
|
152
|
+
endpoint to serve it with, so they answer by naming the option to pass.
|
|
153
|
+
|
|
154
|
+
### Config - manage accounts
|
|
155
|
+
|
|
156
|
+
- `gitea-cli config add --name <name> --token <token> [--base-url <url>] [--default]`
|
|
157
|
+
- `gitea-cli config list`
|
|
158
|
+
- `gitea-cli config update --name <name> [--token <token>] [--base-url <url>] [--default]`
|
|
159
|
+
- `gitea-cli config delete --name <name> [--force]`
|
|
160
|
+
- Under `--output json` the confirmation prompt is written to stderr so that
|
|
161
|
+
stdout stays parsable; pass `--force` to skip it entirely.
|
|
162
|
+
|
|
163
|
+
### Issue - manage issues
|
|
164
|
+
|
|
165
|
+
- `gitea-cli issue create --owner <owner> --repository <repo> --title <title>`
|
|
166
|
+
- Optional: `--body`, `--assignees`, `--labels`, `--milestone`,
|
|
167
|
+
`--due-date`, `--closed`
|
|
168
|
+
- `gitea-cli issue list --owner <owner> --repository <repo>`
|
|
169
|
+
- Optional: `--state`, `--labels`, `--search-string`, `--created-by`,
|
|
170
|
+
`--assigned-by`, `--since`, `--before`, `--page`, `--limit`
|
|
171
|
+
- `gitea-cli issue get --owner <owner> --repository <repo> --issue-id <number>`
|
|
172
|
+
- The `comment_count` field is the number of comments on the issue, not the
|
|
173
|
+
comments themselves; use `gitea-cli issue comment list` to read the
|
|
174
|
+
bodies.
|
|
175
|
+
- Each entry of `projects` carries a `column_id`: the column the issue's
|
|
176
|
+
card sits in, or `null` when the issue has no card on that project. Gitea
|
|
177
|
+
does not report it on the issue itself, so it is resolved from each
|
|
178
|
+
project's board, which costs a few extra requests per project.
|
|
179
|
+
- Resolution is best-effort. It reflects the board as it was during the
|
|
180
|
+
walk, not at one instant: a card moved while the columns are being read
|
|
181
|
+
may be reported under either column or as `null`. A lookup that is
|
|
182
|
+
refused, times out, or fails in transport leaves that project's
|
|
183
|
+
`column_id` at `null` and logs a warning rather than failing `issue get` -
|
|
184
|
+
so `null` means "no card here" and "could not tell" alike. The columns of
|
|
185
|
+
a user-owned (individual) project cannot be listed at all, so its
|
|
186
|
+
`column_id` is always `null`.
|
|
187
|
+
- `gitea-cli issue edit --owner <owner> --repository <repo> --issue-id <number>`
|
|
188
|
+
- Optional: `--title`, `--body`, `--state`, `--assignees`, `--milestone`,
|
|
189
|
+
`--due-date`
|
|
190
|
+
- `gitea-cli issue dependency add --owner <owner> --repository <repo> --issue-id <number>`
|
|
191
|
+
- Required: `--dependency-owner <owner>`, `--dependency-repository <repo>`,
|
|
192
|
+
`--dependency-issue-id <number>`
|
|
193
|
+
- `gitea-cli issue dependency list --owner <owner> --repository <repo> --issue-id <number>`
|
|
194
|
+
- `gitea-cli issue dependency remove --owner <owner> --repository <repo> --issue-id <number>`
|
|
195
|
+
- Required: `--dependency-owner <owner>`, `--dependency-repository <repo>`,
|
|
196
|
+
`--dependency-issue-id <number>`
|
|
197
|
+
|
|
198
|
+
### Pull Request - manage pull requests
|
|
199
|
+
|
|
200
|
+
- `gitea-cli pull-request list --owner <owner> --repository <repo>`
|
|
201
|
+
- Optional: `--state`, `--base-branch`, `--labels`, `--milestone`,
|
|
202
|
+
`--poster`, `--sort`, `--page`, `--limit`
|
|
203
|
+
|
|
204
|
+
### Comment - manage issue comments
|
|
205
|
+
|
|
206
|
+
- `gitea-cli comment add --owner <owner> --repository <repo> --issue-id <number> --body <body>`
|
|
207
|
+
- `gitea-cli comment list --owner <owner> --repository <repo> --issue-id <number>`
|
|
208
|
+
- `gitea-cli comment edit --owner <owner> --repository <repo> --comment-id <id> --body <body>`
|
|
209
|
+
- `gitea-cli comment delete --owner <owner> --repository <repo> --comment-id <id>`
|
|
210
|
+
|
|
211
|
+
These commands are also available as `gitea-cli issue comment <command>`, which
|
|
212
|
+
is the same implementation under a second, more discoverable name.
|
|
213
|
+
|
|
214
|
+
### Label - manage labels
|
|
215
|
+
|
|
216
|
+
- `gitea-cli label create --owner <owner> --repository <repo> --name <name> --color <hex>`
|
|
217
|
+
- Optional: `--description`
|
|
218
|
+
- `gitea-cli label list --owner <owner> --repository <repo>`
|
|
219
|
+
- `gitea-cli label update --owner <owner> --repository <repo> --label-id <id>`
|
|
220
|
+
- Optional: `--name`, `--color`, `--description`
|
|
221
|
+
- `gitea-cli label delete --owner <owner> --repository <repo> --label-id <id>`
|
|
222
|
+
|
|
223
|
+
### Milestone - manage milestones
|
|
224
|
+
|
|
225
|
+
- `gitea-cli milestone create --owner <owner> --repository <repo> --title <title>`
|
|
226
|
+
- Optional: `--description`, `--due-on`, `--state`
|
|
227
|
+
- `gitea-cli milestone list --owner <owner> --repository <repo>`
|
|
228
|
+
- Optional: `--state`, `--name`, `--page`, `--limit`
|
|
229
|
+
|
|
230
|
+
### Notification - manage notifications
|
|
231
|
+
|
|
232
|
+
- `gitea-cli notification list`
|
|
233
|
+
- Optional: `--owner`, `--repository`, `--status-type`, `--subject-type`,
|
|
234
|
+
`--since`, `--before`, `--all`, `--page`, `--limit`
|
|
235
|
+
- `gitea-cli notification read`
|
|
236
|
+
- Optional: `--owner`, `--repository`, `--status-type`, `--to-status`,
|
|
237
|
+
`--last-read-at`, `--all`
|
|
238
|
+
|
|
239
|
+
### Project - manage projects
|
|
240
|
+
|
|
241
|
+
Every command here takes `--repository` as an option rather than a requirement:
|
|
242
|
+
passing it acts on that repository's project, omitting it acts on the
|
|
243
|
+
organization's own project. It is written `[--repository <repo>]` below to say
|
|
244
|
+
so.
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
gitea-cli project list --owner my-org # the organization's projects
|
|
248
|
+
gitea-cli project list --owner my-org --repository my-repo # that repository's projects
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
- `gitea-cli project create --owner <owner> [--repository <repo>] --title <title>`
|
|
252
|
+
- Optional: `--description`, `--card-type`, `--template-type`
|
|
253
|
+
- `gitea-cli project list --owner <owner> [--repository <repo>]`
|
|
254
|
+
- `gitea-cli project get --owner <owner> [--repository <repo>] --project-id <id>`
|
|
255
|
+
- `gitea-cli project edit --owner <owner> [--repository <repo>] --project-id <id>`
|
|
256
|
+
- Optional: `--title`, `--description`, `--state`, `--card-type`
|
|
257
|
+
- `gitea-cli project delete --owner <owner> [--repository <repo>] --project-id <id>`
|
|
258
|
+
- `gitea-cli project column create --owner <owner> [--repository <repo>] --project-id <id> --title <title>`
|
|
259
|
+
- Optional: `--color`
|
|
260
|
+
- `gitea-cli project column list --owner <owner> [--repository <repo>] --project-id <id>`
|
|
261
|
+
- `gitea-cli project column issues --owner <owner> [--repository <repo>] --project-id <id> --column-id <id>`
|
|
262
|
+
- Optional: `--page`, `--limit`
|
|
263
|
+
- `gitea-cli project issues --owner <owner> [--repository <repo>] --project-id <id>`
|
|
264
|
+
- `gitea-cli project issue add --owner <owner> [--repository <repo>] --project-id <id> --column-id <id> --issue-id <id>`
|
|
265
|
+
- Optional: `--issue-repository`
|
|
266
|
+
- `gitea-cli project issue move --owner <owner> [--repository <repo>] --project-id <id> --column-id <id> --issue-id <id>`
|
|
267
|
+
- Optional: `--sorting`, `--issue-repository`
|
|
268
|
+
- `gitea-cli project issue remove --owner <owner> [--repository <repo>] --project-id <id> --column-id <id> --issue-id <id>`
|
|
269
|
+
- Optional: `--issue-repository`
|
|
270
|
+
|
|
271
|
+
The project endpoints identify an issue by its global ID, which is not the
|
|
272
|
+
number shown in the web UI: `my-org/my-repo#15` may well be global ID `1854`.
|
|
273
|
+
The three `project issue` commands therefore take `--issue-id` as the number
|
|
274
|
+
whenever they know which repository holds the issue, and look the global ID up
|
|
275
|
+
for you:
|
|
276
|
+
|
|
277
|
+
- On a repository project, `--repository` already names that repository, so
|
|
278
|
+
`--issue-id 15` means `#15` of it.
|
|
279
|
+
- On an organization project, `--repository` is omitted and the issue may come
|
|
280
|
+
from any repository of the organization. Name it with `--issue-repository` to
|
|
281
|
+
address the issue by number; without it, `--issue-id` is read as the global
|
|
282
|
+
ID. `--issue-repository` also overrides `--repository`, for the case of a
|
|
283
|
+
repository project holding an issue from elsewhere.
|
|
284
|
+
|
|
285
|
+
The global ID the command used comes back as `metadata.resolved_issue_id`. A
|
|
286
|
+
number the repository does not have, and a call the project endpoint refuses,
|
|
287
|
+
are both reported as errors naming the issue and what to check - never as an
|
|
288
|
+
empty result. An instance that cannot be reached at all, whether the connection
|
|
289
|
+
fails or times out, is reported as one line naming the base URL rather than as a
|
|
290
|
+
traceback. A request that fails before any response for another reason - a
|
|
291
|
+
malformed base URL, say - is reported the same way, without claiming the
|
|
292
|
+
instance is down.
|
|
293
|
+
|
|
294
|
+
### User - manage users
|
|
295
|
+
|
|
296
|
+
- `gitea-cli user get [--username <name>]`
|
|
297
|
+
- `gitea-cli user update-settings`
|
|
298
|
+
- Optional: `--full-name`, `--website`, `--location`, `--language`,
|
|
299
|
+
`--theme`, `--diff-view-style`, `--hide-email`, `--hide-activity`
|
|
300
|
+
|
|
301
|
+
### Watch - report what changed since the last run
|
|
302
|
+
|
|
303
|
+
Every other command answers a question about the instance now. `watch` answers
|
|
304
|
+
what moved since you last looked: it keeps a local cache of issue snapshots and
|
|
305
|
+
reports the difference between that cache and the instance, then records the
|
|
306
|
+
instance as the new baseline.
|
|
307
|
+
|
|
308
|
+
The family is called `watch` because that is what it is for. `state` names the
|
|
309
|
+
cache rather than the purpose, and `diff` suggests comparing two things you
|
|
310
|
+
name, where this compares the present against whatever was last seen.
|
|
311
|
+
|
|
312
|
+
- `gitea-cli watch list --owner <owner> [--repository <repo>] [--project-id <id>]`
|
|
313
|
+
- Optional: `--state-file`, `--dry-run`
|
|
314
|
+
|
|
315
|
+
Each `--repository` watches the open issues of that repository, and each
|
|
316
|
+
`--project-id` watches the cards on that board. Both may be repeated, and both
|
|
317
|
+
may be given together, so one invocation reports what changed across several
|
|
318
|
+
repositories and boards:
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
gitea-cli watch list --owner my-org --repository api --repository web --project-id 29
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
A project is resolved the way every other `project` command resolves one:
|
|
325
|
+
against `--repository` when exactly one is named, and against the owner itself
|
|
326
|
+
when none is. Naming projects alongside several repositories is an error,
|
|
327
|
+
because there is no single scope left for them to belong to.
|
|
328
|
+
|
|
329
|
+
#### What counts as a change
|
|
330
|
+
|
|
331
|
+
Per issue, four things: it appeared, its assignees changed, its labels changed,
|
|
332
|
+
or its comments changed. An issue that dropped out of what is being watched -
|
|
333
|
+
closed, deleted, or moved off the board - is reported as `gone`. An issue that
|
|
334
|
+
changed in more than one way is reported once per way.
|
|
335
|
+
|
|
336
|
+
Comments are compared by a stable hash of each comment rather than by counting
|
|
337
|
+
them, so a comment edited in place is reported, and a comment added while
|
|
338
|
+
another was deleted is two movements rather than none.
|
|
339
|
+
|
|
340
|
+
A title or body edited on its own is **not** reported. Gitea bumps an issue's
|
|
341
|
+
`updated_at` for every edit, including ones there is nothing to say about, so
|
|
342
|
+
comparing it would report far more than it is worth.
|
|
343
|
+
|
|
344
|
+
#### The cache
|
|
345
|
+
|
|
346
|
+
The cache lives in the user cache directory (`~/.cache/gitea/watch-state.json`
|
|
347
|
+
on Linux) unless `--state-file` or `PYTHON_GITEA_WATCH_STATE_FILE` names
|
|
348
|
+
another; the option wins over the variable. Each repository and each project is
|
|
349
|
+
cached separately, so watching several of them keeps their deltas apart, and a
|
|
350
|
+
scope added later does not disturb the ones already recorded.
|
|
351
|
+
|
|
352
|
+
Three behaviours of it are worth knowing before it surprises you:
|
|
353
|
+
|
|
354
|
+
- **The first run against a scope reports nothing.** It records what is there
|
|
355
|
+
and reports from the second run onwards, so pointing this at a repository with
|
|
356
|
+
200 open issues does not announce all 200.
|
|
357
|
+
- **An unreadable cache is treated as no cache.** A missing, empty, corrupt or
|
|
358
|
+
not-even-text file baselines every scope again rather than failing, so a
|
|
359
|
+
scheduled run recovers by itself - at the cost of never reporting what changed
|
|
360
|
+
while the cache was gone. The recovery is logged.
|
|
361
|
+
- **A run writes only the scopes it watched.** The cache is written by renaming
|
|
362
|
+
a temporary file over it, so an interrupted run cannot leave a half-written
|
|
363
|
+
one, and it is re-read immediately before that so only the scopes of this run
|
|
364
|
+
are replaced. The re-read and the write are held under a lock on a `.lock`
|
|
365
|
+
file beside the cache, so two runs that overlap - a timer shorter than a run
|
|
366
|
+
takes is enough - record both their scopes instead of the later one erasing
|
|
367
|
+
the earlier one's. The lock is released if a run is killed, so a crash cannot
|
|
368
|
+
wedge the runs after it, and a filesystem that will not lock is logged and
|
|
369
|
+
watched anyway. Two runs watching the _same_ scope still end with the later
|
|
370
|
+
one's snapshots, which is what watching one thing twice means.
|
|
371
|
+
- **A cache from an older version is recorded afresh.** Upgrading to a release
|
|
372
|
+
that changed how a comment is recognised makes one run silent, rather than
|
|
373
|
+
announcing every comment on every watched issue as rewritten. It is logged,
|
|
374
|
+
and it happens once.
|
|
375
|
+
|
|
376
|
+
`--dry-run` reports the changes and leaves the cache untouched, so the same
|
|
377
|
+
changes come back on the next run. Everything else about the run is unchanged,
|
|
378
|
+
including the requests it makes.
|
|
379
|
+
|
|
380
|
+
A cache that cannot be written fails the run: the changes it reported would
|
|
381
|
+
otherwise be reported again forever, which is worth an error rather than a
|
|
382
|
+
silent one-line difference. As with every other failure, nothing is printed on
|
|
383
|
+
stdout.
|
|
384
|
+
|
|
385
|
+
#### Output
|
|
386
|
+
|
|
387
|
+
In `text` - the default - the command prints one line per change and **nothing
|
|
388
|
+
at all when nothing changed**:
|
|
389
|
+
|
|
390
|
+
```console
|
|
391
|
+
$ gitea-cli watch list --owner my-org --repository my-repo
|
|
392
|
+
my-org/my-repo#15 comments: 1 new · Fix the docs
|
|
393
|
+
my-org/my-repo#16 assignees: +alice -bob · Ship the release
|
|
394
|
+
$ gitea-cli watch list --owner my-org --repository my-repo
|
|
395
|
+
$
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
That empty tick is the point: a `cron` entry mailing its output sends nothing on
|
|
399
|
+
a quiet run, and a watchdog reading its output has nothing to act on.
|
|
400
|
+
|
|
401
|
+
In `json` it is the usual envelope, always present whether or not anything
|
|
402
|
+
changed. `data` is the list of changes, each naming the scope it was seen in,
|
|
403
|
+
what kind of change it was, and what was added and removed:
|
|
404
|
+
|
|
405
|
+
```json
|
|
406
|
+
{
|
|
407
|
+
"kind": "assignees",
|
|
408
|
+
"scope": "repo:my-org/my-repo",
|
|
409
|
+
"issue_id": 1900,
|
|
410
|
+
"number": 16,
|
|
411
|
+
"title": "Ship the release",
|
|
412
|
+
"repository": "my-org/my-repo",
|
|
413
|
+
"detail": "+alice -bob",
|
|
414
|
+
"added": ["alice"],
|
|
415
|
+
"removed": ["bob"]
|
|
416
|
+
}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
`metadata` names the scopes watched, the ones baselined by this run,
|
|
420
|
+
`issue_count`, `change_count`, `state_file` and `dry_run`, so a run that
|
|
421
|
+
reported nothing still says why.
|
|
422
|
+
|
|
423
|
+
#### Cost
|
|
424
|
+
|
|
425
|
+
A run lists every page of each scope, and then every page of the comments of
|
|
426
|
+
every issue in it. That is one request per page of issues plus one per page of
|
|
427
|
+
comments per issue, which is what makes comment edits detectable and what makes
|
|
428
|
+
a large repository worth a longer interval.
|
|
429
|
+
|
|
430
|
+
## Examples
|
|
431
|
+
|
|
432
|
+
List all open issues in a repository:
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
gitea-cli issue list --owner my-org --repository my-repo --state open
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
Create an issue with labels and a milestone:
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
gitea-cli issue create \
|
|
442
|
+
--owner my-org \
|
|
443
|
+
--repository my-repo \
|
|
444
|
+
--title "Fix the docs" \
|
|
445
|
+
--labels 1,2 \
|
|
446
|
+
--milestone 3
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
Move an issue into a project column, addressing it by the number shown in the
|
|
450
|
+
web UI:
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
gitea-cli project issue add \
|
|
454
|
+
--owner my-org \
|
|
455
|
+
--repository my-repo \
|
|
456
|
+
--project-id 1 \
|
|
457
|
+
--column-id 2 \
|
|
458
|
+
--issue-id 42
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
Move `my-repo#42` on an organization project, where the repository holding the
|
|
462
|
+
issue has to be named separately:
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
gitea-cli project issue move \
|
|
466
|
+
--owner my-org \
|
|
467
|
+
--project-id 1 \
|
|
468
|
+
--column-id 2 \
|
|
469
|
+
--issue-repository my-repo \
|
|
470
|
+
--issue-id 42
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
List the issues sitting in one column of an organization project (omit
|
|
474
|
+
`--repository`; it is only needed for repository projects):
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
gitea-cli project column issues \
|
|
478
|
+
--owner my-org \
|
|
479
|
+
--project-id 1 \
|
|
480
|
+
--column-id 2
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
Show every card on a project together with the column it is in:
|
|
484
|
+
|
|
485
|
+
```bash
|
|
486
|
+
gitea-cli project issues --owner my-org --project-id 1
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
Report what changed across two repositories and a board since the last run,
|
|
490
|
+
quietly enough to be worth a `cron` entry:
|
|
491
|
+
|
|
492
|
+
```bash
|
|
493
|
+
gitea-cli watch list \
|
|
494
|
+
--owner my-org \
|
|
495
|
+
--repository api \
|
|
496
|
+
--repository web \
|
|
497
|
+
--project-id 29
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
Read the same digest from a script, listing the issues that gained a comment:
|
|
501
|
+
|
|
502
|
+
```bash
|
|
503
|
+
gitea-cli --output json watch list --owner my-org --repository my-repo |
|
|
504
|
+
jq -r '.data[] | select(.kind == "comments") | "\(.repository)#\(.number)"'
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
Read a configured account's base URL from a script, with `jq` unwrapping the
|
|
508
|
+
envelope described in [Output formats](#output-formats):
|
|
509
|
+
|
|
510
|
+
```bash
|
|
511
|
+
gitea-cli --output json config list |
|
|
512
|
+
jq -r '.data.accounts[] | select(.name == "my-account") | .base_url'
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
## See Also
|
|
516
|
+
|
|
517
|
+
- [Quick Start](quickstart.md)
|
|
518
|
+
- [Configuration](configuration.md)
|
|
519
|
+
- [Python API](python-api.md)
|