gitlabform 0.0.540a0__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 (261) hide show
  1. gitlabform-0.0.540a0/.coveragerc +15 -0
  2. gitlabform-0.0.540a0/.dockerignore +46 -0
  3. gitlabform-0.0.540a0/.git-blame-ignore-revs +4 -0
  4. gitlabform-0.0.540a0/.github/CODEOWNERS +1 -0
  5. gitlabform-0.0.540a0/.github/ISSUE_TEMPLATE/bug_report.md +20 -0
  6. gitlabform-0.0.540a0/.github/ISSUE_TEMPLATE/feature_request.md +10 -0
  7. gitlabform-0.0.540a0/.github/ISSUE_TEMPLATE/question-or-other-issue.md +10 -0
  8. gitlabform-0.0.540a0/.github/actions/setup-uv-local/README.md +42 -0
  9. gitlabform-0.0.540a0/.github/actions/setup-uv-local/action.yml +30 -0
  10. gitlabform-0.0.540a0/.github/dependabot.yml +23 -0
  11. gitlabform-0.0.540a0/.github/workflows/_main.yml +48 -0
  12. gitlabform-0.0.540a0/.github/workflows/_releases.yml +163 -0
  13. gitlabform-0.0.540a0/.github/workflows/docs.yml +28 -0
  14. gitlabform-0.0.540a0/.github/workflows/linters.yml +67 -0
  15. gitlabform-0.0.540a0/.github/workflows/pr_on_fork.yml +29 -0
  16. gitlabform-0.0.540a0/.github/workflows/pr_on_main_repo.yml +29 -0
  17. gitlabform-0.0.540a0/.github/workflows/prs.yml +144 -0
  18. gitlabform-0.0.540a0/.github/workflows/tests-premium.yml +56 -0
  19. gitlabform-0.0.540a0/.github/workflows/tests-standard.yml +176 -0
  20. gitlabform-0.0.540a0/.github/workflows/tests-ultimate.yml +59 -0
  21. gitlabform-0.0.540a0/.gitignore +74 -0
  22. gitlabform-0.0.540a0/.lgtm.yml +7 -0
  23. gitlabform-0.0.540a0/.mypy.ini +35 -0
  24. gitlabform-0.0.540a0/.overrides/gitlabform-logo-favicon.png +0 -0
  25. gitlabform-0.0.540a0/.overrides/gitlabform-logo-favicon.svg +208 -0
  26. gitlabform-0.0.540a0/.python-version +1 -0
  27. gitlabform-0.0.540a0/CONTRIBUTING.md +1 -0
  28. gitlabform-0.0.540a0/Dockerfile +35 -0
  29. gitlabform-0.0.540a0/LICENSE +21 -0
  30. gitlabform-0.0.540a0/PKG-INFO +54 -0
  31. gitlabform-0.0.540a0/README.md +18 -0
  32. gitlabform-0.0.540a0/codecov.yml +29 -0
  33. gitlabform-0.0.540a0/dev/__init__.py +1 -0
  34. gitlabform-0.0.540a0/dev/common.py +70 -0
  35. gitlabform-0.0.540a0/dev/docs.py +23 -0
  36. gitlabform-0.0.540a0/dev/env.py +37 -0
  37. gitlabform-0.0.540a0/dev/gitlab/await-healthy.sh +16 -0
  38. gitlabform-0.0.540a0/dev/gitlab/gitlab.rb +41 -0
  39. gitlabform-0.0.540a0/dev/gitlab/healthcheck-and-setup.sh +42 -0
  40. gitlabform-0.0.540a0/dev/gitlab/run_gitlab_in_docker.sh +236 -0
  41. gitlabform-0.0.540a0/dev/gitlab/tests.Dockerfile +9 -0
  42. gitlabform-0.0.540a0/dev/infra.py +56 -0
  43. gitlabform-0.0.540a0/dev/main.py +316 -0
  44. gitlabform-0.0.540a0/dev/qa.py +77 -0
  45. gitlabform-0.0.540a0/dev/release.py +126 -0
  46. gitlabform-0.0.540a0/docs/automation.md +117 -0
  47. gitlabform-0.0.540a0/docs/changelog.md +1438 -0
  48. gitlabform-0.0.540a0/docs/contrib/coding_guidelines.md +14 -0
  49. gitlabform-0.0.540a0/docs/contrib/implementation_design.md +131 -0
  50. gitlabform-0.0.540a0/docs/contrib/index.md +45 -0
  51. gitlabform-0.0.540a0/docs/contrib/local_development.md +264 -0
  52. gitlabform-0.0.540a0/docs/contrib/releases.md +23 -0
  53. gitlabform-0.0.540a0/docs/contrib/workflows.md +21 -0
  54. gitlabform-0.0.540a0/docs/features.md +46 -0
  55. gitlabform-0.0.540a0/docs/images/egnyte-logo.svg +7 -0
  56. gitlabform-0.0.540a0/docs/images/elastic-path-logo.svg +20 -0
  57. gitlabform-0.0.540a0/docs/images/gitlabform-logo-square.png +0 -0
  58. gitlabform-0.0.540a0/docs/images/gitlabform-logo.png +0 -0
  59. gitlabform-0.0.540a0/docs/images/gitlabform-logo.svg +288 -0
  60. gitlabform-0.0.540a0/docs/images/group-ldap-links-provider.png +0 -0
  61. gitlabform-0.0.540a0/docs/images/liquidlight-logo.svg +1 -0
  62. gitlabform-0.0.540a0/docs/images/roche-logo.png +0 -0
  63. gitlabform-0.0.540a0/docs/images/stroeer-online-marketing-logo.svg +1 -0
  64. gitlabform-0.0.540a0/docs/index.md +126 -0
  65. gitlabform-0.0.540a0/docs/installation.md +44 -0
  66. gitlabform-0.0.540a0/docs/reference/archive_unarchive.md +18 -0
  67. gitlabform-0.0.540a0/docs/reference/avatar.md +43 -0
  68. gitlabform-0.0.540a0/docs/reference/badges.md +52 -0
  69. gitlabform-0.0.540a0/docs/reference/ci_cd_variables.md +119 -0
  70. gitlabform-0.0.540a0/docs/reference/deploy_keys.md +41 -0
  71. gitlabform-0.0.540a0/docs/reference/files.md +96 -0
  72. gitlabform-0.0.540a0/docs/reference/group_ldap_links.md +36 -0
  73. gitlabform-0.0.540a0/docs/reference/group_saml_links.md +33 -0
  74. gitlabform-0.0.540a0/docs/reference/index.md +336 -0
  75. gitlabform-0.0.540a0/docs/reference/integrations.md +24 -0
  76. gitlabform-0.0.540a0/docs/reference/job_token_scope.md +46 -0
  77. gitlabform-0.0.540a0/docs/reference/labels.md +66 -0
  78. gitlabform-0.0.540a0/docs/reference/members.md +138 -0
  79. gitlabform-0.0.540a0/docs/reference/merge_requests.md +124 -0
  80. gitlabform-0.0.540a0/docs/reference/pipeline_schedules.md +98 -0
  81. gitlabform-0.0.540a0/docs/reference/project_security_settings.md +21 -0
  82. gitlabform-0.0.540a0/docs/reference/project_transfer.md +95 -0
  83. gitlabform-0.0.540a0/docs/reference/protected_branches.md +109 -0
  84. gitlabform-0.0.540a0/docs/reference/protected_environments.md +32 -0
  85. gitlabform-0.0.540a0/docs/reference/push_mirrors.md +179 -0
  86. gitlabform-0.0.540a0/docs/reference/push_rules.md +45 -0
  87. gitlabform-0.0.540a0/docs/reference/resource_groups.md +32 -0
  88. gitlabform-0.0.540a0/docs/reference/settings.md +105 -0
  89. gitlabform-0.0.540a0/docs/reference/tags_protection.md +68 -0
  90. gitlabform-0.0.540a0/docs/reference/webhooks.md +81 -0
  91. gitlabform-0.0.540a0/docs/requirements.md +16 -0
  92. gitlabform-0.0.540a0/docs/running.md +75 -0
  93. gitlabform-0.0.540a0/docs/similar_apps.md +49 -0
  94. gitlabform-0.0.540a0/docs/upgrade.md +203 -0
  95. gitlabform-0.0.540a0/gitlab-config/config.yml +9 -0
  96. gitlabform-0.0.540a0/gitlab-config/gitlab-config.md +11 -0
  97. gitlabform-0.0.540a0/gitlabform/__init__.py +719 -0
  98. gitlabform-0.0.540a0/gitlabform/configuration/__init__.py +12 -0
  99. gitlabform-0.0.540a0/gitlabform/configuration/common.py +19 -0
  100. gitlabform-0.0.540a0/gitlabform/configuration/core.py +323 -0
  101. gitlabform-0.0.540a0/gitlabform/configuration/groups.py +127 -0
  102. gitlabform-0.0.540a0/gitlabform/configuration/projects.py +73 -0
  103. gitlabform-0.0.540a0/gitlabform/configuration/transform.py +259 -0
  104. gitlabform-0.0.540a0/gitlabform/constants.py +7 -0
  105. gitlabform-0.0.540a0/gitlabform/gitlab/__init__.py +108 -0
  106. gitlabform-0.0.540a0/gitlabform/gitlab/commits.py +39 -0
  107. gitlabform-0.0.540a0/gitlabform/gitlab/core.py +334 -0
  108. gitlabform-0.0.540a0/gitlabform/gitlab/group_badges.py +50 -0
  109. gitlabform-0.0.540a0/gitlabform/gitlab/group_ldap_links.py +40 -0
  110. gitlabform-0.0.540a0/gitlabform/gitlab/groups.py +96 -0
  111. gitlabform-0.0.540a0/gitlabform/gitlab/merge_requests.py +57 -0
  112. gitlabform-0.0.540a0/gitlabform/gitlab/pipelines.py +23 -0
  113. gitlabform-0.0.540a0/gitlabform/gitlab/project_badges.py +52 -0
  114. gitlabform-0.0.540a0/gitlabform/gitlab/project_deploy_keys.py +102 -0
  115. gitlabform-0.0.540a0/gitlabform/gitlab/project_merge_requests_approvals.py +94 -0
  116. gitlabform-0.0.540a0/gitlabform/gitlab/project_protected_environments.py +37 -0
  117. gitlabform-0.0.540a0/gitlabform/gitlab/projects.py +151 -0
  118. gitlabform-0.0.540a0/gitlabform/gitlab/python_gitlab.py +251 -0
  119. gitlabform-0.0.540a0/gitlabform/gitlab/variables.py +47 -0
  120. gitlabform-0.0.540a0/gitlabform/lists/__init__.py +62 -0
  121. gitlabform-0.0.540a0/gitlabform/lists/filter.py +99 -0
  122. gitlabform-0.0.540a0/gitlabform/lists/groups.py +87 -0
  123. gitlabform-0.0.540a0/gitlabform/lists/projects.py +239 -0
  124. gitlabform-0.0.540a0/gitlabform/output.py +46 -0
  125. gitlabform-0.0.540a0/gitlabform/processors/__init__.py +43 -0
  126. gitlabform-0.0.540a0/gitlabform/processors/abstract_processor.py +187 -0
  127. gitlabform-0.0.540a0/gitlabform/processors/application/__init__.py +17 -0
  128. gitlabform-0.0.540a0/gitlabform/processors/application/application_settings_processor.py +39 -0
  129. gitlabform-0.0.540a0/gitlabform/processors/defining_keys.py +152 -0
  130. gitlabform-0.0.540a0/gitlabform/processors/group/__init__.py +48 -0
  131. gitlabform-0.0.540a0/gitlabform/processors/group/group_badges_processor.py +17 -0
  132. gitlabform-0.0.540a0/gitlabform/processors/group/group_hooks_processor.py +75 -0
  133. gitlabform-0.0.540a0/gitlabform/processors/group/group_labels_processor.py +28 -0
  134. gitlabform-0.0.540a0/gitlabform/processors/group/group_ldap_links_processor.py +16 -0
  135. gitlabform-0.0.540a0/gitlabform/processors/group/group_members_processor.py +287 -0
  136. gitlabform-0.0.540a0/gitlabform/processors/group/group_push_rules_processor.py +44 -0
  137. gitlabform-0.0.540a0/gitlabform/processors/group/group_saml_links_processor.py +65 -0
  138. gitlabform-0.0.540a0/gitlabform/processors/group/group_settings_processor.py +90 -0
  139. gitlabform-0.0.540a0/gitlabform/processors/group/group_variables_processor.py +26 -0
  140. gitlabform-0.0.540a0/gitlabform/processors/multiple_entities_processor.py +171 -0
  141. gitlabform-0.0.540a0/gitlabform/processors/project/__init__.py +80 -0
  142. gitlabform-0.0.540a0/gitlabform/processors/project/badges_processor.py +17 -0
  143. gitlabform-0.0.540a0/gitlabform/processors/project/branches_processor.py +514 -0
  144. gitlabform-0.0.540a0/gitlabform/processors/project/deploy_keys_processor.py +18 -0
  145. gitlabform-0.0.540a0/gitlabform/processors/project/files_processor.py +301 -0
  146. gitlabform-0.0.540a0/gitlabform/processors/project/hooks_processor.py +64 -0
  147. gitlabform-0.0.540a0/gitlabform/processors/project/integrations_processor.py +33 -0
  148. gitlabform-0.0.540a0/gitlabform/processors/project/job_token_scope_processor.py +216 -0
  149. gitlabform-0.0.540a0/gitlabform/processors/project/members_processor.py +204 -0
  150. gitlabform-0.0.540a0/gitlabform/processors/project/merge_requests_approval_rules.py +17 -0
  151. gitlabform-0.0.540a0/gitlabform/processors/project/merge_requests_approvals.py +59 -0
  152. gitlabform-0.0.540a0/gitlabform/processors/project/project_labels_processor.py +27 -0
  153. gitlabform-0.0.540a0/gitlabform/processors/project/project_processor.py +62 -0
  154. gitlabform-0.0.540a0/gitlabform/processors/project/project_push_rules_processor.py +52 -0
  155. gitlabform-0.0.540a0/gitlabform/processors/project/project_security_settings.py +66 -0
  156. gitlabform-0.0.540a0/gitlabform/processors/project/project_settings_processor.py +239 -0
  157. gitlabform-0.0.540a0/gitlabform/processors/project/project_variables_processor.py +94 -0
  158. gitlabform-0.0.540a0/gitlabform/processors/project/remote_mirrors_processor.py +278 -0
  159. gitlabform-0.0.540a0/gitlabform/processors/project/resource_groups_processor.py +48 -0
  160. gitlabform-0.0.540a0/gitlabform/processors/project/schedules_processor.py +208 -0
  161. gitlabform-0.0.540a0/gitlabform/processors/project/tags_processor.py +108 -0
  162. gitlabform-0.0.540a0/gitlabform/processors/shared/__init__.py +0 -0
  163. gitlabform-0.0.540a0/gitlabform/processors/shared/protected_environments_processor.py +20 -0
  164. gitlabform-0.0.540a0/gitlabform/processors/util/__init__.py +0 -0
  165. gitlabform-0.0.540a0/gitlabform/processors/util/decorators.py +44 -0
  166. gitlabform-0.0.540a0/gitlabform/processors/util/difference_logger.py +70 -0
  167. gitlabform-0.0.540a0/gitlabform/processors/util/labels_processor.py +120 -0
  168. gitlabform-0.0.540a0/gitlabform/processors/util/variables_processor.py +143 -0
  169. gitlabform-0.0.540a0/gitlabform/run.py +9 -0
  170. gitlabform-0.0.540a0/gitlabform/util.py +7 -0
  171. gitlabform-0.0.540a0/mkdocs.yml +93 -0
  172. gitlabform-0.0.540a0/prek.toml +18 -0
  173. gitlabform-0.0.540a0/pyproject.toml +152 -0
  174. gitlabform-0.0.540a0/tbump.toml +41 -0
  175. gitlabform-0.0.540a0/tests/__init__.py +0 -0
  176. gitlabform-0.0.540a0/tests/acceptance/__init__.py +366 -0
  177. gitlabform-0.0.540a0/tests/acceptance/conftest.py +538 -0
  178. gitlabform-0.0.540a0/tests/acceptance/premium/test_branches.py +667 -0
  179. gitlabform-0.0.540a0/tests/acceptance/premium/test_branches_users_case_insensitive.py +63 -0
  180. gitlabform-0.0.540a0/tests/acceptance/premium/test_group_ldap_links.py +122 -0
  181. gitlabform-0.0.540a0/tests/acceptance/premium/test_group_push_rules.py +44 -0
  182. gitlabform-0.0.540a0/tests/acceptance/premium/test_group_saml_links.py +85 -0
  183. gitlabform-0.0.540a0/tests/acceptance/premium/test_group_settings.py +22 -0
  184. gitlabform-0.0.540a0/tests/acceptance/premium/test_group_variables.py +383 -0
  185. gitlabform-0.0.540a0/tests/acceptance/premium/test_merge_request_approval_rules.py +548 -0
  186. gitlabform-0.0.540a0/tests/acceptance/premium/test_merge_request_approvals_settings.py +59 -0
  187. gitlabform-0.0.540a0/tests/acceptance/premium/test_protected_environments.py +231 -0
  188. gitlabform-0.0.540a0/tests/acceptance/premium/test_push_rules.py +90 -0
  189. gitlabform-0.0.540a0/tests/acceptance/premium/test_tags.py +238 -0
  190. gitlabform-0.0.540a0/tests/acceptance/standard/__init__.py +0 -0
  191. gitlabform-0.0.540a0/tests/acceptance/standard/test_application_settings.py +91 -0
  192. gitlabform-0.0.540a0/tests/acceptance/standard/test_archive_project.py +88 -0
  193. gitlabform-0.0.540a0/tests/acceptance/standard/test_badges.py +164 -0
  194. gitlabform-0.0.540a0/tests/acceptance/standard/test_branches.py +403 -0
  195. gitlabform-0.0.540a0/tests/acceptance/standard/test_deploy_keys.py +216 -0
  196. gitlabform-0.0.540a0/tests/acceptance/standard/test_deploy_keys_all_projects.py +37 -0
  197. gitlabform-0.0.540a0/tests/acceptance/standard/test_files.py +458 -0
  198. gitlabform-0.0.540a0/tests/acceptance/standard/test_files_templates.py +94 -0
  199. gitlabform-0.0.540a0/tests/acceptance/standard/test_group_avatar.py +294 -0
  200. gitlabform-0.0.540a0/tests/acceptance/standard/test_group_badges.py +125 -0
  201. gitlabform-0.0.540a0/tests/acceptance/standard/test_group_hooks.py +252 -0
  202. gitlabform-0.0.540a0/tests/acceptance/standard/test_group_labels.py +338 -0
  203. gitlabform-0.0.540a0/tests/acceptance/standard/test_group_members_case_insensitive.py +111 -0
  204. gitlabform-0.0.540a0/tests/acceptance/standard/test_group_members_groups.py +248 -0
  205. gitlabform-0.0.540a0/tests/acceptance/standard/test_group_members_users.py +284 -0
  206. gitlabform-0.0.540a0/tests/acceptance/standard/test_group_settings.py +33 -0
  207. gitlabform-0.0.540a0/tests/acceptance/standard/test_group_variables.py +423 -0
  208. gitlabform-0.0.540a0/tests/acceptance/standard/test_hooks.py +261 -0
  209. gitlabform-0.0.540a0/tests/acceptance/standard/test_integrations.py +278 -0
  210. gitlabform-0.0.540a0/tests/acceptance/standard/test_job_token_scope.py +446 -0
  211. gitlabform-0.0.540a0/tests/acceptance/standard/test_members.py +102 -0
  212. gitlabform-0.0.540a0/tests/acceptance/standard/test_members_add_group.py +59 -0
  213. gitlabform-0.0.540a0/tests/acceptance/standard/test_members_enforce.py +78 -0
  214. gitlabform-0.0.540a0/tests/acceptance/standard/test_project_avatar.py +296 -0
  215. gitlabform-0.0.540a0/tests/acceptance/standard/test_project_group_members_case_insensitive.py +60 -0
  216. gitlabform-0.0.540a0/tests/acceptance/standard/test_project_labels.py +167 -0
  217. gitlabform-0.0.540a0/tests/acceptance/standard/test_project_members_case_insensitve.py +114 -0
  218. gitlabform-0.0.540a0/tests/acceptance/standard/test_project_settings.py +142 -0
  219. gitlabform-0.0.540a0/tests/acceptance/standard/test_project_variables.py +525 -0
  220. gitlabform-0.0.540a0/tests/acceptance/standard/test_remote_mirrors.py +831 -0
  221. gitlabform-0.0.540a0/tests/acceptance/standard/test_resource_groups.py +116 -0
  222. gitlabform-0.0.540a0/tests/acceptance/standard/test_running.py +99 -0
  223. gitlabform-0.0.540a0/tests/acceptance/standard/test_scheduled_for_deletion_project.py +44 -0
  224. gitlabform-0.0.540a0/tests/acceptance/standard/test_schedules.py +428 -0
  225. gitlabform-0.0.540a0/tests/acceptance/standard/test_tags.py +175 -0
  226. gitlabform-0.0.540a0/tests/acceptance/standard/test_token_from_config.py +40 -0
  227. gitlabform-0.0.540a0/tests/acceptance/standard/test_transfer_project.py +349 -0
  228. gitlabform-0.0.540a0/tests/acceptance/ultimate/test_group_members.py +129 -0
  229. gitlabform-0.0.540a0/tests/acceptance/ultimate/test_group_settings.py +44 -0
  230. gitlabform-0.0.540a0/tests/acceptance/ultimate/test_members.py +201 -0
  231. gitlabform-0.0.540a0/tests/acceptance/ultimate/test_project_security_settings.py +32 -0
  232. gitlabform-0.0.540a0/tests/acceptance/ultimate/test_project_settings.py +70 -0
  233. gitlabform-0.0.540a0/tests/unit/__init__.py +0 -0
  234. gitlabform-0.0.540a0/tests/unit/configuration/__init__.py +0 -0
  235. gitlabform-0.0.540a0/tests/unit/configuration/test_case_sensitivity.py +94 -0
  236. gitlabform-0.0.540a0/tests/unit/configuration/test_inheritance_break_projects_and_groups.py +233 -0
  237. gitlabform-0.0.540a0/tests/unit/configuration/test_inheritance_break_subgroups.py +136 -0
  238. gitlabform-0.0.540a0/tests/unit/configuration/test_inheritance_break_validation.py +126 -0
  239. gitlabform-0.0.540a0/tests/unit/configuration/test_projects_and_groups.py +141 -0
  240. gitlabform-0.0.540a0/tests/unit/configuration/test_skip_groups_skip_projects.py +101 -0
  241. gitlabform-0.0.540a0/tests/unit/configuration/test_subgroups.py +116 -0
  242. gitlabform-0.0.540a0/tests/unit/configuration/test_yaml_version.py +36 -0
  243. gitlabform-0.0.540a0/tests/unit/configuration/transform/test_access_level_transformer.py +205 -0
  244. gitlabform-0.0.540a0/tests/unit/configuration/transform/test_group_transformer.py +50 -0
  245. gitlabform-0.0.540a0/tests/unit/configuration/transform/test_implicit_name_transformer.py +50 -0
  246. gitlabform-0.0.540a0/tests/unit/configuration/transform/test_user_and_group_transformers.py +80 -0
  247. gitlabform-0.0.540a0/tests/unit/configuration/transform/test_user_transformer.py +99 -0
  248. gitlabform-0.0.540a0/tests/unit/gitlab/test_core.py +130 -0
  249. gitlabform-0.0.540a0/tests/unit/gitlab/test_python_gitlab.py +234 -0
  250. gitlabform-0.0.540a0/tests/unit/processors/__init__.py +0 -0
  251. gitlabform-0.0.540a0/tests/unit/processors/test_abstract_processor.py +35 -0
  252. gitlabform-0.0.540a0/tests/unit/processors/test_abstract_processors.py +69 -0
  253. gitlabform-0.0.540a0/tests/unit/processors/test_branches_processor.py +212 -0
  254. gitlabform-0.0.540a0/tests/unit/processors/test_difference_logger.py +71 -0
  255. gitlabform-0.0.540a0/tests/unit/processors/test_schedules_processor_extended_cron_pattern.py +37 -0
  256. gitlabform-0.0.540a0/tests/unit/test_access_levels.py +19 -0
  257. gitlabform-0.0.540a0/tests/unit/test_non_empty_configs_provider.py +29 -0
  258. gitlabform-0.0.540a0/tests/unit/test_parse_args.py +43 -0
  259. gitlabform-0.0.540a0/tests/unit/test_projects_provider.py +309 -0
  260. gitlabform-0.0.540a0/tests/unit/test_utils.py +20 -0
  261. gitlabform-0.0.540a0/uv.lock +2147 -0
@@ -0,0 +1,15 @@
1
+ [run]
2
+ source =
3
+ gitlabform
4
+
5
+ omit =
6
+ # don't check the test themselves, obviously
7
+ tests/*
8
+
9
+ # no point in checking this
10
+ setup.py
11
+
12
+ [report]
13
+ exclude_also =
14
+ \s*debug\(.*\)
15
+ \s*fatal\(.*\)
@@ -0,0 +1,46 @@
1
+ # Git
2
+ .git
3
+ .gitignore
4
+ .git-blame-ignore-revs
5
+
6
+ # Docker
7
+ .dockerignore
8
+ Dockerfile
9
+
10
+ # Python cache and artifacts
11
+ *.pyc
12
+ __pycache__/
13
+ *.egg-info
14
+ .mypy_cache/
15
+ .pytest_cache/
16
+
17
+ # Test, dev, and local environments
18
+ tests/
19
+ dev/
20
+ venv/
21
+ .venv/
22
+
23
+ # Documentation
24
+ docs/
25
+ .overrides/
26
+ mkdocs.yml
27
+ *.txt
28
+ *.md
29
+
30
+ # CI/CD and project config
31
+ .github/
32
+ .pre-commit-config.yaml
33
+ .coveragerc
34
+ codecov.yml
35
+ .lgtm.yml
36
+ .mypy.ini
37
+ coverage.xml
38
+ tbump.toml
39
+
40
+ # Editor/IDE config
41
+ .idea/
42
+ .vscode/
43
+ .cursor/
44
+
45
+ # Exceptions
46
+ !README.md
@@ -0,0 +1,4 @@
1
+ # Migrate code style to Black
2
+ c4ee3944829eda31699d63f55afc2d1a174fc12c
3
+ # Reformat to the latest version of Black with 120 chars per line
4
+ 7915da0bee431bdbddbcb47bde947161adb95148
@@ -0,0 +1 @@
1
+ * @amimas @gdubicki @jimisola @TimKnight-DWP
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: bug
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+
12
+ A clear and concise description of what the bug is.
13
+
14
+ **GitLabForm version**
15
+
16
+ Output of `gitlabform -V`
17
+
18
+ **GitLab version**
19
+
20
+ F.e. `13.12.4-ee`
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: enhancement
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ A clear and concise description of what you want to happen.
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: Question or other issue
3
+ about: Non-bug and non-feature requests go here :)
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ Write whatever you like :)
@@ -0,0 +1,42 @@
1
+ # Setup uv Local
2
+
3
+ This internal composite action centrally manages the installation of `uv` and configures the environment variables required for the project's toolchain.
4
+
5
+ ## Purpose
6
+
7
+ Instead of repeating installation scripts and version pinning in every workflow file, this action provides a single source of truth for:
8
+ - The pinned `uv` version (currently `0.11.7`).
9
+ - Option to set the Python version used in CI job.
10
+ - Cross-platform installation logic (handling both Unix and Windows runners).
11
+
12
+ ## Inputs
13
+
14
+ | Name | Description | Default | Required |
15
+ | :--- | :--- | :--- | :--- |
16
+ | `python-version` | The Python version to use (e.g., `3.12`, `3.14`). | `3.14` | No |
17
+
18
+ ## Environment Variables Set
19
+
20
+ This action exports the following variables to the `$GITHUB_ENV`, making them available to all subsequent steps in the job:
21
+ - `UV_PYTHON`: The version of Python `uv` should use for toolchain management.
22
+ - `UV_VERSION`: The pinned version of `uv` installed.
23
+
24
+ ## Usage
25
+
26
+ To use this action in a workflow, reference it by its local path:
27
+
28
+ ```yaml
29
+ jobs:
30
+ my-job:
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - uses: actions/checkout@v6
34
+
35
+ - name: Configure uv environment
36
+ uses: ./.github/actions/setup-uv-local
37
+ with:
38
+ python-version: '3.12'
39
+
40
+ - name: Install dependencies
41
+ run: uv sync
42
+ ```
@@ -0,0 +1,30 @@
1
+ name: 'Setup uv Local'
2
+ description: 'Centrally manages uv installation and versioning'
3
+ inputs:
4
+ python-version:
5
+ description: 'Python version to use. Defaults to 3.14 if not provided.'
6
+ required: false
7
+ default: '3.14'
8
+ runs:
9
+ using: 'composite'
10
+ steps:
11
+ - name: Export UV_PYTHON to environment
12
+ shell: bash
13
+ run: |
14
+ echo "UV_PYTHON=${{ inputs.python-version }}" >> $GITHUB_ENV
15
+ echo "UV_VERSION=0.11.7" >> $GITHUB_ENV
16
+
17
+ - name: Install uv (Unix)
18
+ if: runner.os != 'Windows'
19
+ shell: bash
20
+ run: |
21
+ curl -LsSf https://astral.sh/uv/${{ env.UV_VERSION }}/install.sh | sh
22
+ echo "$HOME/.local/bin" >> $GITHUB_PATH
23
+
24
+ - name: Install uv (Windows)
25
+ if: runner.os == 'Windows'
26
+ shell: pwsh
27
+ run: |
28
+ $env:UV_VERSION = "${{ env.UV_VERSION }}"
29
+ irm https://astral.sh/uv/install.ps1 | iex
30
+ echo "$HOME\.local\bin" >> $env:GITHUB_PATH
@@ -0,0 +1,23 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "docker"
9
+ directory: "/"
10
+ schedule:
11
+ interval: "weekly"
12
+ - package-ecosystem: "github-actions"
13
+ directory: "/"
14
+ schedule:
15
+ interval: "monthly"
16
+ - package-ecosystem: "pip"
17
+ directory: "/"
18
+ schedule:
19
+ interval: "weekly"
20
+ groups:
21
+ python-gitlab:
22
+ patterns:
23
+ - "python-gitlab*"
@@ -0,0 +1,48 @@
1
+ name: Main branch
2
+
3
+ permissions:
4
+ actions: read
5
+ checks: read
6
+ contents: read
7
+ discussions: write
8
+ statuses: write
9
+
10
+ concurrency:
11
+ group: ${{github.workflow}}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ on:
15
+ push:
16
+ branches:
17
+ - main
18
+
19
+ jobs:
20
+
21
+ build-docs:
22
+ uses: ./.github/workflows/docs.yml
23
+ with:
24
+ BRANCH_REF: ${{ github.ref }}
25
+
26
+ linters:
27
+ uses: ./.github/workflows/linters.yml
28
+ with:
29
+ BRANCH_REF: ${{ github.ref }}
30
+
31
+ tests-standard:
32
+ uses: ./.github/workflows/tests-standard.yml
33
+ with:
34
+ BRANCH_REF: ${{ github.ref }}
35
+
36
+ tests-premium:
37
+ uses: ./.github/workflows/tests-premium.yml
38
+ with:
39
+ BRANCH_REF: ${{ github.ref }}
40
+ environment: Main Tests
41
+ secrets: inherit
42
+
43
+ tests-ultimate:
44
+ uses: ./.github/workflows/tests-ultimate.yml
45
+ with:
46
+ BRANCH_REF: ${{ github.ref }}
47
+ environment: Main Tests
48
+ secrets: inherit
@@ -0,0 +1,163 @@
1
+ name: Releases
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ permissions:
9
+ contents: write
10
+ packages: write
11
+
12
+ jobs:
13
+
14
+ linters:
15
+ uses: ./.github/workflows/linters.yml
16
+ with:
17
+ BRANCH_REF: ${{ github.ref }}
18
+
19
+ tests-standard:
20
+ uses: ./.github/workflows/tests-standard.yml
21
+ with:
22
+ BRANCH_REF: ${{ github.ref }}
23
+
24
+ tests-premium:
25
+ uses: ./.github/workflows/tests-premium.yml
26
+ with:
27
+ BRANCH_REF: ${{ github.ref }}
28
+ environment: Main Tests
29
+ secrets: inherit
30
+
31
+ tests-ultimate:
32
+ uses: ./.github/workflows/tests-ultimate.yml
33
+ with:
34
+ BRANCH_REF: ${{ github.ref }}
35
+ environment: Main Tests
36
+ secrets: inherit
37
+
38
+ publish-docs:
39
+ needs:
40
+ - linters
41
+ - tests-standard
42
+ - tests-premium
43
+ - tests-ultimate
44
+ runs-on: ubuntu-latest
45
+ steps:
46
+ - uses: actions/checkout@v6
47
+ with:
48
+ ref: ${{ github.ref }}
49
+ fetch-depth: 2
50
+ - name: Configure uv environment
51
+ uses: ./.github/actions/setup-uv-local
52
+ - name: Setup Python ${{ env.UV_PYTHON }} and install dependencies
53
+ run: |
54
+ uv sync --frozen --no-dev --group docs
55
+ - name: Build docs
56
+ run: |
57
+ uv run --no-sync docs build
58
+ - name: Deploy 🚀
59
+ uses: JamesIves/github-pages-deploy-action@v4.8.0
60
+ with:
61
+ branch: gh-pages
62
+ folder: site
63
+
64
+ publish-to-github:
65
+ needs:
66
+ - linters
67
+ - tests-standard
68
+ - tests-premium
69
+ - tests-ultimate
70
+ runs-on: ubuntu-latest
71
+ steps:
72
+ - name: Create release in GitHub
73
+ uses: ncipollo/release-action@v1
74
+ with:
75
+ name: ${{ github.ref }}
76
+ body: "(this is a placeholder, it will be replaced with a changelog contents)"
77
+ # This token is provided by Actions, you do not need to create your own token
78
+ token: ${{ secrets.GITHUB_TOKEN }}
79
+
80
+ publish-to-pypi:
81
+ needs:
82
+ - linters
83
+ - tests-standard
84
+ - tests-premium
85
+ - tests-ultimate
86
+ runs-on: ubuntu-latest
87
+ environment:
88
+ name: pypi
89
+ url: https://pypi.org/p/gitlabform
90
+ permissions:
91
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
92
+ steps:
93
+ - uses: actions/checkout@v6
94
+ with:
95
+ ref: ${{ github.ref }}
96
+ fetch-depth: 2
97
+ - name: Configure uv environment
98
+ uses: ./.github/actions/setup-uv-local
99
+ - name: Setup Python ${{ env.UV_PYTHON }} and install dependencies
100
+ run: |
101
+ uv sync --frozen --no-dev --group release
102
+ - name: Build and verify the package
103
+ run: |
104
+ uv run --no-sync package build
105
+ uv run --no-sync package verify
106
+ - name: Publish to PyPI
107
+ run: |
108
+ uv run --no-sync package publish
109
+
110
+ publish-to-ghcr:
111
+ needs:
112
+ - linters
113
+ - tests-standard
114
+ - tests-premium
115
+ - tests-ultimate
116
+ runs-on: ubuntu-latest
117
+ steps:
118
+ - uses: actions/checkout@v6
119
+ - name: Configure uv environment
120
+ uses: ./.github/actions/setup-uv-local
121
+ - name: Install dependencies
122
+ run: |
123
+ uv pip install wheel packaging
124
+ - name: Get the version from the tag
125
+ run: echo "VERSION=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV
126
+ - name: Wait for PyPI release
127
+ run: |
128
+ uv pip download gitlabform==${{ env.VERSION }} > /dev/null
129
+ while [ $? -ne 0 ]; do sleep 10; uv pip download gitlabform==${{ env.VERSION }} > /dev/null ; done
130
+ shell: bash {0}
131
+ - name: Docker metadata
132
+ id: metadata
133
+ uses: docker/metadata-action@v6
134
+ with:
135
+ images: |
136
+ ghcr.io/gitlabform/gitlabform
137
+ flavor: |
138
+ latest=auto
139
+ tags: |
140
+ type=pep440,pattern={{version}}
141
+ type=pep440,pattern={{major}}.{{minor}}
142
+ type=pep440,pattern={{major}}
143
+ - name: Set up QEMU
144
+ uses: docker/setup-qemu-action@v4
145
+ - name: Set up Docker Buildx
146
+ uses: docker/setup-buildx-action@v4
147
+ # gitlabform/gitlabform image is going to be here
148
+ - name: Login to GitHub Container Registry
149
+ uses: docker/login-action@v3
150
+ with:
151
+ registry: ghcr.io
152
+ username: ${{ github.repository_owner }}
153
+ # This token is provided by Actions, you do not need to create your own token
154
+ password: ${{ secrets.GITHUB_TOKEN }}
155
+ - name: Publish image to registries
156
+ uses: docker/build-push-action@v7
157
+ with:
158
+ push: true
159
+ context: .
160
+ file: Dockerfile
161
+ platforms: linux/amd64,linux/arm64
162
+ tags: ${{ steps.metadata.outputs.tags }}
163
+ labels: ${{ steps.metadata.outputs.labels }}
@@ -0,0 +1,28 @@
1
+ name: Docs
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ BRANCH_REF:
7
+ type: string
8
+ required: true
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ build-docs:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+ with:
19
+ ref: ${{ inputs.BRANCH_REF }}
20
+ fetch-depth: 2
21
+ - name: Configure uv environment
22
+ uses: ./.github/actions/setup-uv-local
23
+ - name: Setup Python ${{ env.UV_PYTHON }} and install dependencies
24
+ run: |
25
+ uv sync --frozen --no-dev --group docs
26
+ - name: Build documentation
27
+ run: |
28
+ uv run --no-sync docs build
@@ -0,0 +1,67 @@
1
+ name: Linters
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ BRANCH_REF:
7
+ type: string
8
+ required: true
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ black-formatting:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+ with:
19
+ ref: ${{ inputs.BRANCH_REF }}
20
+ fetch-depth: 2
21
+ - name: Configure uv environment
22
+ uses: ./.github/actions/setup-uv-local
23
+ - name: Setup Python ${{ env.UV_PYTHON }} and install dependencies
24
+ run: |
25
+ uv sync --frozen --no-dev --group lint
26
+ - name: Run black formatting check
27
+ run: |
28
+ uv run --no-sync qa lint black --check .
29
+
30
+ types:
31
+ runs-on: ubuntu-latest
32
+ strategy:
33
+ max-parallel: 1
34
+ matrix:
35
+ python-version: [3.14]
36
+ fail-fast: false
37
+ steps:
38
+ - uses: actions/checkout@v6
39
+ with:
40
+ ref: ${{ inputs.BRANCH_REF }}
41
+ fetch-depth: 2
42
+ - name: Configure uv environment
43
+ uses: ./.github/actions/setup-uv-local
44
+ with:
45
+ python-version: ${{ matrix.python-version }}
46
+ - name: Setup Python ${{ matrix.python-version }} and install dependencies
47
+ run: |
48
+ uv sync --frozen --no-dev --group lint
49
+ - name: Run mypy
50
+ run: |
51
+ uv run --no-sync qa lint mypy .
52
+
53
+ bandit:
54
+ runs-on: ubuntu-latest
55
+ steps:
56
+ - uses: actions/checkout@v6
57
+ with:
58
+ ref: ${{ inputs.BRANCH_REF }}
59
+ fetch-depth: 2
60
+ - name: Configure uv environment
61
+ uses: ./.github/actions/setup-uv-local
62
+ - name: Setup Python ${{ env.UV_PYTHON }} and install dependencies
63
+ run: |
64
+ uv sync --frozen --no-dev --group lint
65
+ - name: Run bandit
66
+ run: |
67
+ uv run --no-sync qa lint bandit .
@@ -0,0 +1,29 @@
1
+ name: Linter and tests (PRs raised from Forks)
2
+
3
+ permissions:
4
+ actions: read
5
+ contents: read
6
+ pull-requests: write
7
+ concurrency:
8
+ group: ${{github.workflow}}-${{ github.event.pull_request.number }}
9
+ cancel-in-progress: true
10
+
11
+ on:
12
+ pull_request_target:
13
+ branches:
14
+ - main
15
+
16
+ jobs:
17
+ pr_jobs:
18
+ # github.event.pull_request object defined here: https://docs.github.com/en/rest/pulls/pulls?apiVersion=2026-03-10#get-a-pull-request
19
+ if: ${{ github.event.pull_request.head.repo.full_name != 'gitlabform/gitlabform' }}
20
+ uses: ./.github/workflows/prs.yml
21
+ permissions:
22
+ actions: read
23
+ contents: read
24
+ packages: read
25
+ pull-requests: write
26
+ security-events: write
27
+ with:
28
+ branch_ref: ${{ github.event.pull_request.head.sha }}
29
+ secrets: inherit
@@ -0,0 +1,29 @@
1
+ name: Linter and tests (PRs raised on main repo)
2
+
3
+ permissions:
4
+ actions: read
5
+ contents: read
6
+ pull-requests: write
7
+ concurrency:
8
+ group: ${{github.workflow}}-${{ github.event.pull_request.number }}
9
+ cancel-in-progress: true
10
+
11
+ on:
12
+ pull_request:
13
+ branches:
14
+ - main
15
+
16
+ jobs:
17
+ pr_jobs:
18
+ # github.event.pull_request object defined here: https://docs.github.com/en/rest/pulls/pulls?apiVersion=2026-03-10#get-a-pull-request
19
+ if: ${{ github.event.pull_request.head.repo.full_name == 'gitlabform/gitlabform' }}
20
+ uses: ./.github/workflows/prs.yml
21
+ permissions:
22
+ actions: read
23
+ contents: read
24
+ packages: read
25
+ pull-requests: write
26
+ security-events: write
27
+ with:
28
+ branch_ref: ${{ github.event.pull_request.head.sha }}
29
+ secrets: inherit