cici-tools 0.15.0__tar.gz → 0.16.1__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 (203) hide show
  1. cici_tools-0.16.1/.cici/README.md.j2 +97 -0
  2. {cici_tools-0.15.0 → cici_tools-0.16.1}/.gitlab-ci.yml +2 -2
  3. {cici_tools-0.15.0 → cici_tools-0.16.1}/.pre-commit-config.yaml +3 -3
  4. {cici_tools-0.15.0 → cici_tools-0.16.1}/PKG-INFO +1 -1
  5. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/_version.py +3 -3
  6. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/cli/bundle.py +35 -7
  7. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/cli/readme.py +4 -3
  8. cici_tools-0.16.1/cici/config/project/serializers.py +192 -0
  9. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/providers/gitlab/serializers.py +11 -17
  10. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici_tools.egg-info/PKG-INFO +1 -1
  11. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici_tools.egg-info/SOURCES.txt +50 -0
  12. {cici_tools-0.15.0 → cici_tools-0.16.1}/pyproject.toml +3 -0
  13. {cici_tools-0.15.0 → cici_tools-0.16.1}/requirements.txt +8 -8
  14. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/.gitlab-ci.yml +248 -0
  15. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/config.yaml +181 -0
  16. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-apply.yaml +4 -0
  17. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-auto-apply.yaml +6 -0
  18. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-destroy.yaml +4 -0
  19. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-plan.yaml +4 -0
  20. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-validate.yaml +4 -0
  21. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-fmt.yaml +4 -0
  22. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-module-build.yaml +3 -0
  23. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-module-release.yaml +3 -0
  24. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-apply.yaml +4 -0
  25. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-auto-apply.yaml +6 -0
  26. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-destroy.yaml +4 -0
  27. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-plan.yaml +4 -0
  28. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-trivy.yaml +4 -0
  29. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-validate.yaml +4 -0
  30. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-apply.yaml +4 -0
  31. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-auto-apply.yaml +6 -0
  32. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-destroy.yaml +4 -0
  33. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-plan.yaml +4 -0
  34. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-trivy.yaml +4 -0
  35. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-validate.yaml +4 -0
  36. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-trivy.yaml +4 -0
  37. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-validate.yaml +4 -0
  38. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/.cici/targets/tofu-development-trivy.yaml +4 -0
  39. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-development-apply.yml +59 -0
  40. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-development-auto-apply.yml +64 -0
  41. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-development-destroy.yml +59 -0
  42. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-development-plan.yml +62 -0
  43. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-development-trivy.yml +57 -0
  44. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-development-validate.yml +52 -0
  45. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-fmt.yml +41 -0
  46. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-module-build.yml +58 -0
  47. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-module-release.yml +42 -0
  48. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-production-apply.yml +59 -0
  49. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-production-auto-apply.yml +64 -0
  50. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-production-destroy.yml +59 -0
  51. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-production-plan.yml +62 -0
  52. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-production-trivy.yml +57 -0
  53. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-production-validate.yml +52 -0
  54. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-staging-apply.yml +59 -0
  55. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-staging-auto-apply.yml +64 -0
  56. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-staging-destroy.yml +59 -0
  57. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-staging-plan.yml +62 -0
  58. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-staging-trivy.yml +57 -0
  59. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-staging-validate.yml +52 -0
  60. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-trivy.yml +57 -0
  61. cici_tools-0.16.1/tests/fixtures/gitlab/targets-dir/opentofu-validate.yml +52 -0
  62. cici_tools-0.16.1/tests/test_resolve_targets.py +209 -0
  63. cici_tools-0.15.0/cici/config/project/serializers.py +0 -107
  64. {cici_tools-0.15.0 → cici_tools-0.16.1}/.cici/.gitlab-ci.yml +0 -0
  65. {cici_tools-0.15.0 → cici_tools-0.16.1}/.cici/config.yaml +0 -0
  66. {cici_tools-0.15.0 → cici_tools-0.16.1}/.dockerignore +0 -0
  67. {cici_tools-0.15.0 → cici_tools-0.16.1}/.gitignore +0 -0
  68. {cici_tools-0.15.0 → cici_tools-0.16.1}/.licenserc.yaml +0 -0
  69. {cici_tools-0.15.0 → cici_tools-0.16.1}/.pre-commit-hooks.yaml +0 -0
  70. {cici_tools-0.15.0 → cici_tools-0.16.1}/.prettierignore +0 -0
  71. {cici_tools-0.15.0 → cici_tools-0.16.1}/.prettierrc.yaml +0 -0
  72. {cici_tools-0.15.0 → cici_tools-0.16.1}/.secrets.baseline +0 -0
  73. {cici_tools-0.15.0 → cici_tools-0.16.1}/Dockerfile +0 -0
  74. {cici_tools-0.15.0 → cici_tools-0.16.1}/LICENSE +0 -0
  75. {cici_tools-0.15.0 → cici_tools-0.16.1}/MANIFEST.in +0 -0
  76. {cici_tools-0.15.0 → cici_tools-0.16.1}/NOTICE +0 -0
  77. {cici_tools-0.15.0 → cici_tools-0.16.1}/README.md +0 -0
  78. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/__init__.py +0 -0
  79. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/__main__.py +0 -0
  80. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/cli/__init__.py +0 -0
  81. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/cli/schema.py +0 -0
  82. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/cli/update.py +0 -0
  83. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/config/__init__.py +0 -0
  84. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/config/project/__init__.py +0 -0
  85. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/config/project/models.py +0 -0
  86. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/config/user.py +0 -0
  87. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/constants.py +0 -0
  88. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/exceptions.py +0 -0
  89. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/main.py +0 -0
  90. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/paths.py +0 -0
  91. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/providers/__init__.py +0 -0
  92. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/providers/gitlab/__init__.py +0 -0
  93. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/providers/gitlab/constants.py +0 -0
  94. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/providers/gitlab/models.py +0 -0
  95. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/providers/gitlab/normalizers.py +0 -0
  96. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/providers/gitlab/utils.py +0 -0
  97. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/providers/gitlab/yaml_style.py +0 -0
  98. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/py.typed +0 -0
  99. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/schema/LICENSE.gitlab +0 -0
  100. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/schema/__init__.py +0 -0
  101. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/schema/gitlab-ci.json +0 -0
  102. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/README.md.j2 +0 -0
  103. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/__init__.py +0 -0
  104. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/brief.md.j2 +0 -0
  105. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/description.md.j2 +0 -0
  106. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/group-list.j2 +0 -0
  107. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/groups.md.j2 +0 -0
  108. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/target-list.md.j2 +0 -0
  109. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/target-table.md.j2 +0 -0
  110. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/targets.md.j2 +0 -0
  111. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/variable-list.md.j2 +0 -0
  112. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/templates/variables.md.j2 +0 -0
  113. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici/utils.py +0 -0
  114. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici-bundle.yml +0 -0
  115. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici-readme.yml +0 -0
  116. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici-update.yml +0 -0
  117. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici_tools.egg-info/dependency_links.txt +0 -0
  118. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici_tools.egg-info/entry_points.txt +0 -0
  119. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici_tools.egg-info/requires.txt +0 -0
  120. {cici_tools-0.15.0 → cici_tools-0.16.1}/cici_tools.egg-info/top_level.txt +0 -0
  121. {cici_tools-0.15.0 → cici_tools-0.16.1}/docs/bundle.md +0 -0
  122. {cici_tools-0.15.0 → cici_tools-0.16.1}/docs/config-file.md +0 -0
  123. {cici_tools-0.15.0 → cici_tools-0.16.1}/docs/getting-started.md +0 -0
  124. {cici_tools-0.15.0 → cici_tools-0.16.1}/docs/gitlab-includes.md +0 -0
  125. {cici_tools-0.15.0 → cici_tools-0.16.1}/docs/index.md +0 -0
  126. {cici_tools-0.15.0 → cici_tools-0.16.1}/docs/install.md +0 -0
  127. {cici_tools-0.15.0 → cici_tools-0.16.1}/docs/readme.md +0 -0
  128. {cici_tools-0.15.0 → cici_tools-0.16.1}/docs/style.css +0 -0
  129. {cici_tools-0.15.0 → cici_tools-0.16.1}/docs/update.md +0 -0
  130. {cici_tools-0.15.0 → cici_tools-0.16.1}/makefile +0 -0
  131. {cici_tools-0.15.0 → cici_tools-0.16.1}/mkdocs.yml +0 -0
  132. {cici_tools-0.15.0 → cici_tools-0.16.1}/scripts/gen-api-doc.py +0 -0
  133. {cici_tools-0.15.0 → cici_tools-0.16.1}/setup.cfg +0 -0
  134. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/extends/.cici/.gitlab-ci.yml +0 -0
  135. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/extends/simple-job.yml +0 -0
  136. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/helm/.cici/.gitlab-ci.yml +0 -0
  137. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/helm/helm-cm-push.yml +0 -0
  138. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/helm/helm-docs.yml +0 -0
  139. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/helm/helm-lint.yml +0 -0
  140. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/.cici/.gitlab-ci.yml +0 -0
  141. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/.cici/config.yaml +0 -0
  142. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-development-apply.yml +0 -0
  143. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-development-auto-apply.yml +0 -0
  144. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-development-destroy.yml +0 -0
  145. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-development-plan.yml +0 -0
  146. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-development-trivy.yml +0 -0
  147. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-development-validate.yml +0 -0
  148. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-fmt.yml +0 -0
  149. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-module-build.yml +0 -0
  150. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-module-release.yml +0 -0
  151. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-production-apply.yml +0 -0
  152. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-production-auto-apply.yml +0 -0
  153. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-production-destroy.yml +0 -0
  154. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-production-plan.yml +0 -0
  155. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-production-trivy.yml +0 -0
  156. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-production-validate.yml +0 -0
  157. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-staging-apply.yml +0 -0
  158. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-staging-auto-apply.yml +0 -0
  159. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-staging-destroy.yml +0 -0
  160. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-staging-plan.yml +0 -0
  161. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-staging-trivy.yml +0 -0
  162. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-staging-validate.yml +0 -0
  163. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-trivy.yml +0 -0
  164. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/job-variables/opentofu-validate.yml +0 -0
  165. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/library-validator/.cici/README.md.j2 +0 -0
  166. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/library-validator/.cici/config.yaml +0 -0
  167. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/library-validator/README.md +0 -0
  168. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/list-anchors/.cici/.gitlab-ci.yml +0 -0
  169. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/list-anchors/install.yml +0 -0
  170. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/nested-extends/.cici/.gitlab-ci.yml +0 -0
  171. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/nested-extends/simple-job.yml +0 -0
  172. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/reports/.cici/.gitlab-ci.yml +0 -0
  173. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/reports/reports-container-scanning.yml +0 -0
  174. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/reports/reports-coverage.yml +0 -0
  175. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/reports/reports-junit.yml +0 -0
  176. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/reports/reports-terraform.yml +0 -0
  177. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/.cici/.gitlab-ci.yml +0 -0
  178. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/.cici/config.yaml +0 -0
  179. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-docker-multiarch-amd64.yml +0 -0
  180. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-docker-multiarch-arm32v6.yml +0 -0
  181. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-docker-multiarch-arm32v7.yml +0 -0
  182. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-docker-multiarch-arm64v8.yml +0 -0
  183. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-docker-multiarch-i386.yml +0 -0
  184. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-docker-multiarch-manifest.yml +0 -0
  185. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-docker-multiarch.yml +0 -0
  186. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-docker.yml +0 -0
  187. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-hadolint.yml +0 -0
  188. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/service-key/container-trivy.yml +0 -0
  189. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/simple/.cici/.gitlab-ci.yml +0 -0
  190. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/simple/simple-job.yml +0 -0
  191. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/stages/.cici/.gitlab-ci.yml +0 -0
  192. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/stages/simple-job.yml +0 -0
  193. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/terraform/.cici/.gitlab-ci.yml +0 -0
  194. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/terraform/terraform-fmt.yml +0 -0
  195. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/terraform/terraform-production-apply.yml +0 -0
  196. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/terraform/terraform-production-plan.yml +0 -0
  197. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/terraform/terraform-staging-apply.yml +0 -0
  198. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/terraform/terraform-staging-destroy.yml +0 -0
  199. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/variables/.cici/.gitlab-ci.yml +0 -0
  200. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/fixtures/gitlab/variables/simple-job.yml +0 -0
  201. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/test_build.py +0 -0
  202. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/test_cli.py +0 -0
  203. {cici_tools-0.15.0 → cici_tools-0.16.1}/tests/test_import.py +0 -0
@@ -0,0 +1,97 @@
1
+ # cici pipeline
2
+
3
+ Build and publish CI/CD pipeline components with cici.
4
+
5
+ cici, short for Continuous Integration Catalog Interface, is a framework and
6
+ toolkit for managing the integration and lifecycle of packaged CI/CD
7
+ components in a software delivery pipeline.
8
+
9
+ cici enables the efficient sharing of CI/CD code in an organization, and
10
+ eliminates a major source of friction that otherwise leads to poor adoption of
11
+ automation and DevOps practices.
12
+
13
+ cici is a foundational component of [saferatday0](https://saferatday0.dev/)
14
+ and powers the [saferatday0 library](https://gitlab.com/saferatday0/library).
15
+
16
+ ## Targets
17
+
18
+ | Name | [GitLab include](https://docs.gitlab.com/ee/ci/yaml/includes.html) | [pre-commit hook](https://pre-commit.com/) | Description |
19
+ | ----- | ------- | ---- | ----------- |
20
+ | [cici-bundle](#cici-bundle) | ✓ | ✓ | Bundle GitLab CI/CD includes into single files. |
21
+ | [cici-readme](#cici-readme) | ✓ | ✓ | Generate READMEs for CI pipelines. |
22
+ | [cici-update](#cici-update) | ✓ | ✓ | Update GitLab CI/CD includes to latest released versions. |
23
+
24
+ ### `cici-bundle`
25
+
26
+ Bundle GitLab CI/CD includes into single files.
27
+
28
+ As a GitLab include:
29
+
30
+ ```yaml
31
+ # .gitlab-ci.yml
32
+ include:
33
+ - project: saferatday0/cici
34
+ file:
35
+ - cici-bundle.yml
36
+ ```
37
+
38
+ As a pre-commit hook:
39
+
40
+ ```yaml
41
+ # .pre-commit-config.yaml
42
+ repos:
43
+ - repo: https://gitlab.com/saferatday0/cici
44
+ rev: ""
45
+ hooks:
46
+ - id: cici-bundle
47
+ ```
48
+
49
+ ### `cici-readme`
50
+
51
+ Generate READMEs for CI pipelines.
52
+
53
+ As a GitLab include:
54
+
55
+ ```yaml
56
+ # .gitlab-ci.yml
57
+ include:
58
+ - project: saferatday0/cici
59
+ file:
60
+ - cici-readme.yml
61
+ ```
62
+
63
+ As a pre-commit hook:
64
+
65
+ ```yaml
66
+ # .pre-commit-config.yaml
67
+ repos:
68
+ - repo: https://gitlab.com/saferatday0/cici
69
+ rev: ""
70
+ hooks:
71
+ - id: cici-readme
72
+ ```
73
+
74
+ ### `cici-update`
75
+
76
+ Update GitLab CI/CD includes to latest released versions.
77
+
78
+ As a GitLab include:
79
+
80
+ ```yaml
81
+ # .gitlab-ci.yml
82
+ include:
83
+ - project: saferatday0/cici
84
+ file:
85
+ - cici-update.yml
86
+ ```
87
+
88
+ As a pre-commit hook:
89
+
90
+ ```yaml
91
+ # .pre-commit-config.yaml
92
+ repos:
93
+ - repo: https://gitlab.com/saferatday0/cici
94
+ rev: ""
95
+ hooks:
96
+ - id: cici-update
97
+ ```
@@ -16,7 +16,7 @@ include:
16
16
  - local: cici-bundle.yml
17
17
  - local: cici-update.yml
18
18
  - project: saferatday0/library/container
19
- ref: 0.7.3
19
+ ref: 0.8.1
20
20
  file:
21
21
  - container-docker.yml
22
22
  - container-hadolint.yml
@@ -29,7 +29,7 @@ include:
29
29
  file:
30
30
  - gitlab-release.yml
31
31
  - project: saferatday0/library/mkdocs
32
- ref: 0.6.1
32
+ ref: 0.6.2
33
33
  file:
34
34
  - mkdocs-build.yml
35
35
  - project: saferatday0/library/pages
@@ -30,7 +30,7 @@ repos:
30
30
  ]
31
31
 
32
32
  - repo: https://gitlab.com/saferatday0/library/container
33
- rev: "0.7.3"
33
+ rev: "0.8.1"
34
34
  hooks:
35
35
  - id: container-hadolint
36
36
 
@@ -72,8 +72,8 @@ repos:
72
72
  pass_filenames: false
73
73
  always_run: true
74
74
 
75
- - repo: https://gitlab.com/saferatday0/library/skywalking-eyes
76
- rev: "0.8.3"
75
+ - repo: https://gitlab.com/saferatday0/library/license-eye
76
+ rev: "0.9.0"
77
77
  hooks:
78
78
  - id: license-eye-header-fix
79
79
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cici-tools
3
- Version: 0.15.0
3
+ Version: 0.16.1
4
4
  Summary: Continuous Integration Catalog Interface
5
5
  Author-email: Digital Safety Research Institute <contact@dsri.org>
6
6
  License: Apache-2.0
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.15.0'
32
- __version_tuple__ = version_tuple = (0, 15, 0)
31
+ __version__ = version = '0.16.1'
32
+ __version_tuple__ = version_tuple = (0, 16, 1)
33
33
 
34
- __commit_id__ = commit_id = 'g858d2662b'
34
+ __commit_id__ = commit_id = 'gcf94f688a'
@@ -1,18 +1,22 @@
1
1
  # SPDX-FileCopyrightText: UL Research Institutes
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
+
4
5
  import logging
5
6
  import re
6
7
  from importlib import import_module
7
8
  from io import StringIO
8
9
  from pathlib import Path
10
+ from typing import Optional
9
11
 
10
12
  from msgspec.structs import replace
11
13
  from termcolor import colored
12
14
 
13
- from ..config.project.serializers import load as load_cici_config
15
+ from cici.config.project import models as cici_config
16
+ from cici.config.project import serializers as cici_config_serializers
17
+
14
18
  from ..constants import DEFAULT_PROVIDER
15
- from ..paths import get_cici_config_file_path, get_cici_config_path
19
+ from ..paths import get_cici_config_path
16
20
 
17
21
 
18
22
  def get_bundle_name(text):
@@ -34,16 +38,40 @@ def get_bundle_content(provider, bundle, cici_config_file=None):
34
38
  return content.getvalue()
35
39
 
36
40
 
41
+ def load_cici_or_nothing(base_path: Path) -> Optional[cici_config.File]:
42
+ # try to load and resolve .cici/config.yaml
43
+ # - if config.yaml is there, load it, if not load nothing
44
+ # - if config.yaml does not exist return None
45
+
46
+ base_path = Path(base_path).resolve()
47
+
48
+ if base_path.name == ".cici":
49
+ base_path = base_path.parent
50
+
51
+ config_path_root = base_path / ".cici" / "config.yaml"
52
+
53
+ # load config.yaml if it exists
54
+ config_path = None
55
+ if config_path_root.exists():
56
+ config_path = config_path_root
57
+
58
+ if config_path:
59
+ config_file = cici_config_serializers.load(config_path)
60
+ # if load() succeeds then resove targets
61
+ return cici_config_serializers.resolve_targets(config_file, config_path)
62
+
63
+ return None
64
+
65
+
37
66
  def bundle_command(parser, args):
38
67
  logging.basicConfig(level=logging.INFO, format="[%(levelname)s] %(message)s")
39
68
 
40
69
  provider = import_module(f".{DEFAULT_PROVIDER}", "cici.providers")
41
70
 
42
- # preserve backwards compatibility (i.e. no .cici/config.yaml)
43
- try:
44
- cici_config_file = load_cici_config(get_cici_config_file_path())
45
- except FileNotFoundError:
46
- cici_config_file = None
71
+ cici_config_file = load_cici_or_nothing(args.config_path)
72
+
73
+ if not cici_config_file:
74
+ logging.warning(f"No config.yaml found in .cici")
47
75
 
48
76
  ci_file_path = args.config_path / provider.CI_FILE
49
77
 
@@ -14,8 +14,9 @@ from ..constants import TEMPLATE_DIR
14
14
  from ..paths import (
15
15
  get_cici_config_file_path,
16
16
  get_cici_config_gitlab_ci_file_path,
17
- get_cici_config_readme_template_path,
17
+ get_cici_config_path,
18
18
  get_pre_commit_hooks_path,
19
+ get_readme_path,
19
20
  )
20
21
  from ..providers.gitlab.utils import get_job_names
21
22
 
@@ -49,7 +50,7 @@ def readme_command(parser, args):
49
50
  environment = Environment(
50
51
  loader=FileSystemLoader(
51
52
  [
52
- get_cici_config_file_path(),
53
+ get_cici_config_path(),
53
54
  TEMPLATE_DIR,
54
55
  ]
55
56
  ),
@@ -80,7 +81,7 @@ def readme_parser(subparsers):
80
81
  "-o",
81
82
  "--output",
82
83
  dest="output_file",
83
- default=get_cici_config_readme_template_path(),
84
+ default=get_readme_path(),
84
85
  )
85
86
  parser.add_argument(
86
87
  "-c",
@@ -0,0 +1,192 @@
1
+ # SPDX-FileCopyrightText: UL Research Institutes
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ # Loads .cici/config.yaml
5
+ # Defines targes, variables and metadata about the project.
6
+
7
+
8
+ import logging
9
+ import re
10
+ from pathlib import Path
11
+ from typing import Any, Optional, Union
12
+
13
+ import msgspec
14
+ import ruamel.yaml
15
+ from msgspec.structs import replace
16
+
17
+ from . import models as cici_config
18
+
19
+ decoder = msgspec.json.Decoder(type=cici_config.File)
20
+ target_decoder = msgspec.json.Decoder(type=cici_config.Target)
21
+ image_fqdn_regex = re.compile(r"^[\w\.-]+/")
22
+
23
+
24
+ # make sure each variable has its 'name' field set from its key
25
+ def inject_variable_names(variables: dict[str, Union[str, dict]]) -> dict[str, dict]:
26
+ patched = {}
27
+ for key, value in variables.items():
28
+ if isinstance(value, str):
29
+ value = {"value": value}
30
+ # if value is None or not a dict, treat it as empty dict
31
+ if not isinstance(value, dict):
32
+ raise TypeError(f"Expected dict for variable {key}, got {type(value)}")
33
+ # only add name if missing
34
+ value.setdefault("name", key)
35
+ patched[key] = value
36
+ return patched
37
+
38
+
39
+ def load_targets_from_dir(target_dir: Path) -> list[cici_config.Target]:
40
+ if not target_dir.exists() or not target_dir.is_dir():
41
+ return []
42
+
43
+ yaml = ruamel.yaml.YAML(typ="safe")
44
+ targets: list[cici_config.Target] = []
45
+
46
+ # checking for .yaml
47
+ for file in sorted(target_dir.glob("*.yaml")):
48
+ try:
49
+ with open(file, "r", encoding="utf-8") as f:
50
+ data = yaml.load(f) or {}
51
+
52
+ # make sure name exists before decoding
53
+ data.setdefault("name", file.stem)
54
+
55
+ # decode using msgspec for validation and type safety
56
+ target_obj = target_decoder.decode(msgspec.json.encode(data))
57
+ targets.append(target_obj)
58
+
59
+ except msgspec.ValidationError as e:
60
+ logging.warning(f"Validation failed for {file.name}: {e}")
61
+ except Exception as e:
62
+ logging.warning(f"Failed to load target {file.name}: {e}")
63
+
64
+ logging.info(f"Loaded {len(targets)} valid targets from {target_dir}")
65
+ return targets
66
+
67
+
68
+ def resolve_targets(
69
+ cici_config_file: Optional[cici_config.File], config_path: Path
70
+ ) -> Optional[cici_config.File]:
71
+ # Resolve and merge targets from .cici/config.yaml and from .cici/targets/*.yaml
72
+
73
+ # - Directory targets override config.yaml targets with the same name
74
+ # - If no targets dir exists, use the targets defined in the config.yaml
75
+ # - returns updated 'cici_config.File' with merged targets
76
+
77
+ if not cici_config_file:
78
+ return None
79
+
80
+ # get directory that could exist targets
81
+ targets_dir = config_path.parent / "targets"
82
+
83
+ # get targets from config.yaml
84
+ config_targets: list[cici_config.Target] = list(cici_config_file.targets)
85
+
86
+ # load targets from '.cici/targets/' if there are any
87
+ dir_targets: list[cici_config.Target] = []
88
+ if targets_dir.exists() and any(targets_dir.glob("*.yaml")):
89
+ logging.info(f"loading targets from directory: {targets_dir}")
90
+ dir_targets = load_targets_from_dir(targets_dir)
91
+
92
+ # combine all targets
93
+ all_targets = list(config_targets) + list(dir_targets)
94
+
95
+ # get target names
96
+ target_names = [
97
+ target.name for target in all_targets if getattr(target, "name", None)
98
+ ]
99
+
100
+ # check duplicates
101
+ if len(target_names) != len(set(target_names)):
102
+ raise ValueError(
103
+ f"Duplicate target names found: {', '.join(sorted(target_names))}"
104
+ )
105
+
106
+ # create new file with merged target list
107
+ resolved_file = replace(cici_config_file, targets=all_targets)
108
+ return resolved_file
109
+
110
+
111
+ def patch_image(image: str, container_proxy: str = "${CONTAINER_PROXY}") -> str:
112
+ """Patch in $CONTAINER_PROXY to image unless the following are true:
113
+
114
+ A: Does the image URL contain ${CONTAINER_PROXY} (the literal string)
115
+ B: Is the image URL a fully-qualified container URL?
116
+ C: Does the image already start with a variable?
117
+ """
118
+
119
+ if not image:
120
+ return image
121
+ if container_proxy in image:
122
+ return image
123
+
124
+ if image_fqdn_regex.match(image):
125
+ return image
126
+
127
+ if image.startswith("$"):
128
+ return image
129
+
130
+ return f"{container_proxy}{image}"
131
+
132
+
133
+ def loads(
134
+ text: str,
135
+ gitlab_ci_jobs: Optional[dict[str, Any]] = None,
136
+ precommit_hooks: Optional[dict[str, Any]] = None,
137
+ ) -> cici_config.File:
138
+ # parse YAML into fully-typed File object
139
+ if gitlab_ci_jobs is None:
140
+ gitlab_ci_jobs = {}
141
+ if precommit_hooks is None:
142
+ precommit_hooks = {}
143
+
144
+ yaml = ruamel.yaml.YAML(typ="safe")
145
+ data = yaml.load(text)
146
+
147
+ # verify targets exists even if empty
148
+ data.setdefault("targets", [])
149
+
150
+ # Inject precommit/gitlab includes into each target
151
+
152
+ # Debug to test injection
153
+ # print("Before injection:", data["targets"])
154
+
155
+ for target in data["targets"]:
156
+ target["precommit_hook"] = {"name": target["name"]}
157
+ target["gitlab_include"] = {"name": target["name"]}
158
+
159
+ # Debug to test injection
160
+ # print("After injection:", data["targets"])
161
+
162
+ if "variables" in data:
163
+ data["variables"] = inject_variable_names(data["variables"])
164
+
165
+ # decode into file_struct
166
+ file_struct = decoder.decode(msgspec.json.encode(data))
167
+
168
+ # post process to patch CONTAINER_PROXY to container images
169
+ patched_targets = []
170
+ for target in file_struct.targets:
171
+ if target.container is not None:
172
+ patched_container = replace(
173
+ target.container,
174
+ image=patch_image(target.container.image),
175
+ )
176
+ patched_targets.append(replace(target, container=patched_container))
177
+ else:
178
+ patched_targets.append(target)
179
+
180
+ return replace(file_struct, targets=patched_targets)
181
+
182
+
183
+ def load(
184
+ file: Union[str, Path],
185
+ gitlab_ci_jobs: Optional[dict[str, Any]] = None,
186
+ precommit_hooks: Optional[dict[str, Any]] = None,
187
+ ) -> cici_config.File:
188
+ return loads(
189
+ open(file).read(),
190
+ gitlab_ci_jobs=gitlab_ci_jobs,
191
+ precommit_hooks=precommit_hooks,
192
+ )
@@ -1,6 +1,8 @@
1
1
  # SPDX-FileCopyrightText: UL Research Institutes
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ # Loads and serializes .gitlab-ci.yml and CI job definitions
5
+
4
6
  import io
5
7
  import typing
6
8
  from pathlib import Path
@@ -249,41 +251,33 @@ def loads(
249
251
  yaml = ruamel.yaml.YAML()
250
252
  data = yaml.load(text)
251
253
 
252
- # 1. Normalize scalars
254
+ # Normalize scalars
253
255
  data = normalize_scalars(data)
254
256
 
255
- # 2. merge top-level config variables
257
+ # merge top-level config variables
256
258
  if cici_config_file:
257
259
  data = add_config_variables(data, cici_config_file=cici_config_file)
258
260
 
259
- # DEBUG
260
- # print("CONFIG FILE TYPE:", type(cici_config_file))
261
- # print("CONFIG FILE CONTENT:", getattr(cici_config_file, "variables", None))
262
-
263
- # 4. normalize jobs
261
+ # normalize jobs
264
262
  data = normalize_jobs_in_data(data)
265
263
 
266
- # 5. normalize variables format
264
+ # normalize variables format
267
265
  data = normalize_variables(data)
268
266
 
269
- # 6. inject variable names
267
+ # inject variable names
270
268
  if "variables" in data:
271
269
  data["variables"] = inject_variable_names(data["variables"])
272
270
 
273
- # 7. pack the jobs
271
+ # pack the jobs
274
272
  data = pack_jobs(data)
275
273
 
276
- # DEBUG
277
- # print("Keys at top level before decode:", data.keys())
278
- # print("Variables at top level:", data.get("variables"))
279
-
280
- # 8. decode into msgspec struct
274
+ # decode into msgspec struct
281
275
  file_struct = decode_file(data)
282
276
 
283
- # 9. expand extends and anchors
277
+ # expand extends and anchors
284
278
  file_struct = expand_jobs(file_struct)
285
279
 
286
- # 10. inject container defaults
280
+ # inject container defaults
287
281
  return inject_container_into_job(file_struct, cici_config_file)
288
282
 
289
283
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cici-tools
3
- Version: 0.15.0
3
+ Version: 0.16.1
4
4
  Summary: Continuous Integration Catalog Interface
5
5
  Author-email: Digital Safety Research Institute <contact@dsri.org>
6
6
  License: Apache-2.0
@@ -20,6 +20,7 @@ mkdocs.yml
20
20
  pyproject.toml
21
21
  requirements.txt
22
22
  .cici/.gitlab-ci.yml
23
+ .cici/README.md.j2
23
24
  .cici/config.yaml
24
25
  cici/__init__.py
25
26
  cici/__main__.py
@@ -81,6 +82,7 @@ scripts/gen-api-doc.py
81
82
  tests/test_build.py
82
83
  tests/test_cli.py
83
84
  tests/test_import.py
85
+ tests/test_resolve_targets.py
84
86
  tests/fixtures/gitlab/extends/simple-job.yml
85
87
  tests/fixtures/gitlab/extends/.cici/.gitlab-ci.yml
86
88
  tests/fixtures/gitlab/helm/helm-cm-push.yml
@@ -140,6 +142,54 @@ tests/fixtures/gitlab/simple/simple-job.yml
140
142
  tests/fixtures/gitlab/simple/.cici/.gitlab-ci.yml
141
143
  tests/fixtures/gitlab/stages/simple-job.yml
142
144
  tests/fixtures/gitlab/stages/.cici/.gitlab-ci.yml
145
+ tests/fixtures/gitlab/targets-dir/opentofu-development-apply.yml
146
+ tests/fixtures/gitlab/targets-dir/opentofu-development-auto-apply.yml
147
+ tests/fixtures/gitlab/targets-dir/opentofu-development-destroy.yml
148
+ tests/fixtures/gitlab/targets-dir/opentofu-development-plan.yml
149
+ tests/fixtures/gitlab/targets-dir/opentofu-development-trivy.yml
150
+ tests/fixtures/gitlab/targets-dir/opentofu-development-validate.yml
151
+ tests/fixtures/gitlab/targets-dir/opentofu-fmt.yml
152
+ tests/fixtures/gitlab/targets-dir/opentofu-module-build.yml
153
+ tests/fixtures/gitlab/targets-dir/opentofu-module-release.yml
154
+ tests/fixtures/gitlab/targets-dir/opentofu-production-apply.yml
155
+ tests/fixtures/gitlab/targets-dir/opentofu-production-auto-apply.yml
156
+ tests/fixtures/gitlab/targets-dir/opentofu-production-destroy.yml
157
+ tests/fixtures/gitlab/targets-dir/opentofu-production-plan.yml
158
+ tests/fixtures/gitlab/targets-dir/opentofu-production-trivy.yml
159
+ tests/fixtures/gitlab/targets-dir/opentofu-production-validate.yml
160
+ tests/fixtures/gitlab/targets-dir/opentofu-staging-apply.yml
161
+ tests/fixtures/gitlab/targets-dir/opentofu-staging-auto-apply.yml
162
+ tests/fixtures/gitlab/targets-dir/opentofu-staging-destroy.yml
163
+ tests/fixtures/gitlab/targets-dir/opentofu-staging-plan.yml
164
+ tests/fixtures/gitlab/targets-dir/opentofu-staging-trivy.yml
165
+ tests/fixtures/gitlab/targets-dir/opentofu-staging-validate.yml
166
+ tests/fixtures/gitlab/targets-dir/opentofu-trivy.yml
167
+ tests/fixtures/gitlab/targets-dir/opentofu-validate.yml
168
+ tests/fixtures/gitlab/targets-dir/.cici/.gitlab-ci.yml
169
+ tests/fixtures/gitlab/targets-dir/.cici/config.yaml
170
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-apply.yaml
171
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-auto-apply.yaml
172
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-destroy.yaml
173
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-plan.yaml
174
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-validate.yaml
175
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-fmt.yaml
176
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-module-build.yaml
177
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-module-release.yaml
178
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-apply.yaml
179
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-auto-apply.yaml
180
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-destroy.yaml
181
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-plan.yaml
182
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-trivy.yaml
183
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-validate.yaml
184
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-apply.yaml
185
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-auto-apply.yaml
186
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-destroy.yaml
187
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-plan.yaml
188
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-trivy.yaml
189
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-validate.yaml
190
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-trivy.yaml
191
+ tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-validate.yaml
192
+ tests/fixtures/gitlab/targets-dir/.cici/targets/tofu-development-trivy.yaml
143
193
  tests/fixtures/gitlab/terraform/terraform-fmt.yml
144
194
  tests/fixtures/gitlab/terraform/terraform-production-apply.yml
145
195
  tests/fixtures/gitlab/terraform/terraform-production-plan.yml
@@ -64,6 +64,9 @@ cici = "cici.__main__:main"
64
64
  [tool.isort]
65
65
  profile = "black"
66
66
 
67
+ [tool.mypy]
68
+ python_version = "3.10"
69
+
67
70
  [tool.setuptools.package-data]
68
71
  "cici" = ["py.typed"]
69
72
 
@@ -2,7 +2,7 @@
2
2
  # uv pip compile --python-version 3.11 -o requirements.txt pyproject.toml
3
3
  appdirs==1.4.4
4
4
  # via cici-tools (pyproject.toml)
5
- attrs==25.3.0
5
+ attrs==25.4.0
6
6
  # via
7
7
  # jsonschema
8
8
  # referencing
@@ -12,27 +12,27 @@ jsonschema==4.25.1
12
12
  # via cici-tools (pyproject.toml)
13
13
  jsonschema-specifications==2025.9.1
14
14
  # via jsonschema
15
- markdown==3.9
15
+ markdown==3.10
16
16
  # via cici-tools (pyproject.toml)
17
17
  markupsafe==3.0.3
18
18
  # via jinja2
19
- msgspec==0.19.0
19
+ msgspec==0.20.0
20
20
  # via cici-tools (pyproject.toml)
21
21
  python-decouple==3.8
22
22
  # via cici-tools (pyproject.toml)
23
- referencing==0.36.2
23
+ referencing==0.37.0
24
24
  # via
25
25
  # jsonschema
26
26
  # jsonschema-specifications
27
- rpds-py==0.27.1
27
+ rpds-py==0.30.0
28
28
  # via
29
29
  # jsonschema
30
30
  # referencing
31
- ruamel-yaml==0.18.15
31
+ ruamel-yaml==0.18.17
32
32
  # via cici-tools (pyproject.toml)
33
- ruamel-yaml-clib==0.2.14
33
+ ruamel-yaml-clib==0.2.15
34
34
  # via ruamel-yaml
35
- termcolor==3.1.0
35
+ termcolor==3.3.0
36
36
  # via cici-tools (pyproject.toml)
37
37
  typing-extensions==4.15.0
38
38
  # via referencing