python-gitea 0.10.1__tar.gz → 0.11.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.
Files changed (427) hide show
  1. {python_gitea-0.10.1 → python_gitea-0.11.0}/PKG-INFO +4 -2
  2. {python_gitea-0.10.1 → python_gitea-0.11.0}/README.md +3 -1
  3. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/dev/architecture.md +39 -0
  4. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/user-guide/cli.md +396 -10
  5. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/user-guide/python-api.md +165 -13
  6. {python_gitea-0.10.1 → python_gitea-0.11.0}/mkdocs.yml +4 -0
  7. {python_gitea-0.10.1 → python_gitea-0.11.0}/pyproject.toml +2 -0
  8. python_gitea-0.11.0/src/gitea/_lazy.py +90 -0
  9. python_gitea-0.11.0/src/gitea/actions/__init__.py +37 -0
  10. python_gitea-0.11.0/src/gitea/actions/actions.py +575 -0
  11. python_gitea-0.11.0/src/gitea/actions/artifact.py +205 -0
  12. python_gitea-0.11.0/src/gitea/actions/async_actions.py +566 -0
  13. python_gitea-0.11.0/src/gitea/actions/async_artifact.py +210 -0
  14. python_gitea-0.11.0/src/gitea/actions/async_run_management.py +259 -0
  15. python_gitea-0.11.0/src/gitea/actions/async_runner.py +346 -0
  16. python_gitea-0.11.0/src/gitea/actions/async_secret.py +226 -0
  17. python_gitea-0.11.0/src/gitea/actions/async_variable.py +343 -0
  18. python_gitea-0.11.0/src/gitea/actions/base.py +905 -0
  19. python_gitea-0.11.0/src/gitea/actions/run_management.py +248 -0
  20. python_gitea-0.11.0/src/gitea/actions/runner.py +333 -0
  21. python_gitea-0.11.0/src/gitea/actions/scope.py +134 -0
  22. python_gitea-0.11.0/src/gitea/actions/secret.py +221 -0
  23. python_gitea-0.11.0/src/gitea/actions/variable.py +336 -0
  24. python_gitea-0.11.0/src/gitea/cli/actions/__init__.py +1 -0
  25. python_gitea-0.11.0/src/gitea/cli/actions/artifact/__init__.py +1 -0
  26. python_gitea-0.11.0/src/gitea/cli/actions/artifact/delete.py +88 -0
  27. python_gitea-0.11.0/src/gitea/cli/actions/artifact/download.py +145 -0
  28. python_gitea-0.11.0/src/gitea/cli/actions/artifact/get.py +88 -0
  29. python_gitea-0.11.0/src/gitea/cli/actions/artifact/list.py +101 -0
  30. python_gitea-0.11.0/src/gitea/cli/actions/job/__init__.py +1 -0
  31. python_gitea-0.11.0/src/gitea/cli/actions/job/get.py +86 -0
  32. python_gitea-0.11.0/src/gitea/cli/actions/job/list.py +106 -0
  33. python_gitea-0.11.0/src/gitea/cli/actions/job/logs.py +120 -0
  34. python_gitea-0.11.0/src/gitea/cli/actions/job/rerun.py +94 -0
  35. python_gitea-0.11.0/src/gitea/cli/actions/main.py +269 -0
  36. python_gitea-0.11.0/src/gitea/cli/actions/run/__init__.py +1 -0
  37. python_gitea-0.11.0/src/gitea/cli/actions/run/approve.py +89 -0
  38. python_gitea-0.11.0/src/gitea/cli/actions/run/cancel.py +96 -0
  39. python_gitea-0.11.0/src/gitea/cli/actions/run/delete.py +90 -0
  40. python_gitea-0.11.0/src/gitea/cli/actions/run/force_cancel.py +93 -0
  41. python_gitea-0.11.0/src/gitea/cli/actions/run/get.py +86 -0
  42. python_gitea-0.11.0/src/gitea/cli/actions/run/jobs.py +97 -0
  43. python_gitea-0.11.0/src/gitea/cli/actions/run/list.py +147 -0
  44. python_gitea-0.11.0/src/gitea/cli/actions/run/rerun.py +103 -0
  45. python_gitea-0.11.0/src/gitea/cli/actions/runner/__init__.py +1 -0
  46. python_gitea-0.11.0/src/gitea/cli/actions/runner/delete.py +90 -0
  47. python_gitea-0.11.0/src/gitea/cli/actions/runner/get.py +92 -0
  48. python_gitea-0.11.0/src/gitea/cli/actions/runner/list.py +102 -0
  49. python_gitea-0.11.0/src/gitea/cli/actions/runner/registration_token.py +92 -0
  50. python_gitea-0.11.0/src/gitea/cli/actions/runner/state.py +45 -0
  51. python_gitea-0.11.0/src/gitea/cli/actions/runner/update.py +97 -0
  52. python_gitea-0.11.0/src/gitea/cli/actions/secret/__init__.py +1 -0
  53. python_gitea-0.11.0/src/gitea/cli/actions/secret/delete.py +86 -0
  54. python_gitea-0.11.0/src/gitea/cli/actions/secret/list.py +101 -0
  55. python_gitea-0.11.0/src/gitea/cli/actions/secret/set.py +159 -0
  56. python_gitea-0.11.0/src/gitea/cli/actions/variable/__init__.py +1 -0
  57. python_gitea-0.11.0/src/gitea/cli/actions/variable/create.py +99 -0
  58. python_gitea-0.11.0/src/gitea/cli/actions/variable/delete.py +86 -0
  59. python_gitea-0.11.0/src/gitea/cli/actions/variable/get.py +91 -0
  60. python_gitea-0.11.0/src/gitea/cli/actions/variable/list.py +94 -0
  61. python_gitea-0.11.0/src/gitea/cli/actions/variable/update.py +106 -0
  62. python_gitea-0.11.0/src/gitea/cli/actions/workflow/__init__.py +1 -0
  63. python_gitea-0.11.0/src/gitea/cli/actions/workflow/dispatch.py +169 -0
  64. python_gitea-0.11.0/src/gitea/cli/actions/workflow/get.py +83 -0
  65. python_gitea-0.11.0/src/gitea/cli/actions/workflow/list.py +80 -0
  66. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/main.py +2 -0
  67. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/issue/add.py +1 -1
  68. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/issue/remove.py +32 -13
  69. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/main.py +8 -1
  70. python_gitea-0.11.0/src/gitea/cli/utils/__init__.py +23 -0
  71. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/utils/issue.py +405 -7
  72. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/utils/options.py +65 -1
  73. python_gitea-0.11.0/src/gitea/cli/watch/advance.py +239 -0
  74. python_gitea-0.11.0/src/gitea/cli/watch/list.py +197 -0
  75. python_gitea-0.11.0/src/gitea/cli/watch/main.py +35 -0
  76. python_gitea-0.10.1/src/gitea/cli/watch/list.py → python_gitea-0.11.0/src/gitea/cli/watch/scopes.py +41 -177
  77. python_gitea-0.11.0/src/gitea/client/__init__.py +23 -0
  78. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/client/async_gitea.py +2 -0
  79. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/client/gitea.py +2 -0
  80. python_gitea-0.11.0/src/gitea/comment/__init__.py +23 -0
  81. python_gitea-0.11.0/src/gitea/config/__init__.py +24 -0
  82. python_gitea-0.11.0/src/gitea/issue/__init__.py +46 -0
  83. python_gitea-0.11.0/src/gitea/label/__init__.py +23 -0
  84. python_gitea-0.11.0/src/gitea/milestone/__init__.py +23 -0
  85. python_gitea-0.11.0/src/gitea/notification/__init__.py +23 -0
  86. python_gitea-0.11.0/src/gitea/organization/__init__.py +23 -0
  87. python_gitea-0.11.0/src/gitea/project/__init__.py +23 -0
  88. python_gitea-0.11.0/src/gitea/pull_request/__init__.py +23 -0
  89. python_gitea-0.11.0/src/gitea/repository/__init__.py +23 -0
  90. python_gitea-0.11.0/src/gitea/utils/response.py +166 -0
  91. python_gitea-0.11.0/tests/actions/__init__.py +1 -0
  92. python_gitea-0.11.0/tests/actions/test_actions_base.py +646 -0
  93. python_gitea-0.11.0/tests/actions/test_actions_imports.py +118 -0
  94. python_gitea-0.11.0/tests/actions/test_actions_requests.py +863 -0
  95. python_gitea-0.11.0/tests/actions/test_actions_scope.py +141 -0
  96. python_gitea-0.11.0/tests/cli/actions/__init__.py +1 -0
  97. python_gitea-0.11.0/tests/cli/actions/invoking.py +149 -0
  98. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_artifact.py +291 -0
  99. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_job_get.py +48 -0
  100. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_job_list.py +86 -0
  101. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_job_logs.py +122 -0
  102. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_main.py +70 -0
  103. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_run_get.py +48 -0
  104. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_run_jobs.py +53 -0
  105. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_run_list.py +163 -0
  106. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_run_management.py +147 -0
  107. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_runner.py +156 -0
  108. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_secret.py +188 -0
  109. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_variable.py +173 -0
  110. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_workflow_dispatch.py +179 -0
  111. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_workflow_get.py +48 -0
  112. python_gitea-0.11.0/tests/cli/actions/test_cli_actions_workflow_list.py +79 -0
  113. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/project/test_cli_project.py +465 -1
  114. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/test_cli_contract.py +204 -1
  115. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/test_cli_main.py +62 -6
  116. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/utils/test_cli_utils_options.py +54 -1
  117. python_gitea-0.11.0/tests/cli/watch/support.py +150 -0
  118. python_gitea-0.11.0/tests/cli/watch/test_cli_watch_advance.py +424 -0
  119. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/watch/test_cli_watch_list.py +110 -187
  120. python_gitea-0.11.0/tests/cli/watch/test_cli_watch_scopes.py +93 -0
  121. python_gitea-0.11.0/tests/test_lazy_reexports.py +358 -0
  122. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/transport.py +83 -5
  123. python_gitea-0.11.0/tests/utils/test_utils_response.py +381 -0
  124. python_gitea-0.10.1/src/gitea/cli/utils/__init__.py +0 -8
  125. python_gitea-0.10.1/src/gitea/cli/watch/main.py +0 -21
  126. python_gitea-0.10.1/src/gitea/client/__init__.py +0 -8
  127. python_gitea-0.10.1/src/gitea/comment/__init__.py +0 -8
  128. python_gitea-0.10.1/src/gitea/config/__init__.py +0 -8
  129. python_gitea-0.10.1/src/gitea/issue/__init__.py +0 -25
  130. python_gitea-0.10.1/src/gitea/label/__init__.py +0 -8
  131. python_gitea-0.10.1/src/gitea/milestone/__init__.py +0 -8
  132. python_gitea-0.10.1/src/gitea/notification/__init__.py +0 -8
  133. python_gitea-0.10.1/src/gitea/organization/__init__.py +0 -8
  134. python_gitea-0.10.1/src/gitea/project/__init__.py +0 -8
  135. python_gitea-0.10.1/src/gitea/pull_request/__init__.py +0 -8
  136. python_gitea-0.10.1/src/gitea/repository/__init__.py +0 -8
  137. python_gitea-0.10.1/src/gitea/utils/response.py +0 -69
  138. python_gitea-0.10.1/tests/utils/test_utils_response.py +0 -132
  139. {python_gitea-0.10.1 → python_gitea-0.11.0}/.coderabbit.yaml +0 -0
  140. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/ISSUE_TEMPLATE/bug-report.md +0 -0
  141. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  142. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/ISSUE_TEMPLATE/feature-request.md +0 -0
  143. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/pull_request_template.md +0 -0
  144. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/ci.yml +0 -0
  145. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/codeql.yml +0 -0
  146. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/documentation.yml +0 -0
  147. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/draft_release.yml +0 -0
  148. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/publish.yml +0 -0
  149. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/publish_testpypi.yml +0 -0
  150. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/release.yml +0 -0
  151. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/scheduled_release.yml +0 -0
  152. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/semantic_pull_request.yml +0 -0
  153. {python_gitea-0.10.1 → python_gitea-0.11.0}/.github/workflows/support_floor_update.yml +0 -0
  154. {python_gitea-0.10.1 → python_gitea-0.11.0}/.gitignore +0 -0
  155. {python_gitea-0.10.1 → python_gitea-0.11.0}/.markdownlint.yaml +0 -0
  156. {python_gitea-0.10.1 → python_gitea-0.11.0}/.pre-commit-config.yaml +0 -0
  157. {python_gitea-0.10.1 → python_gitea-0.11.0}/.prettierrc +0 -0
  158. {python_gitea-0.10.1 → python_gitea-0.11.0}/.pypirc +0 -0
  159. {python_gitea-0.10.1 → python_gitea-0.11.0}/.typos.toml +0 -0
  160. {python_gitea-0.10.1 → python_gitea-0.11.0}/CITATION.cff +0 -0
  161. {python_gitea-0.10.1 → python_gitea-0.11.0}/CODE_OF_CONDUCT.md +0 -0
  162. {python_gitea-0.10.1 → python_gitea-0.11.0}/CONTRIBUTING.md +0 -0
  163. {python_gitea-0.10.1 → python_gitea-0.11.0}/LICENSE +0 -0
  164. {python_gitea-0.10.1 → python_gitea-0.11.0}/SECURITY.md +0 -0
  165. {python_gitea-0.10.1 → python_gitea-0.11.0}/SUPPORT.md +0 -0
  166. {python_gitea-0.10.1 → python_gitea-0.11.0}/cliff.toml +0 -0
  167. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/contributing.md +0 -0
  168. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/dev/troubleshooting.md +0 -0
  169. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/gen_ref_pages.py +0 -0
  170. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/index.md +0 -0
  171. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/javascripts/mathjax.js +0 -0
  172. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/security.md +0 -0
  173. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/style/api.css +0 -0
  174. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/user-guide/configuration.md +0 -0
  175. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/user-guide/installation.md +0 -0
  176. {python_gitea-0.10.1 → python_gitea-0.11.0}/docs/user-guide/quickstart.md +0 -0
  177. {python_gitea-0.10.1 → python_gitea-0.11.0}/renovate.json +0 -0
  178. {python_gitea-0.10.1 → python_gitea-0.11.0}/scripts/release_version.py +0 -0
  179. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/__init__.py +0 -0
  180. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/__main__.py +0 -0
  181. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/__init__.py +0 -0
  182. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/comment/__init__.py +0 -0
  183. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/comment/add.py +0 -0
  184. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/comment/delete.py +0 -0
  185. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/comment/edit.py +0 -0
  186. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/comment/list.py +0 -0
  187. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/comment/main.py +0 -0
  188. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/config/__init__.py +0 -0
  189. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/config/add.py +0 -0
  190. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/config/delete.py +0 -0
  191. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/config/list.py +0 -0
  192. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/config/main.py +0 -0
  193. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/config/update.py +0 -0
  194. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/__init__.py +0 -0
  195. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/close.py +0 -0
  196. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/create.py +0 -0
  197. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/dependency/__init__.py +0 -0
  198. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/dependency/add.py +0 -0
  199. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/dependency/list.py +0 -0
  200. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/dependency/main.py +0 -0
  201. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/dependency/remove.py +0 -0
  202. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/edit.py +0 -0
  203. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/get.py +0 -0
  204. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/list.py +0 -0
  205. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/issue/main.py +0 -0
  206. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/label/__init__.py +0 -0
  207. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/label/create.py +0 -0
  208. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/label/delete.py +0 -0
  209. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/label/list.py +0 -0
  210. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/label/main.py +0 -0
  211. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/label/update.py +0 -0
  212. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/milestone/__init__.py +0 -0
  213. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/milestone/create.py +0 -0
  214. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/milestone/list.py +0 -0
  215. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/milestone/main.py +0 -0
  216. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/notification/__init__.py +0 -0
  217. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/notification/list.py +0 -0
  218. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/notification/main.py +0 -0
  219. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/notification/read.py +0 -0
  220. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/organization/__init__.py +0 -0
  221. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/organization/list.py +0 -0
  222. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/organization/main.py +0 -0
  223. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/output.py +0 -0
  224. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/__init__.py +0 -0
  225. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/column/__init__.py +0 -0
  226. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/column/create.py +0 -0
  227. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/column/issues.py +0 -0
  228. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/column/list.py +0 -0
  229. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/create.py +0 -0
  230. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/delete.py +0 -0
  231. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/edit.py +0 -0
  232. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/get.py +0 -0
  233. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/issue/__init__.py +0 -0
  234. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/issue/move.py +0 -0
  235. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/issues.py +0 -0
  236. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/list.py +0 -0
  237. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/project/show.py +0 -0
  238. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/pull_request/__init__.py +0 -0
  239. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/pull_request/list.py +0 -0
  240. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/pull_request/main.py +0 -0
  241. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/repository/__init__.py +0 -0
  242. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/repository/list.py +0 -0
  243. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/repository/main.py +0 -0
  244. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/user/__init__.py +0 -0
  245. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/user/get.py +0 -0
  246. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/user/main.py +0 -0
  247. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/user/update_settings.py +0 -0
  248. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/utils/api.py +0 -0
  249. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/utils/auth.py +0 -0
  250. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/utils/convert.py +0 -0
  251. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/utils/errors.py +0 -0
  252. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/cli/watch/__init__.py +0 -0
  253. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/client/base.py +0 -0
  254. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/comment/async_comment.py +0 -0
  255. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/comment/base.py +0 -0
  256. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/comment/comment.py +0 -0
  257. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/config/manager.py +0 -0
  258. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/config/model.py +0 -0
  259. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/issue/async_issue.py +0 -0
  260. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/issue/base.py +0 -0
  261. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/issue/issue.py +0 -0
  262. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/issue/project_column.py +0 -0
  263. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/label/async_label.py +0 -0
  264. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/label/base.py +0 -0
  265. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/label/label.py +0 -0
  266. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/milestone/async_milestone.py +0 -0
  267. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/milestone/base.py +0 -0
  268. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/milestone/milestone.py +0 -0
  269. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/notification/async_notification.py +0 -0
  270. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/notification/base.py +0 -0
  271. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/notification/notification.py +0 -0
  272. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/organization/async_organization.py +0 -0
  273. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/organization/base.py +0 -0
  274. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/organization/organization.py +0 -0
  275. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/project/async_project.py +0 -0
  276. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/project/base.py +0 -0
  277. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/project/project.py +0 -0
  278. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/pull_request/async_pull_request.py +0 -0
  279. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/pull_request/base.py +0 -0
  280. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/pull_request/pull_request.py +0 -0
  281. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/repository/async_repository.py +0 -0
  282. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/repository/base.py +0 -0
  283. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/repository/repository.py +0 -0
  284. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/resource/__init__.py +0 -0
  285. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/resource/async_resource.py +0 -0
  286. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/resource/resource.py +0 -0
  287. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/user/__init__.py +0 -0
  288. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/user/async_user.py +0 -0
  289. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/user/base.py +0 -0
  290. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/user/user.py +0 -0
  291. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/utils/__init__.py +0 -0
  292. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/utils/fields.py +0 -0
  293. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/utils/log.py +0 -0
  294. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/utils/pagination.py +0 -0
  295. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/version.py +0 -0
  296. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/watch/__init__.py +0 -0
  297. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/watch/changes.py +0 -0
  298. {python_gitea-0.10.1 → python_gitea-0.11.0}/src/gitea/watch/state.py +0 -0
  299. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/__init__.py +0 -0
  300. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/board.py +0 -0
  301. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/__init__.py +0 -0
  302. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/comment/__init__.py +0 -0
  303. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/comment/test_cli_comment_add.py +0 -0
  304. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/comment/test_cli_comment_delete.py +0 -0
  305. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/comment/test_cli_comment_edit.py +0 -0
  306. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/comment/test_cli_comment_list.py +0 -0
  307. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/comment/test_cli_comment_main.py +0 -0
  308. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/config/__init__.py +0 -0
  309. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/config/test_cli_config_add.py +0 -0
  310. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/config/test_cli_config_delete.py +0 -0
  311. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/config/test_cli_config_list.py +0 -0
  312. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/config/test_cli_config_main.py +0 -0
  313. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/config/test_cli_config_update.py +0 -0
  314. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/envelope.py +0 -0
  315. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/__init__.py +0 -0
  316. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/dependency/__init__.py +0 -0
  317. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/dependency/test_cli_issue_dependency.py +0 -0
  318. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/test_cli_issue_close.py +0 -0
  319. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/test_cli_issue_comment.py +0 -0
  320. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/test_cli_issue_create.py +0 -0
  321. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/test_cli_issue_edit.py +0 -0
  322. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/test_cli_issue_get.py +0 -0
  323. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/test_cli_issue_list.py +0 -0
  324. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/issue/test_cli_issue_main.py +0 -0
  325. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/label/__init__.py +0 -0
  326. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/label/test_cli_label_create.py +0 -0
  327. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/label/test_cli_label_delete.py +0 -0
  328. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/label/test_cli_label_list.py +0 -0
  329. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/label/test_cli_label_main.py +0 -0
  330. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/label/test_cli_label_update.py +0 -0
  331. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/milestone/__init__.py +0 -0
  332. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/milestone/test_cli_milestone_create.py +0 -0
  333. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/milestone/test_cli_milestone_list.py +0 -0
  334. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/milestone/test_cli_milestone_main.py +0 -0
  335. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/notification/__init__.py +0 -0
  336. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/notification/test_cli_notification.py +0 -0
  337. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/organization/__init__.py +0 -0
  338. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/organization/test_cli_organization_list.py +0 -0
  339. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/organization/test_cli_organization_main.py +0 -0
  340. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/project/__init__.py +0 -0
  341. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/project/test_cli_project_column_issues.py +0 -0
  342. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/project/test_cli_project_show.py +0 -0
  343. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/pull_request/__init__.py +0 -0
  344. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/pull_request/test_cli_pull_request_list.py +0 -0
  345. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/pull_request/test_cli_pull_request_main.py +0 -0
  346. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/rendering.py +0 -0
  347. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/repository/__init__.py +0 -0
  348. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/repository/test_cli_repository_list.py +0 -0
  349. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/repository/test_cli_repository_main.py +0 -0
  350. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/test_cli_output.py +0 -0
  351. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/tree.py +0 -0
  352. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/user/__init__.py +0 -0
  353. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/user/test_cli_user_get.py +0 -0
  354. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/user/test_cli_user_update_settings.py +0 -0
  355. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/utils/__init__.py +0 -0
  356. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/utils/test_cli_utils_api.py +0 -0
  357. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/utils/test_cli_utils_auth.py +0 -0
  358. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/utils/test_cli_utils_convert.py +0 -0
  359. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/utils/test_cli_utils_errors.py +0 -0
  360. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/utils/test_cli_utils_issue.py +0 -0
  361. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/cli/watch/__init__.py +0 -0
  362. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/client/__init__.py +0 -0
  363. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/client/test_client_async_gitea.py +0 -0
  364. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/client/test_client_base.py +0 -0
  365. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/client/test_client_gitea.py +0 -0
  366. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/comment/__init__.py +0 -0
  367. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/comment/test_comment_async_comment.py +0 -0
  368. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/comment/test_comment_base.py +0 -0
  369. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/comment/test_comment_comment.py +0 -0
  370. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/config/__init__.py +0 -0
  371. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/config/test_config_manager.py +0 -0
  372. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/config/test_config_model.py +0 -0
  373. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/conftest.py +0 -0
  374. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/issue/__init__.py +0 -0
  375. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/issue/test_issue_async_issue.py +0 -0
  376. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/issue/test_issue_async_project_column.py +0 -0
  377. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/issue/test_issue_base.py +0 -0
  378. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/issue/test_issue_dependencies.py +0 -0
  379. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/issue/test_issue_issue.py +0 -0
  380. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/issue/test_issue_project_column.py +0 -0
  381. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/label/__init__.py +0 -0
  382. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/label/test_label_async_label.py +0 -0
  383. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/label/test_label_base.py +0 -0
  384. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/label/test_label_label.py +0 -0
  385. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/milestone/__init__.py +0 -0
  386. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/milestone/test_milestone_async_milestone.py +0 -0
  387. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/milestone/test_milestone_base.py +0 -0
  388. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/milestone/test_milestone_milestone.py +0 -0
  389. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/notification/__init__.py +0 -0
  390. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/notification/test_notification_base.py +0 -0
  391. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/notification/test_notification_notification.py +0 -0
  392. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/organization/__init__.py +0 -0
  393. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/organization/test_organization_async_organization.py +0 -0
  394. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/organization/test_organization_base.py +0 -0
  395. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/organization/test_organization_organization.py +0 -0
  396. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/project/__init__.py +0 -0
  397. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/project/test_project_base.py +0 -0
  398. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/project/test_project_project.py +0 -0
  399. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/project/test_project_requests.py +0 -0
  400. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/pull_request/__init__.py +0 -0
  401. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/pull_request/test_pull_request_async_pull_request.py +0 -0
  402. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/pull_request/test_pull_request_base.py +0 -0
  403. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/pull_request/test_pull_request_pull_request.py +0 -0
  404. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/repository/__init__.py +0 -0
  405. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/repository/test_repository_async_repository.py +0 -0
  406. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/repository/test_repository_base.py +0 -0
  407. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/repository/test_repository_repository.py +0 -0
  408. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/resource/__init__.py +0 -0
  409. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/resource/test_resource_async_resource.py +0 -0
  410. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/resource/test_resource_resource.py +0 -0
  411. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/smoke_test.py +0 -0
  412. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/test_import.py +0 -0
  413. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/test_main.py +0 -0
  414. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/test_release_version.py +0 -0
  415. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/test_version.py +0 -0
  416. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/user/__init__.py +0 -0
  417. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/user/test_user_async_user.py +0 -0
  418. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/user/test_user_base.py +0 -0
  419. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/user/test_user_user.py +0 -0
  420. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/utils/__init__.py +0 -0
  421. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/utils/test_utils_fields.py +0 -0
  422. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/utils/test_utils_log.py +0 -0
  423. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/utils/test_utils_pagination.py +0 -0
  424. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/watch/__init__.py +0 -0
  425. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/watch/test_watch_changes.py +0 -0
  426. {python_gitea-0.10.1 → python_gitea-0.11.0}/tests/watch/test_watch_state.py +0 -0
  427. {python_gitea-0.10.1 → python_gitea-0.11.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: python-gitea
3
- Version: 0.10.1
3
+ Version: 0.11.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
@@ -36,6 +36,7 @@ Description-Content-Type: text/markdown
36
36
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/isaac-cf-wong/python-gitea/blob/main/LICENSE)
37
37
  [![Security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
38
38
  [![DOI](https://zenodo.org/badge/1129170965.svg)](https://doi.org/10.5281/zenodo.18211496)
39
+ [![SPEC 0 — Minimum Supported Dependencies](https://img.shields.io/badge/SPEC-0-green?labelColor=%23004811&color=%235CA038)](https://scientific-python.org/specs/spec-0000/)
39
40
 
40
41
  A Python package for interacting with the Gitea API. It provides a simple,
41
42
  intuitive interface to access Gitea repositories, users, organizations, issues,
@@ -45,7 +46,8 @@ data retrieval, and management tasks.
45
46
  ## Features
46
47
 
47
48
  - **Full API Coverage**: Repositories, users, organizations, issues, pull
48
- requests, comments, labels, milestones, notifications, and projects.
49
+ requests, comments, labels, milestones, notifications, projects, and Actions
50
+ workflows, runs, and job logs.
49
51
  - **Easy Authentication**: Token-based authentication, with multiple saved
50
52
  accounts and a default-account fallback.
51
53
  - **Asynchronous Support**: Built with `async`/`await` for non-blocking
@@ -9,6 +9,7 @@
9
9
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/isaac-cf-wong/python-gitea/blob/main/LICENSE)
10
10
  [![Security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
11
11
  [![DOI](https://zenodo.org/badge/1129170965.svg)](https://doi.org/10.5281/zenodo.18211496)
12
+ [![SPEC 0 — Minimum Supported Dependencies](https://img.shields.io/badge/SPEC-0-green?labelColor=%23004811&color=%235CA038)](https://scientific-python.org/specs/spec-0000/)
12
13
 
13
14
  A Python package for interacting with the Gitea API. It provides a simple,
14
15
  intuitive interface to access Gitea repositories, users, organizations, issues,
@@ -18,7 +19,8 @@ data retrieval, and management tasks.
18
19
  ## Features
19
20
 
20
21
  - **Full API Coverage**: Repositories, users, organizations, issues, pull
21
- requests, comments, labels, milestones, notifications, and projects.
22
+ requests, comments, labels, milestones, notifications, projects, and Actions
23
+ workflows, runs, and job logs.
22
24
  - **Easy Authentication**: Token-based authentication, with multiple saved
23
25
  accounts and a default-account fallback.
24
26
  - **Asynchronous Support**: Built with `async`/`await` for non-blocking
@@ -35,6 +35,15 @@ src/gitea/
35
35
  │ └── manager.py # ConfigManager (load/save/CRUD accounts)
36
36
  ├── resource/ # Resource base class
37
37
  │ └── resource.py # Shared request helpers for resources
38
+ ├── actions/ # Actions resource (sync + async), composed per family
39
+ │ ├── base.py # Every Actions path and query parameter
40
+ │ ├── scope.py # Which scope a set of coordinates addresses
41
+ │ ├── actions.py # Workflows, runs, jobs; composes the families below
42
+ │ ├── run_management.py # Cancel, approve, rerun, delete a run
43
+ │ ├── artifact.py # The files a run produced, archive included
44
+ │ ├── secret.py # Write-only secrets of a scope
45
+ │ ├── variable.py # Their readable counterpart
46
+ │ └── runner.py # Runners of a scope, and the registration token
38
47
  ├── issue/ # Issue resource (sync + async)
39
48
  ├── pull_request/ # Pull request resource (sync + async)
40
49
  ├── repository/ # Repository resource (sync + async)
@@ -48,6 +57,7 @@ src/gitea/
48
57
  ├── cli/ # Typer CLI application
49
58
  │ ├── main.py # gitea-cli entry point, command registration
50
59
  │ ├── config/ # config commands
60
+ │ ├── actions/ # actions workflow, run, job, artifact, secret, variable, runner commands
51
61
  │ ├── issue/ # issue + issue dependency commands
52
62
  │ ├── pull_request/ # pull-request commands
53
63
  │ ├── comment/ # comment commands
@@ -80,6 +90,7 @@ Each client exposes one attribute per resource:
80
90
 
81
91
  ```python
82
92
  with Gitea(token="...", base_url="...") as client:
93
+ client.actions # Actions
83
94
  client.issue # Issue
84
95
  client.pull_request # PullRequest
85
96
  client.repository # Repository
@@ -107,6 +118,34 @@ it, so the resource methods stay one-to-one with the API. For example,
107
118
  `gitea.issue.project_column` resolves the board column an issue's card sits in,
108
119
  which Gitea only reveals through the project's column listings.
109
120
 
121
+ `actions` is the one resource split further, into a module per family - runs,
122
+ artifacts, secrets, variables, runners - which `Actions` and `AsyncActions`
123
+ compose. Gitea's Actions API is large enough that one class per client would be
124
+ a file nobody reads end to end, and the families differ from each other in ways
125
+ worth writing down beside their own methods: which listings answer with an
126
+ object and which with a bare array, which endpoints answer with a file rather
127
+ than a document, and which scopes each family exists at. The path building for
128
+ all of them stays in one `base.py`, so every URL the resource can address is in
129
+ one place.
130
+
131
+ That package's `__init__.py` re-exports nothing, unlike its neighbours'. With
132
+ thirteen modules an eager re-export would make `import gitea.actions.scope`
133
+ execute all of them, and would put each in an import cycle: importing a
134
+ submodule imports its package, so a package that imports its submodules is one
135
+ they import back. `tests/actions/test_actions_imports.py` pins both properties.
136
+
137
+ The neighbours keep their re-exports and avoid the same two costs by resolving
138
+ them on first read instead, through a module-level `__getattr__` (PEP 562) that
139
+ `gitea._lazy.lazy_reexports` builds from a table of name against origin module.
140
+ `from gitea.issue import Issue` works exactly as it did, while
141
+ `import gitea.issue.base` no longer executes either client - and the package no
142
+ longer imports the submodules that import it back, which is where 44 of the
143
+ import cycles in this tree came from. Each such package keeps a `TYPE_CHECKING`
144
+ block naming the same imports, so editors and type checkers still resolve the
145
+ names statically; that block does not execute, so it reintroduces no cycle.
146
+ `tests/test_lazy_reexports.py` pins the public names, the laziness, and the
147
+ absence of any module-level import cycle anywhere in `gitea`.
148
+
110
149
  ## CLI Layer
111
150
 
112
151
  The CLI is a single Typer application registered in `cli/main.py`. Each resource
@@ -126,9 +126,18 @@ way, so an invocation can be written without reading `--help` first:
126
126
  | `--owner` | The user or organization that owns the target. Required. |
127
127
  | `--repository` | Narrows the target to one repository of that owner. |
128
128
  | `--<entity>-id` | Names the entity acted on. |
129
+ | `--admin` | Asks for the instance-wide form, where one exists. |
129
130
 
130
- The entity options are `--issue-id`, `--project-id`, `--column-id`, `--label-id`
131
- and `--comment-id`.
131
+ The entity options are `--issue-id`, `--project-id`, `--column-id`,
132
+ `--label-id`, `--comment-id`, `--workflow-id`, `--run-id`, `--job-id`,
133
+ `--artifact-id` and `--runner-id`. Two entities Gitea addresses by name rather
134
+ than by number - an Actions secret and an Actions variable - are named by
135
+ `--secret-name` and `--variable-name`, since `--secret-id` would promise a
136
+ number the API does not have.
137
+
138
+ `--admin` is offered by the Actions commands whose endpoint has an instance-wide
139
+ form. It belongs to no owner, so it cannot be combined with `--owner`, and it
140
+ needs an administrator's token. See [the Actions scopes](#actions-scopes).
132
141
 
133
142
  Omitting `--repository` asks for the target that belongs to the owner itself
134
143
  rather than to one of its repositories. The `project` commands have both forms:
@@ -138,6 +147,9 @@ gitea-cli project get --owner my-org --project-id 1 # organ
138
147
  gitea-cli project get --owner my-org --repository my-repo --project-id 1 # repository project
139
148
  ```
140
149
 
150
+ Most of the Actions commands have both forms too, and some have four: see
151
+ [the Actions scopes](#actions-scopes) for the table.
152
+
141
153
  The other families have no owner-wide endpoint - an issue, a comment, a label, a
142
154
  milestone and a pull request all live in a repository - so omitting
143
155
  `--repository` there is reported as an error naming the option to pass:
@@ -205,6 +217,224 @@ endpoint to serve it with, so they answer by naming the option to pass.
205
217
  - Under `--output json` the confirmation prompt is written to stderr so that
206
218
  stdout stays parsable; pass `--force` to skip it entirely.
207
219
 
220
+ ### Actions - run, inspect and configure workflows
221
+
222
+ A workflow is the file in the repository and what is dispatched, a run is one
223
+ execution of it and what carries the status, a job is a part of a run and what
224
+ carries the logs, and an artifact is a file a job produced. The commands are
225
+ grouped that way. Three further groups configure Actions rather than watch it: a
226
+ `secret` and a `variable` are what a workflow reads at run time, and a `runner`
227
+ is a machine that executes jobs.
228
+
229
+ `--workflow-id` is the workflow's **file name** - `build.yml` - and not a
230
+ number: that is what Gitea's endpoint takes. `--run-id` and `--job-id` are IDs,
231
+ as everywhere else.
232
+
233
+ - `gitea-cli actions workflow list --owner <owner> --repository <repo>`
234
+ - `gitea-cli actions workflow get --owner <owner> --repository <repo> --workflow-id <file>`
235
+ - `gitea-cli actions workflow dispatch --owner <owner> --repository <repo> --workflow-id <file> --ref <ref>`
236
+ - Optional: `--input KEY=VALUE` (repeatable), `--return-run-details`
237
+ - The workflow has to declare a `workflow_dispatch` trigger: that is the
238
+ trigger a dispatch fires, so a workflow without one has nothing for this
239
+ to start.
240
+ - Gitea accepts a dispatch with `204` and no body, which says the request
241
+ was taken but not which run it started. `--return-run-details` asks the
242
+ response to name the run - `workflow_run_id`, `run_url`, `html_url` - so a
243
+ script can follow the run it dispatched instead of guessing which of the
244
+ runs that appeared is its own. An instance too old to know the parameter
245
+ answers without a body as before, so treat an empty `data` as "accepted,
246
+ run not named" rather than as a failure.
247
+ - Only the first `=` of an `--input` divides the name from the value, so
248
+ `--input query=a=b` sets `query` to `a=b`. An input given twice with two
249
+ different values is refused rather than one of them silently kept.
250
+ - `gitea-cli actions run list --owner <owner> --repository <repo>`
251
+ - Optional: `--workflow-id`, `--admin`, `--event`, `--branch`, `--status`,
252
+ `--actor`, `--head-sha`, `--exclude-pull-requests`, `--page`, `--limit`
253
+ - `--status` is one of `pending`, `queued`, `in_progress`, `failure`,
254
+ `success`, `skipped`.
255
+ - `--workflow-id` asks a different endpoint - the workflow's own runs -
256
+ rather than filtering the repository's.
257
+ - This listing exists at four [scopes](#actions-scopes). `--workflow-id` and
258
+ `--exclude-pull-requests` belong to the repository form alone, and passing
259
+ either outside a repository is refused rather than quietly ignored.
260
+ - `gitea-cli actions run get --owner <owner> --repository <repo> --run-id <id>`
261
+ - `status` says how far the run has got, `conclusion` how it ended. A run
262
+ still going has no conclusion yet.
263
+ - `gitea-cli actions run jobs --owner <owner> --repository <repo> --run-id <id>`
264
+ - Optional: `--status`, `--page`, `--limit`
265
+ - `gitea-cli actions job get --owner <owner> --repository <repo> --job-id <id>`
266
+ - The job carries its `steps`, each with a `status` and a `conclusion`,
267
+ which is where a failure is narrowed to the step that failed.
268
+ - `gitea-cli actions job logs --owner <owner> --repository <repo> --job-id <id>`
269
+ - Text output is the log itself, so it can be piped, grepped or redirected
270
+ like the file it is; `--output json` wraps it in the envelope instead,
271
+ with the log as a string under `logs` and `job_id` alongside it. A job
272
+ that has produced nothing yet prints nothing.
273
+ - `gitea-cli actions job list --owner <owner> --repository <repo>`
274
+ - Optional: `--admin`, `--status`, `--page`, `--limit`
275
+ - A different endpoint from `run jobs`: it answers with **every** job of the
276
+ scope rather than the jobs of one run, so `--status queued` finds what is
277
+ waiting for a runner without walking the runs to reach it. Exists at four
278
+ [scopes](#actions-scopes).
279
+
280
+ These listings answer with an **object** and not with the bare array the other
281
+ listings in this CLI return: `total_count` alongside `workflows`,
282
+ `workflow_runs` or `jobs`. That is the shape Gitea's Actions endpoints send, and
283
+ [the field-name convention](#field-names) is why it is passed through rather
284
+ than flattened. So a script reads `.data.workflow_runs[]` where it would read
285
+ `.data[]` for issues. One page is fetched per invocation; `--page` and `--limit`
286
+ walk a long history.
287
+
288
+ #### Acting on a run
289
+
290
+ - `gitea-cli actions run cancel --owner <owner> --repository <repo> --run-id <id>`
291
+ - Asks the run's jobs to stop and waits for them to notice. A job whose
292
+ runner has gone away never does, and the run then stays `in_progress`.
293
+ - `gitea-cli actions run force-cancel --owner <owner> --repository <repo> --run-id <id>`
294
+ - Marks the run cancelled regardless, which is what clears a stuck one. It
295
+ is a different endpoint and not a retry of `cancel`: a job that really is
296
+ still running somewhere is disowned rather than stopped, so cancel first
297
+ and reach for this when that has not taken effect.
298
+ - `gitea-cli actions run approve --owner <owner> --repository <repo> --run-id <id>`
299
+ - A run triggered by a first-time contributor's pull request waits for
300
+ someone with write access and shows as `blocked` until then.
301
+ - `gitea-cli actions run rerun --owner <owner> --repository <repo> --run-id <id>`
302
+ - Optional: `--failed-jobs`
303
+ - `--failed-jobs` reruns only the jobs that failed, which is a different
304
+ endpoint and the one for a long run that failed on one flaky job: the jobs
305
+ that succeeded keep their results. It answers without a body, so an empty
306
+ `data` there is a rerun that started.
307
+ - `gitea-cli actions job rerun --owner <owner> --repository <repo> --run-id <id> --job-id <id>`
308
+ - Reruns one named job. This is the one job command that takes the run as
309
+ well, because Gitea addresses the rerun through the run.
310
+ - `gitea-cli actions run delete --owner <owner> --repository <repo> --run-id <id>`
311
+ - Deletes the run **and** the jobs, logs and artifacts it produced, which is
312
+ how a repository is cleared of those rather than only of the run's entry.
313
+ A run that has not finished cannot be deleted; cancel it first.
314
+
315
+ Cancelling, approving and rerunning answer with the run as it now stands, so
316
+ `.data.status` says what the request did rather than only that it was taken.
317
+
318
+ #### Artifacts
319
+
320
+ An artifact is a file a job uploaded. Uploading one is not offered here and is
321
+ not an omission: Gitea has no REST endpoint for it - an artifact is uploaded
322
+ from inside a running job, by the runner, over the Actions protocol.
323
+
324
+ - `gitea-cli actions artifact list --owner <owner> --repository <repo>`
325
+ - Optional: `--run-id`, `--name`
326
+ - `--run-id` asks the run's own artifacts, a different endpoint rather than
327
+ a filter. `--name` narrows rather than identifies: a run uploading one
328
+ artifact per job has several of the same name.
329
+ - Answers with an object: `total_count` alongside `artifacts`.
330
+ - `gitea-cli actions artifact get --owner <owner> --repository <repo> --artifact-id <id>`
331
+ - `size_in_bytes` sizes a download and `expired` says whether there is an
332
+ archive left to download at all.
333
+ - `gitea-cli actions artifact download --owner <owner> --repository <repo> --artifact-id <id> --file <path>`
334
+ - Optional: `--force`
335
+ - Writes the zip to `--file`; it is never written to stdout, since a zip
336
+ interleaved with the JSON envelope would be neither. `--force` overwrites
337
+ an existing file, and without it an existing path is refused. An artifact
338
+ whose archive has expired is reported rather than saved as a zero-byte
339
+ file.
340
+ - `data` names where the archive went and how large it was - `path` and
341
+ `size_in_bytes` - since the response itself carries no field saying
342
+ either.
343
+ - `gitea-cli actions artifact delete --owner <owner> --repository <repo> --artifact-id <id>`
344
+ - Deletes the archive; the run it belongs to stays, and keeps its logs.
345
+
346
+ #### Secrets, variables and runners
347
+
348
+ <a id="actions-scopes"></a> These three, and the `run list` and `job list`
349
+ commands, exist at more than one **scope**, and which one is asked for follows
350
+ [the naming convention](#option-naming):
351
+
352
+ | Coordinates | Scope | Path |
353
+ | ---------------------------- | ------------------------- | ----------------------------------- |
354
+ | `--owner` and `--repository` | that repository | `/repos/{owner}/{repo}/actions/...` |
355
+ | `--owner` alone | that organization | `/orgs/{owner}/actions/...` |
356
+ | neither | the authenticated account | `/user/actions/...` |
357
+ | `--admin` | the whole instance | `/admin/actions/...` |
358
+
359
+ `--owner` alone is the **organization** form, not a generic owner form: Gitea
360
+ answers it only for an organization. `--admin` needs an administrator's token
361
+ and cannot be combined with `--owner`.
362
+
363
+ Not every group offers every scope. A secret cannot be _listed_ for the
364
+ authenticated account, and neither secrets nor variables have an instance-wide
365
+ form. Asking for a scope that does not exist is refused by name rather than
366
+ answered with an empty listing, which is what the missing endpoint would
367
+ otherwise look like.
368
+
369
+ - `gitea-cli actions secret list --owner <owner> [--repository <repo>]`
370
+ - Optional: `--page`, `--limit`
371
+ - A secret's value is never listed: Gitea stores it write-only, so the
372
+ entries carry the name, the description and when it was set. Answers with
373
+ a **bare array**, unlike the other Actions listings.
374
+ - A job sees the secrets of every scope above it, so a repository's listing
375
+ is not the set of secrets its workflows can read.
376
+ - `gitea-cli actions secret set --secret-name <name> --data <value> [--owner <owner>] [--repository <repo>]`
377
+ - Optional: `--description`
378
+ - `--data -` reads the value from **stdin**, which is the spelling to use
379
+ anywhere the value matters: a value on the command line is in the shell
380
+ history and in the process list of the machine it ran on. Exactly one
381
+ trailing newline is stripped, so `echo` and `printf` both send what they
382
+ look like they send.
383
+ - One endpoint creates and replaces. Gitea answers `201` when the secret was
384
+ new and `204` when it replaced one, so `.metadata.status_code` is what
385
+ says which happened; both are success.
386
+ - Omitting `--description` leaves the existing one rather than clearing it.
387
+ - `gitea-cli actions secret delete --secret-name <name> [--owner <owner>] [--repository <repo>]`
388
+ - `gitea-cli actions variable list [--owner <owner>] [--repository <repo>]`
389
+ - Optional: `--page`, `--limit`
390
+ - The readable counterpart of a secret: the value comes back, under `data`.
391
+ Anything a workflow must not print belongs in a secret instead. Answers
392
+ with a bare array.
393
+ - `gitea-cli actions variable get --variable-name <name> [--owner <owner>] [--repository <repo>]`
394
+ - `gitea-cli actions variable create --variable-name <name> --value <value> [--owner <owner>] [--repository <repo>]`
395
+ - Optional: `--description`
396
+ - A name that already exists is a conflict rather than an overwrite, so this
397
+ is safe to retry against a name believed to be free.
398
+ - `gitea-cli actions variable update --variable-name <name> --value <value> [--owner <owner>] [--repository <repo>]`
399
+ - Optional: `--new-name`, `--description`
400
+ - `--value` is required even by an update that only means to rename: Gitea
401
+ requires the value in the body, so read it with `variable get` first
402
+ rather than guessing it. `--new-name` is the rename; omitting it leaves
403
+ the name alone.
404
+ - `gitea-cli actions variable delete --variable-name <name> [--owner <owner>] [--repository <repo>]`
405
+ - `gitea-cli actions runner list [--owner <owner>] [--repository <repo>] [--admin]`
406
+ - Optional: `--state enabled|disabled`
407
+ - A runner is registered to one scope and then runs the jobs of everything
408
+ under it, so a scope's listing shows the runners registered **there** -
409
+ not every runner that could pick up its jobs. A repository whose jobs all
410
+ run on an organization runner has an empty listing of its own, and that is
411
+ not a repository with nowhere to run.
412
+ - `status` says whether the runner is reachable and `busy` whether it is
413
+ running something; both are independent of `--state`, since a runner can
414
+ be online and disabled at once and then takes no jobs. Answers with an
415
+ object: `total_count` alongside `runners`.
416
+ - `gitea-cli actions runner get --runner-id <id> [--owner <owner>] [--repository <repo>] [--admin]`
417
+ - `labels` is what a job's `runs-on` is matched against, and is the usual
418
+ reason a job sits queued while a runner sits idle.
419
+ - A runner is addressed through the scope it is registered to, so a real
420
+ runner asked for through another scope is reported as not found.
421
+ - `gitea-cli actions runner update --runner-id <id> --state enabled|disabled [--owner <owner>] [--repository <repo>] [--admin]`
422
+ - `--state` is Gitea's `disabled` field, named rather than offered as a
423
+ flag: there is no partial update of a runner, so an update says which of
424
+ the two states it means rather than defaulting to one. Disabling is the
425
+ reversible alternative to `runner delete`.
426
+ - `gitea-cli actions runner delete --runner-id <id> [--owner <owner>] [--repository <repo>] [--admin]`
427
+ - Removes the registration. A runner process still running keeps trying to
428
+ poll and is refused, so a machine meant to come back has to re-register.
429
+ - `gitea-cli actions runner registration-token [--owner <owner>] [--repository <repo>] [--admin]`
430
+ - The token `act_runner register` is given. Registering a runner is not
431
+ something this API does: take the token here, register the machine out of
432
+ band, then list what appeared.
433
+ - The token belongs to the **scope** and not to one runner, and it is a
434
+ credential: anything holding it can attach a machine that will execute the
435
+ scope's jobs. It is printed, so redirect it rather than leaving it in a
436
+ shell history or a CI log.
437
+
208
438
  ### Issue - manage issues
209
439
 
210
440
  - `gitea-cli issue create --owner <owner> --repository <repo> --title <title>`
@@ -325,8 +555,11 @@ gitea-cli project list --owner my-org --repository my-repo # that repository's
325
555
  arrived in `--column-id`. An issue with no card there is reported as an
326
556
  error naming `project issue add`; `--add-if-missing` has this command put
327
557
  it in `--column-id` instead.
328
- - `gitea-cli project issue remove --owner <owner> [--repository <repo>] --project-id <id> --column-id <id> --issue-id <id>`
329
- - Optional: `--issue-repository`
558
+ - `gitea-cli project issue remove --owner <owner> [--repository <repo>] --project-id <id> --issue-id <id>`
559
+ - Optional: `--column-id`, `--issue-repository`
560
+ - Takes the issue's card off the project. `--column-id` is the column the
561
+ card is in, and is found on the board when it is omitted; an issue with no
562
+ card there is reported as having none.
330
563
 
331
564
  The project endpoints identify an issue by its global ID, which is not the
332
565
  number shown in the web UI: `my-org/my-repo#15` may well be global ID `1854`.
@@ -342,6 +575,39 @@ for you:
342
575
  ID. `--issue-repository` also overrides `--repository`, for the case of a
343
576
  repository project holding an issue from elsewhere.
344
577
 
578
+ `--column-id` does not mean the same thing to all three commands. For `add` and
579
+ `move` it is where the card is going, which only the caller can say. For
580
+ `remove` it is where the card already is, which the board can be asked - so the
581
+ option is optional there, and omitting it has the project's columns walked to
582
+ find the card:
583
+
584
+ ```console
585
+ $ gitea-cli project issue remove --owner my-org --project-id 1 \
586
+ --issue-repository my-repo --issue-id 42
587
+ ```
588
+
589
+ The column the card was taken off comes back as `metadata.resolved_column_id`,
590
+ and an issue with no card on the project is reported as having none rather than
591
+ removed from a column chosen for it.
592
+
593
+ A column found that way is read back as well: the board is walked again after
594
+ the removal, and a zero exit status says that no column of the project holds a
595
+ card for the issue afterwards, rather than that a request to take one off was
596
+ accepted. The walk and the removal are separate requests, so a card moved in
597
+ between leaves the removal addressed to a column the card has left, which is a
598
+ removal with nothing to do — and whether the instance refuses that call or
599
+ answers it with a success, the status code is an answer about the request and
600
+ not about the card. It is the whole board that is read back rather than the
601
+ column the removal named, because that column holds no card whether the removal
602
+ took it off or the card had already moved elsewhere. The window is narrowed and
603
+ not closed: Gitea has no conditional delete, so a card put back on the board
604
+ after the confirming walk is one the command has already reported on.
605
+
606
+ A `--column-id` that is passed is used as it stands, and nothing is read back
607
+ for it: a column that does not hold the card is the caller's call to make rather
608
+ than something quietly corrected here, and whatever the instance answers such a
609
+ removal with is reported as it came.
610
+
345
611
  `add` and `move` are not two ways of doing the same thing. `add` puts an issue
346
612
  on a board, giving it a card in a column; `move` relocates the card it already
347
613
  has there, and an issue with no card has nothing to relocate. Gitea's move
@@ -422,14 +688,18 @@ gitea-cli repo list --owner alice --owner-type user # a user's repositories
422
688
  Every other command answers a question about the instance now. `watch` answers
423
689
  what moved since you last looked: it keeps a local cache of issue snapshots and
424
690
  reports the difference between that cache and the instance, then records the
425
- instance as the new baseline.
691
+ instance as the new baseline. `list` does both in one run; `--no-advance` and
692
+ `advance` pull them apart, for a caller that wants a change to survive until it
693
+ has been acted on rather than until it has been reported.
426
694
 
427
695
  The family is called `watch` because that is what it is for. `state` names the
428
696
  cache rather than the purpose, and `diff` suggests comparing two things you
429
697
  name, where this compares the present against whatever was last seen.
430
698
 
431
699
  - `gitea-cli watch list --owner <owner> [--repository <repo>] [--project-id <id>]`
432
- - Optional: `--state-file`, `--dry-run`
700
+ - Optional: `--state-file`, `--dry-run` (also spelled `--no-advance`)
701
+ - `gitea-cli watch advance --owner <owner> [--repository <repo>] [--project-id <id>]`
702
+ - Optional: `--state-file`
433
703
 
434
704
  Each `--repository` watches the open issues of that repository, and each
435
705
  `--project-id` watches the cards on that board. Both may be repeated, and both
@@ -492,10 +762,6 @@ Three behaviours of it are worth knowing before it surprises you:
492
762
  announcing every comment on every watched issue as rewritten. It is logged,
493
763
  and it happens once.
494
764
 
495
- `--dry-run` reports the changes and leaves the cache untouched, so the same
496
- changes come back on the next run. Everything else about the run is unchanged,
497
- including the requests it makes.
498
-
499
765
  A cache that cannot be written fails the run: the changes it reported would
500
766
  otherwise be reported again forever, which is worth an error rather than a
501
767
  silent one-line difference. As with every other failure, nothing is printed on
@@ -539,6 +805,48 @@ what kind of change it was, and what was added and removed:
539
805
  `issue_count`, `change_count`, `state_file` and `dry_run`, so a run that
540
806
  reported nothing still says why.
541
807
 
808
+ #### Detecting a change without consuming it
809
+
810
+ By default `list` does both at once: it reports the difference and advances the
811
+ cache past it, so a change is announced exactly once whether or not anyone was
812
+ in a position to act on it. A consumer that was busy - its previous run still in
813
+ flight, its queue full - drops the change, and the next run has nothing to say
814
+ about it.
815
+
816
+ `--dry-run`, also spelled `--no-advance`, reports the changes and leaves the
817
+ cache exactly as it was, so they come back on the next run. Everything else
818
+ about the run is unchanged, including the requests it makes. `watch advance`
819
+ then records the current state as the new baseline, which is how a caller
820
+ commits the cache once it has actually handled what it was told about:
821
+
822
+ ```bash
823
+ changes=$(gitea-cli --output json watch list --owner my-org --repository my-repo --no-advance)
824
+ if handle "$changes"; then
825
+ gitea-cli watch advance --owner my-org --repository my-repo
826
+ fi
827
+ ```
828
+
829
+ `advance` names its scopes exactly as `list` does, reads the same
830
+ `--state-file`, and reports one line per scope rather than one per change:
831
+
832
+ ```console
833
+ $ gitea-cli watch advance --owner my-org --repository my-repo --project-id 29
834
+ repo:my-org/my-repo: recorded 12 issues, 1 change baselined
835
+ project:my-org/29: recorded 5 issues, unchanged since the cache
836
+ ```
837
+
838
+ In `json` its `data` is one record per scope - `scope`, `issue_count`,
839
+ `change_count` and `baselined` - and its `metadata` carries `scopes`,
840
+ `baselined_scopes`, `issue_count`, `change_count` and `state_file`.
841
+
842
+ What it commits is the state of the instance **now**, not the state the dry run
843
+ saw: the dry run deliberately wrote nothing down, so there is nothing else left
844
+ to commit. That leaves one window the pair does not close - a change landing
845
+ between the two calls is baselined without ever having been reported.
846
+ `change_count` is how far the baseline moved, so an advance reporting more
847
+ changes than its dry run did is that window showing; keeping the two calls close
848
+ together is what keeps it small.
849
+
542
850
  #### Cost
543
851
 
544
852
  A run lists every page of each scope, and then every page of the comments of
@@ -546,6 +854,10 @@ every issue in it. That is one request per page of issues plus one per page of
546
854
  comments per issue, which is what makes comment edits detectable and what makes
547
855
  a large repository worth a longer interval.
548
856
 
857
+ `advance` costs exactly what `list` costs: it walks the same pages, and only
858
+ what it does with them differs. Pairing a dry run with an advance therefore
859
+ doubles the requests of the tick it replaces.
860
+
549
861
  ## Examples
550
862
 
551
863
  List all open issues in a repository:
@@ -565,6 +877,80 @@ gitea-cli issue create \
565
877
  --milestone 3
566
878
  ```
567
879
 
880
+ Start a workflow, then follow the run it started:
881
+
882
+ ```bash
883
+ run=$(gitea-cli --output json actions workflow dispatch \
884
+ --owner my-org \
885
+ --repository my-repo \
886
+ --workflow-id build.yml \
887
+ --ref main \
888
+ --input environment=staging \
889
+ --return-run-details |
890
+ jq -r '.data.workflow_run_id')
891
+
892
+ gitea-cli --output json actions run get --owner my-org --repository my-repo --run-id "$run" |
893
+ jq -r '.data | "\(.status) \(.conclusion // "-")"'
894
+ ```
895
+
896
+ Read the log of the job that failed:
897
+
898
+ ```bash
899
+ gitea-cli --output json actions run jobs \
900
+ --owner my-org --repository my-repo --run-id 42 |
901
+ jq -r '.data.jobs[] | select(.conclusion == "failure") | .id' |
902
+ while read -r job; do
903
+ gitea-cli actions job logs --owner my-org --repository my-repo --job-id "$job"
904
+ done
905
+ ```
906
+
907
+ Rerun only the jobs that failed, then wait for the run to settle:
908
+
909
+ ```bash
910
+ gitea-cli actions run rerun \
911
+ --owner my-org --repository my-repo --run-id 42 --failed-jobs
912
+
913
+ until [ "$(gitea-cli --output json actions run get \
914
+ --owner my-org --repository my-repo --run-id 42 |
915
+ jq -r '.data.status')" != "in_progress" ]; do
916
+ sleep 10
917
+ done
918
+ ```
919
+
920
+ Set a secret without putting it in the shell history or the process list:
921
+
922
+ ```bash
923
+ read -rs -p 'token: ' token
924
+ printf %s "$token" |
925
+ gitea-cli actions secret set \
926
+ --owner my-org --repository my-repo \
927
+ --secret-name DEPLOY_TOKEN --data - --description 'staging deploys'
928
+ unset token
929
+ ```
930
+
931
+ Find the jobs that are waiting for a runner across a whole organization, and the
932
+ runners that could take them:
933
+
934
+ ```bash
935
+ gitea-cli --output json actions job list --owner my-org --status queued |
936
+ jq -r '.data.jobs[] | "\(.id)\t\(.name)"'
937
+
938
+ gitea-cli --output json actions runner list --owner my-org |
939
+ jq -r '.data.runners[] | "\(.name)\t\(.status)\t\([.labels[].name] | join(","))"'
940
+ ```
941
+
942
+ Download the artifacts of a run, skipping the ones whose archive is gone:
943
+
944
+ ```bash
945
+ gitea-cli --output json actions artifact list \
946
+ --owner my-org --repository my-repo --run-id 42 |
947
+ jq -r '.data.artifacts[] | select(.expired == false) | "\(.id)\t\(.name)"' |
948
+ while IFS=$'\t' read -r id name; do
949
+ gitea-cli actions artifact download \
950
+ --owner my-org --repository my-repo --artifact-id "$id" --file "$name.zip"
951
+ done
952
+ ```
953
+
568
954
  Put an issue on a project board, in a column of it, addressing the issue by the
569
955
  number shown in the web UI:
570
956