cici-tools 0.17.1__tar.gz → 0.18.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 (205) hide show
  1. {cici_tools-0.17.1 → cici_tools-0.18.0}/.gitlab-ci.yml +1 -1
  2. {cici_tools-0.17.1/cici_tools.egg-info → cici_tools-0.18.0}/PKG-INFO +1 -1
  3. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/_version.py +3 -3
  4. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/providers/gitlab/serializers.py +11 -1
  5. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/providers/gitlab/yaml_style.py +12 -3
  6. {cici_tools-0.17.1 → cici_tools-0.18.0/cici_tools.egg-info}/PKG-INFO +1 -1
  7. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici_tools.egg-info/SOURCES.txt +1 -0
  8. {cici_tools-0.17.1 → cici_tools-0.18.0}/pyproject.toml +1 -0
  9. {cici_tools-0.17.1 → cici_tools-0.18.0}/requirements.txt +1 -1
  10. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/helm/helm-cm-push.yml +3 -4
  11. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/helm/helm-docs.yml +2 -3
  12. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/helm/helm-lint.yml +2 -1
  13. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-development-trivy.yml +2 -3
  14. {cici_tools-0.17.1/tests/fixtures/gitlab/targets-dir → cici_tools-0.18.0/tests/fixtures/gitlab/job-variables}/opentofu-module-build.yml +4 -10
  15. {cici_tools-0.17.1/tests/fixtures/gitlab/targets-dir → cici_tools-0.18.0/tests/fixtures/gitlab/job-variables}/opentofu-production-trivy.yml +2 -3
  16. {cici_tools-0.17.1/tests/fixtures/gitlab/targets-dir → cici_tools-0.18.0/tests/fixtures/gitlab/job-variables}/opentofu-staging-trivy.yml +2 -3
  17. {cici_tools-0.17.1/tests/fixtures/gitlab/targets-dir → cici_tools-0.18.0/tests/fixtures/gitlab/job-variables}/opentofu-trivy.yml +2 -3
  18. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-docker-multiarch-amd64.yml +5 -8
  19. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-docker-multiarch-arm32v6.yml +5 -8
  20. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-docker-multiarch-arm32v7.yml +5 -8
  21. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-docker-multiarch-arm64v8.yml +5 -8
  22. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-docker-multiarch-i386.yml +5 -8
  23. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-docker-multiarch.yml +5 -8
  24. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-docker.yml +3 -5
  25. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-trivy.yml +6 -5
  26. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-development-trivy.yml +2 -3
  27. {cici_tools-0.17.1/tests/fixtures/gitlab/job-variables → cici_tools-0.18.0/tests/fixtures/gitlab/targets-dir}/opentofu-module-build.yml +4 -10
  28. {cici_tools-0.17.1/tests/fixtures/gitlab/job-variables → cici_tools-0.18.0/tests/fixtures/gitlab/targets-dir}/opentofu-production-trivy.yml +2 -3
  29. {cici_tools-0.17.1/tests/fixtures/gitlab/job-variables → cici_tools-0.18.0/tests/fixtures/gitlab/targets-dir}/opentofu-staging-trivy.yml +2 -3
  30. {cici_tools-0.17.1/tests/fixtures/gitlab/job-variables → cici_tools-0.18.0/tests/fixtures/gitlab/targets-dir}/opentofu-trivy.yml +2 -3
  31. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/test_precommit_hook_injection.py +2 -2
  32. cici_tools-0.18.0/tests/test_yaml_style.py +96 -0
  33. {cici_tools-0.17.1 → cici_tools-0.18.0}/.cici/.gitlab-ci.yml +0 -0
  34. {cici_tools-0.17.1 → cici_tools-0.18.0}/.cici/README.md.j2 +0 -0
  35. {cici_tools-0.17.1 → cici_tools-0.18.0}/.cici/config.yaml +0 -0
  36. {cici_tools-0.17.1 → cici_tools-0.18.0}/.dockerignore +0 -0
  37. {cici_tools-0.17.1 → cici_tools-0.18.0}/.gitignore +0 -0
  38. {cici_tools-0.17.1 → cici_tools-0.18.0}/.licenserc.yaml +0 -0
  39. {cici_tools-0.17.1 → cici_tools-0.18.0}/.pre-commit-config.yaml +0 -0
  40. {cici_tools-0.17.1 → cici_tools-0.18.0}/.pre-commit-hooks.yaml +0 -0
  41. {cici_tools-0.17.1 → cici_tools-0.18.0}/.prettierignore +0 -0
  42. {cici_tools-0.17.1 → cici_tools-0.18.0}/.prettierrc.yaml +0 -0
  43. {cici_tools-0.17.1 → cici_tools-0.18.0}/.secrets.baseline +0 -0
  44. {cici_tools-0.17.1 → cici_tools-0.18.0}/Dockerfile +0 -0
  45. {cici_tools-0.17.1 → cici_tools-0.18.0}/LICENSE +0 -0
  46. {cici_tools-0.17.1 → cici_tools-0.18.0}/MANIFEST.in +0 -0
  47. {cici_tools-0.17.1 → cici_tools-0.18.0}/NOTICE +0 -0
  48. {cici_tools-0.17.1 → cici_tools-0.18.0}/README.md +0 -0
  49. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/__init__.py +0 -0
  50. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/__main__.py +0 -0
  51. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/cli/__init__.py +0 -0
  52. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/cli/bundle.py +0 -0
  53. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/cli/readme.py +0 -0
  54. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/cli/schema.py +0 -0
  55. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/cli/update.py +0 -0
  56. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/config/__init__.py +0 -0
  57. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/config/project/__init__.py +0 -0
  58. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/config/project/models.py +0 -0
  59. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/config/project/serializers.py +0 -0
  60. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/config/user.py +0 -0
  61. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/constants.py +0 -0
  62. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/exceptions.py +0 -0
  63. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/main.py +0 -0
  64. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/paths.py +0 -0
  65. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/providers/__init__.py +0 -0
  66. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/providers/gitlab/__init__.py +0 -0
  67. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/providers/gitlab/constants.py +0 -0
  68. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/providers/gitlab/models.py +0 -0
  69. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/providers/gitlab/normalizers.py +0 -0
  70. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/providers/gitlab/utils.py +0 -0
  71. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/py.typed +0 -0
  72. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/schema/LICENSE.gitlab +0 -0
  73. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/schema/__init__.py +0 -0
  74. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/schema/gitlab-ci.json +0 -0
  75. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/README.md.j2 +0 -0
  76. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/__init__.py +0 -0
  77. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/brief.md.j2 +0 -0
  78. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/description.md.j2 +0 -0
  79. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/group-list.j2 +0 -0
  80. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/groups.md.j2 +0 -0
  81. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/target-list.md.j2 +0 -0
  82. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/target-table.md.j2 +0 -0
  83. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/targets.md.j2 +0 -0
  84. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/variable-list.md.j2 +0 -0
  85. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/templates/variables.md.j2 +0 -0
  86. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici/utils.py +0 -0
  87. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici-bundle.yml +0 -0
  88. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici-readme.yml +0 -0
  89. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici-update.yml +0 -0
  90. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici_tools.egg-info/dependency_links.txt +0 -0
  91. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici_tools.egg-info/entry_points.txt +0 -0
  92. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici_tools.egg-info/requires.txt +0 -0
  93. {cici_tools-0.17.1 → cici_tools-0.18.0}/cici_tools.egg-info/top_level.txt +0 -0
  94. {cici_tools-0.17.1 → cici_tools-0.18.0}/docs/bundle.md +0 -0
  95. {cici_tools-0.17.1 → cici_tools-0.18.0}/docs/config-file.md +0 -0
  96. {cici_tools-0.17.1 → cici_tools-0.18.0}/docs/getting-started.md +0 -0
  97. {cici_tools-0.17.1 → cici_tools-0.18.0}/docs/gitlab-includes.md +0 -0
  98. {cici_tools-0.17.1 → cici_tools-0.18.0}/docs/index.md +0 -0
  99. {cici_tools-0.17.1 → cici_tools-0.18.0}/docs/install.md +0 -0
  100. {cici_tools-0.17.1 → cici_tools-0.18.0}/docs/readme.md +0 -0
  101. {cici_tools-0.17.1 → cici_tools-0.18.0}/docs/style.css +0 -0
  102. {cici_tools-0.17.1 → cici_tools-0.18.0}/docs/update.md +0 -0
  103. {cici_tools-0.17.1 → cici_tools-0.18.0}/makefile +0 -0
  104. {cici_tools-0.17.1 → cici_tools-0.18.0}/mkdocs.yml +0 -0
  105. {cici_tools-0.17.1 → cici_tools-0.18.0}/scripts/gen-api-doc.py +0 -0
  106. {cici_tools-0.17.1 → cici_tools-0.18.0}/setup.cfg +0 -0
  107. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/extends/.cici/.gitlab-ci.yml +0 -0
  108. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/extends/simple-job.yml +0 -0
  109. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/helm/.cici/.gitlab-ci.yml +0 -0
  110. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/.cici/.gitlab-ci.yml +0 -0
  111. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/.cici/config.yaml +0 -0
  112. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-development-apply.yml +0 -0
  113. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-development-auto-apply.yml +0 -0
  114. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-development-destroy.yml +0 -0
  115. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-development-plan.yml +0 -0
  116. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-development-validate.yml +0 -0
  117. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-fmt.yml +0 -0
  118. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-module-release.yml +0 -0
  119. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-production-apply.yml +0 -0
  120. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-production-auto-apply.yml +0 -0
  121. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-production-destroy.yml +0 -0
  122. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-production-plan.yml +0 -0
  123. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-production-validate.yml +0 -0
  124. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-staging-apply.yml +0 -0
  125. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-staging-auto-apply.yml +0 -0
  126. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-staging-destroy.yml +0 -0
  127. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-staging-plan.yml +0 -0
  128. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-staging-validate.yml +0 -0
  129. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/job-variables/opentofu-validate.yml +0 -0
  130. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/library-validator/.cici/README.md.j2 +0 -0
  131. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/library-validator/.cici/config.yaml +0 -0
  132. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/library-validator/README.md +0 -0
  133. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/list-anchors/.cici/.gitlab-ci.yml +0 -0
  134. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/list-anchors/install.yml +0 -0
  135. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/nested-extends/.cici/.gitlab-ci.yml +0 -0
  136. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/nested-extends/simple-job.yml +0 -0
  137. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/reports/.cici/.gitlab-ci.yml +0 -0
  138. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/reports/reports-container-scanning.yml +0 -0
  139. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/reports/reports-coverage.yml +0 -0
  140. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/reports/reports-junit.yml +0 -0
  141. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/reports/reports-terraform.yml +0 -0
  142. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/.cici/.gitlab-ci.yml +0 -0
  143. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/.cici/config.yaml +0 -0
  144. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-docker-multiarch-manifest.yml +0 -0
  145. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/service-key/container-hadolint.yml +0 -0
  146. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/simple/.cici/.gitlab-ci.yml +0 -0
  147. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/simple/simple-job.yml +0 -0
  148. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/stages/.cici/.gitlab-ci.yml +0 -0
  149. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/stages/simple-job.yml +0 -0
  150. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/.gitlab-ci.yml +0 -0
  151. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/config.yaml +0 -0
  152. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-apply.yaml +0 -0
  153. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-auto-apply.yaml +0 -0
  154. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-destroy.yaml +0 -0
  155. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-plan.yaml +0 -0
  156. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-development-validate.yaml +0 -0
  157. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-fmt.yaml +0 -0
  158. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-module-build.yaml +0 -0
  159. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-module-release.yaml +0 -0
  160. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-apply.yaml +0 -0
  161. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-auto-apply.yaml +0 -0
  162. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-destroy.yaml +0 -0
  163. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-plan.yaml +0 -0
  164. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-trivy.yaml +0 -0
  165. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-production-validate.yaml +0 -0
  166. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-apply.yaml +0 -0
  167. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-auto-apply.yaml +0 -0
  168. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-destroy.yaml +0 -0
  169. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-plan.yaml +0 -0
  170. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-trivy.yaml +0 -0
  171. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-staging-validate.yaml +0 -0
  172. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-trivy.yaml +0 -0
  173. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/opentofu-validate.yaml +0 -0
  174. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/.cici/targets/tofu-development-trivy.yaml +0 -0
  175. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-development-apply.yml +0 -0
  176. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-development-auto-apply.yml +0 -0
  177. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-development-destroy.yml +0 -0
  178. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-development-plan.yml +0 -0
  179. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-development-validate.yml +0 -0
  180. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-fmt.yml +0 -0
  181. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-module-release.yml +0 -0
  182. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-production-apply.yml +0 -0
  183. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-production-auto-apply.yml +0 -0
  184. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-production-destroy.yml +0 -0
  185. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-production-plan.yml +0 -0
  186. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-production-validate.yml +0 -0
  187. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-staging-apply.yml +0 -0
  188. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-staging-auto-apply.yml +0 -0
  189. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-staging-destroy.yml +0 -0
  190. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-staging-plan.yml +0 -0
  191. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-staging-validate.yml +0 -0
  192. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/targets-dir/opentofu-validate.yml +0 -0
  193. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/terraform/.cici/.gitlab-ci.yml +0 -0
  194. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/terraform/terraform-fmt.yml +0 -0
  195. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/terraform/terraform-production-apply.yml +0 -0
  196. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/terraform/terraform-production-plan.yml +0 -0
  197. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/terraform/terraform-staging-apply.yml +0 -0
  198. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/terraform/terraform-staging-destroy.yml +0 -0
  199. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/variables/.cici/.gitlab-ci.yml +0 -0
  200. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/fixtures/gitlab/variables/simple-job.yml +0 -0
  201. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/test_build.py +0 -0
  202. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/test_cli.py +0 -0
  203. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/test_expand_job_extends.py +0 -0
  204. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/test_import.py +0 -0
  205. {cici_tools-0.17.1 → cici_tools-0.18.0}/tests/test_resolve_targets.py +0 -0
@@ -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.8.1
19
+ ref: 0.9.1
20
20
  file:
21
21
  - container-docker.yml
22
22
  - container-hadolint.yml
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cici-tools
3
- Version: 0.17.1
3
+ Version: 0.18.0
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.17.1'
32
- __version_tuple__ = version_tuple = (0, 17, 1)
31
+ __version__ = version = '0.18.0'
32
+ __version_tuple__ = version_tuple = (0, 18, 0)
33
33
 
34
- __commit_id__ = commit_id = 'ge578edc48'
34
+ __commit_id__ = commit_id = 'g36384f791'
@@ -327,13 +327,23 @@ def dump(
327
327
  data = unpack_jobs(data)
328
328
  data = style_scalars(data)
329
329
 
330
+ # DEBUG
331
+ # job = data.get("opentofu-trivy") or {}
332
+ # script = job.get("script") or []
333
+ # if script:
334
+ # print("\n[DUMP DEBUG] opentofu-trivy script[0] type:", type(script[0]))
335
+ # print("[DUMP DEBUG] script[0] repr:", repr(str(script[0])))
336
+ # print("[DUMP DEBUG] contains \\n\\n?:", "\n\n" in str(script[0]))
337
+ # print("[DUMP DEBUG] contains \\n?:", "\n" in str(script[0]))
338
+ # END DEBUG
339
+
330
340
  # user round trip mode to preserve ruamel scalar styles (FoldedScalarString etc)
331
341
  yaml = ruamel.yaml.YAML(typ="rt")
332
342
  yaml.default_flow_style = False
333
343
  yaml.explicit_start = False
334
344
  yaml.preserve_quotes = True # respect the quotes set in style_scalars()
335
345
  yaml.indent(mapping=2, sequence=4, offset=2)
336
- yaml.width = 1000 # prevent unwanted line wrapping
346
+ yaml.width = 120 # prevent unwanted line wrapping
337
347
  # makes sure ruamel.yml to always emit double quoted strings """"
338
348
  yaml.representer.add_representer(DoubleQuotedScalarString, always_double_quoted)
339
349
 
@@ -54,9 +54,18 @@ def make_scalar_string(line: str, quote: bool = False):
54
54
 
55
55
  return FoldedScalarString(wrap_if_long(unindented))
56
56
 
57
- # Commands and long lines get folded
57
+ # Folding long lines logic (like a script that is super long so that it does not do anything weird in the folding process)
58
58
  if unindented.startswith(("docker ", "helm ", "tar ", "curl ")):
59
- return FoldedScalarString(wrap_if_long(unindented))
59
+ command_string = unindented.strip()
60
+
61
+ folded_scalar = FoldedScalarString(command_string)
62
+
63
+ if " | " in command_string:
64
+ pipe_position = command_string.index(" | ")
65
+ # mypy does not like fold_pos however it solves an issue that breaks the .gitlab-ci.yaml
66
+ folded_scalar.fold_pos = [pipe_position] # type: ignore[attr-defined]
67
+
68
+ return folded_scalar
60
69
 
61
70
  # Multi-command sequences get folded
62
71
  if any(sym in unindented for sym in ("&&", ";", "\\")):
@@ -339,7 +348,7 @@ def style_scalars(
339
348
  "on_success",
340
349
  "on_failure",
341
350
  "manual",
342
- "cobertura", # :white_check_mark: coverage format
351
+ "cobertura", # coverage format
343
352
  "sigstore",
344
353
  }
345
354
  if stripped in UNQUOTED_KEYWORDS:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cici-tools
3
- Version: 0.17.1
3
+ Version: 0.18.0
4
4
  Summary: Continuous Integration Catalog Interface
5
5
  Author-email: Digital Safety Research Institute <contact@dsri.org>
6
6
  License: Apache-2.0
@@ -85,6 +85,7 @@ tests/test_expand_job_extends.py
85
85
  tests/test_import.py
86
86
  tests/test_precommit_hook_injection.py
87
87
  tests/test_resolve_targets.py
88
+ tests/test_yaml_style.py
88
89
  tests/fixtures/gitlab/extends/simple-job.yml
89
90
  tests/fixtures/gitlab/extends/.cici/.gitlab-ci.yml
90
91
  tests/fixtures/gitlab/helm/helm-cm-push.yml
@@ -66,6 +66,7 @@ profile = "black"
66
66
 
67
67
  [tool.mypy]
68
68
  python_version = "3.10"
69
+ exclude = '(^|/)(venv|\.venv)/'
69
70
 
70
71
  [tool.setuptools.package-data]
71
72
  "cici" = ["py.typed"]
@@ -8,7 +8,7 @@ attrs==25.4.0
8
8
  # referencing
9
9
  jinja2==3.1.6
10
10
  # via cici-tools (pyproject.toml)
11
- jsonschema==4.25.1
11
+ jsonschema==4.26.0
12
12
  # via cici-tools (pyproject.toml)
13
13
  jsonschema-specifications==2025.9.1
14
14
  # via jsonschema
@@ -30,7 +30,8 @@ helm-cm-push:
30
30
  before_script:
31
31
  - apk add --no-cache curl
32
32
  - >-
33
- curl -sS -o - https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz | tar --strip-components 1 -xzf - linux-amd64/helm
33
+ curl -sS -o - https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz
34
+ | tar --strip-components 1 -xzf - linux-amd64/helm
34
35
  - install helm /usr/local/bin/
35
36
  - rm -f helm
36
37
  - >-
@@ -40,8 +41,6 @@ helm-cm-push:
40
41
  - >-
41
42
  helm plugin install https://github.com/chartmuseum/helm-push
42
43
  - >-
43
- helm cm-push --version "$HELM_CHART_VERSION" --app-version "$HELM_CHART_VERSION" "$HELM_CHART_PATH"
44
-
45
- "$HELM_REPOSITORY_URL"
44
+ helm cm-push --version "$HELM_CHART_VERSION" --app-version "$HELM_CHART_VERSION" "$HELM_CHART_PATH" "$HELM_REPOSITORY_URL"
46
45
  rules:
47
46
  - if: $CI_COMMIT_TAG
@@ -27,9 +27,8 @@ helm-docs:
27
27
  before_script:
28
28
  - apk add --no-cache curl
29
29
  - >-
30
- curl -sSL -o - https://github.com/norwoodj/helm-docs/releases/download/v1.7.0/helm-docs_1.7.0_Linux_x86_64.tar.gz | tar
31
-
32
- xzf - helm-docs
30
+ curl -sSL -o - https://github.com/norwoodj/helm-docs/releases/download/v1.7.0/helm-docs_1.7.0_Linux_x86_64.tar.gz
31
+ | tar xzf - helm-docs
33
32
  - install helm-docs /usr/local/bin/
34
33
  - rm -f helm-docs
35
34
  - helm-docs --version
@@ -27,7 +27,8 @@ helm-lint:
27
27
  before_script:
28
28
  - apk add --no-cache curl
29
29
  - >-
30
- curl -sS -o - https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz | tar --strip-components 1 -xzf - linux-amd64/helm
30
+ curl -sS -o - https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz
31
+ | tar --strip-components 1 -xzf - linux-amd64/helm
31
32
  - install helm /usr/local/bin/
32
33
  - rm -f helm
33
34
  - >-
@@ -47,9 +47,8 @@ opentofu-development-trivy:
47
47
  - cd "${OPENTOFU_ROOT}"
48
48
  script:
49
49
  - >-
50
- curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz | tar -C
51
-
52
- /usr/local/bin/ -xzf - trivy
50
+ curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz
51
+ | tar -C /usr/local/bin/ -xzf - trivy
53
52
  - trivy config "${OPENTOFU_ROOT}/plan.json"
54
53
  cache:
55
54
  key: $OPENTOFU_STATE_NAME
@@ -41,17 +41,11 @@ opentofu-module-build:
41
41
  script:
42
42
  - OPENTOFU_MODULE_NAME=$(echo "${OPENTOFU_MODULE_NAME}" | tr " _" -)
43
43
  - >-
44
- tar -vczf /tmp/${OPENTOFU_MODULE_NAME}-${OPENTOFU_MODULE_SYSTEM}-${OPENTOFU_MODULE_VERSION}.tgz -C
45
-
46
- ${OPENTOFU_MODULE_DIR} --exclude=./.git .
44
+ tar -vczf /tmp/${OPENTOFU_MODULE_NAME}-${OPENTOFU_MODULE_SYSTEM}-${OPENTOFU_MODULE_VERSION}.tgz -C ${OPENTOFU_MODULE_DIR}
45
+ --exclude=./.git .
47
46
  - >-
48
- curl --fail-with-body --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file
49
-
50
- /tmp/${OPENTOFU_MODULE_NAME}-${OPENTOFU_MODULE_SYSTEM}-${OPENTOFU_MODULE_VERSION}.tgz
51
-
52
- ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/terraform/modules/${OPENTOFU_MODULE_NAME}/${OPENTOFU_MODULE_SYSTEM}/
53
-
54
- ${OPENTOFU_MODULE_VERSION}/file
47
+ curl --fail-with-body --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file /tmp/${OPENTOFU_MODULE_NAME}-${OPENTOFU_MODULE_SYSTEM}-${OPENTOFU_MODULE_VERSION}.tgz
48
+ ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/terraform/modules/${OPENTOFU_MODULE_NAME}/${OPENTOFU_MODULE_SYSTEM}/${OPENTOFU_MODULE_VERSION}/file
55
49
  cache: {}
56
50
  dependencies: []
57
51
  rules:
@@ -47,9 +47,8 @@ opentofu-production-trivy:
47
47
  - cd "${OPENTOFU_ROOT}"
48
48
  script:
49
49
  - >-
50
- curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz | tar -C
51
-
52
- /usr/local/bin/ -xzf - trivy
50
+ curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz
51
+ | tar -C /usr/local/bin/ -xzf - trivy
53
52
  - trivy config "${OPENTOFU_ROOT}/plan.json"
54
53
  cache:
55
54
  key: $OPENTOFU_STATE_NAME
@@ -47,9 +47,8 @@ opentofu-staging-trivy:
47
47
  - cd "${OPENTOFU_ROOT}"
48
48
  script:
49
49
  - >-
50
- curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz | tar -C
51
-
52
- /usr/local/bin/ -xzf - trivy
50
+ curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz
51
+ | tar -C /usr/local/bin/ -xzf - trivy
53
52
  - trivy config "${OPENTOFU_ROOT}/plan.json"
54
53
  cache:
55
54
  key: $OPENTOFU_STATE_NAME
@@ -46,9 +46,8 @@ opentofu-trivy:
46
46
  - cd "${OPENTOFU_ROOT}"
47
47
  script:
48
48
  - >-
49
- curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz | tar -C
50
-
51
- /usr/local/bin/ -xzf - trivy
49
+ curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz
50
+ | tar -C /usr/local/bin/ -xzf - trivy
52
51
  - trivy config .
53
52
  cache:
54
53
  key: $OPENTOFU_STATE_NAME
@@ -106,14 +106,11 @@ container-docker-multiarch-amd64:
106
106
  _CONTAINER_OPTS="$_CONTAINER_OPTS --tag ${CONTAINER_NAME}:latest-${CONTAINER_DOCKER_ARCH}"
107
107
  fi
108
108
  - >-
109
- docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg
110
-
111
- "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH" --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION"
112
-
113
- --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM" --progress plain --push --tag
114
-
115
- "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
116
- - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}' "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
109
+ docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH"
110
+ --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION" --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM"
111
+ --progress plain --push --tag "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
112
+ - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}'
113
+ "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
117
114
  - cosign sign --yes "$COSIGN_IMAGE_DIGEST"
118
115
  - mkdir -p dist/container/arch
119
116
  - touch "dist/container/arch/${CONTAINER_DOCKER_ARCH}"
@@ -106,14 +106,11 @@ container-docker-multiarch-arm32v6:
106
106
  _CONTAINER_OPTS="$_CONTAINER_OPTS --tag ${CONTAINER_NAME}:latest-${CONTAINER_DOCKER_ARCH}"
107
107
  fi
108
108
  - >-
109
- docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg
110
-
111
- "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH" --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION"
112
-
113
- --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM" --progress plain --push --tag
114
-
115
- "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
116
- - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}' "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
109
+ docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH"
110
+ --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION" --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM"
111
+ --progress plain --push --tag "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
112
+ - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}'
113
+ "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
117
114
  - cosign sign --yes "$COSIGN_IMAGE_DIGEST"
118
115
  - mkdir -p dist/container/arch
119
116
  - touch "dist/container/arch/${CONTAINER_DOCKER_ARCH}"
@@ -106,14 +106,11 @@ container-docker-multiarch-arm32v7:
106
106
  _CONTAINER_OPTS="$_CONTAINER_OPTS --tag ${CONTAINER_NAME}:latest-${CONTAINER_DOCKER_ARCH}"
107
107
  fi
108
108
  - >-
109
- docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg
110
-
111
- "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH" --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION"
112
-
113
- --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM" --progress plain --push --tag
114
-
115
- "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
116
- - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}' "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
109
+ docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH"
110
+ --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION" --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM"
111
+ --progress plain --push --tag "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
112
+ - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}'
113
+ "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
117
114
  - cosign sign --yes "$COSIGN_IMAGE_DIGEST"
118
115
  - mkdir -p dist/container/arch
119
116
  - touch "dist/container/arch/${CONTAINER_DOCKER_ARCH}"
@@ -106,14 +106,11 @@ container-docker-multiarch-arm64v8:
106
106
  _CONTAINER_OPTS="$_CONTAINER_OPTS --tag ${CONTAINER_NAME}:latest-${CONTAINER_DOCKER_ARCH}"
107
107
  fi
108
108
  - >-
109
- docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg
110
-
111
- "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH" --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION"
112
-
113
- --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM" --progress plain --push --tag
114
-
115
- "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
116
- - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}' "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
109
+ docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH"
110
+ --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION" --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM"
111
+ --progress plain --push --tag "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
112
+ - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}'
113
+ "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
117
114
  - cosign sign --yes "$COSIGN_IMAGE_DIGEST"
118
115
  - mkdir -p dist/container/arch
119
116
  - touch "dist/container/arch/${CONTAINER_DOCKER_ARCH}"
@@ -106,14 +106,11 @@ container-docker-multiarch-i386:
106
106
  _CONTAINER_OPTS="$_CONTAINER_OPTS --tag ${CONTAINER_NAME}:latest-${CONTAINER_DOCKER_ARCH}"
107
107
  fi
108
108
  - >-
109
- docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg
110
-
111
- "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH" --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION"
112
-
113
- --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM" --progress plain --push --tag
114
-
115
- "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
116
- - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}' "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
109
+ docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH"
110
+ --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION" --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM"
111
+ --progress plain --push --tag "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
112
+ - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}'
113
+ "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
117
114
  - cosign sign --yes "$COSIGN_IMAGE_DIGEST"
118
115
  - mkdir -p dist/container/arch
119
116
  - touch "dist/container/arch/${CONTAINER_DOCKER_ARCH}"
@@ -103,14 +103,11 @@ container-docker-multiarch:
103
103
  _CONTAINER_OPTS="$_CONTAINER_OPTS --tag ${CONTAINER_NAME}:latest-${CONTAINER_DOCKER_ARCH}"
104
104
  fi
105
105
  - >-
106
- docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg
107
-
108
- "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH" --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION"
109
-
110
- --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM" --progress plain --push --tag
111
-
112
- "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
113
- - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}' "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
106
+ docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg "CONTAINER_DOCKER_MACHINE_ARCH=$CONTAINER_DOCKER_MACHINE_ARCH"
107
+ --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION" --file "${CONTAINER_DOCKERFILE}" --platform "$CONTAINER_DOCKER_PLATFORM"
108
+ --progress plain --push --tag "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
109
+ - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}'
110
+ "${CONTAINER_IMAGE}-${CONTAINER_DOCKER_ARCH}")"
114
111
  - cosign sign --yes "$COSIGN_IMAGE_DIGEST"
115
112
  - mkdir -p dist/container/arch
116
113
  - touch "dist/container/arch/${CONTAINER_DOCKER_ARCH}"
@@ -103,11 +103,9 @@ container-docker:
103
103
  _CONTAINER_OPTS="$_CONTAINER_OPTS --tag ${CONTAINER_NAME}:latest"
104
104
  fi
105
105
  - >-
106
- docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg "CONTAINER_PROXY=$CONTAINER_PROXY"
107
-
108
- --build-arg "CONTAINER_VERSION=$CONTAINER_VERSION" --file "${CONTAINER_DOCKERFILE}" --progress plain --push --tag
109
-
110
- "${CONTAINER_IMAGE}" $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
106
+ docker buildx build --build-arg "CONTAINER_NAME=$CONTAINER_NAME" --build-arg "CONTAINER_PROXY=$CONTAINER_PROXY" --build-arg
107
+ "CONTAINER_VERSION=$CONTAINER_VERSION" --file "${CONTAINER_DOCKERFILE}" --progress plain --push --tag "${CONTAINER_IMAGE}"
108
+ $_CONTAINER_OPTS "${CONTAINER_CONTEXT}"
111
109
  - COSIGN_IMAGE_DIGEST="$(docker inspect --format='{{index .RepoDigests 0}}' "$CONTAINER_IMAGE")"
112
110
  - cosign sign --yes "$COSIGN_IMAGE_DIGEST"
113
111
  id_tokens:
@@ -97,15 +97,16 @@ container-trivy:
97
97
  echo "$CI_DEPENDENCY_PROXY_PASSWORD" | docker login "$CI_SERVER_HOST" -u "$CI_DEPENDENCY_PROXY_USER" --password-stdin
98
98
  - apk add --no-cache curl
99
99
  - >-
100
- curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz | tar -xzf -
101
-
102
- -C /usr/local/bin/
100
+ curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz
101
+ | tar -xzf - -C /usr/local/bin/
103
102
  - >-
104
103
  docker pull "${CONTAINER_IMAGE}"
105
104
  - trivy image "${CONTAINER_IMAGE}" --format json --no-progress -o "${CI_JOB_NAME_SLUG}.json"
106
105
  - trivy convert "${CI_JOB_NAME_SLUG}.json"
107
- - trivy convert "${CI_JOB_NAME_SLUG}.json" --format template --template "@/usr/local/bin/contrib/gitlab.tpl" -o "${CI_JOB_NAME_SLUG}-gitlab.json"
108
- - trivy convert "${CI_JOB_NAME_SLUG}.json" --format template --template "@/usr/local/bin/contrib/html.tpl" -o "${CI_JOB_NAME_SLUG}.html"
106
+ - trivy convert "${CI_JOB_NAME_SLUG}.json" --format template --template "@/usr/local/bin/contrib/gitlab.tpl" -o
107
+ "${CI_JOB_NAME_SLUG}-gitlab.json"
108
+ - trivy convert "${CI_JOB_NAME_SLUG}.json" --format template --template "@/usr/local/bin/contrib/html.tpl" -o
109
+ "${CI_JOB_NAME_SLUG}.html"
109
110
  artifacts:
110
111
  paths:
111
112
  - ${CI_JOB_NAME_SLUG}.json
@@ -47,9 +47,8 @@ opentofu-development-trivy:
47
47
  - cd "${OPENTOFU_ROOT}"
48
48
  script:
49
49
  - >-
50
- curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz | tar -C
51
-
52
- /usr/local/bin/ -xzf - trivy
50
+ curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz
51
+ | tar -C /usr/local/bin/ -xzf - trivy
53
52
  - trivy config "${OPENTOFU_ROOT}/plan.json"
54
53
  cache:
55
54
  key: $OPENTOFU_STATE_NAME
@@ -41,17 +41,11 @@ opentofu-module-build:
41
41
  script:
42
42
  - OPENTOFU_MODULE_NAME=$(echo "${OPENTOFU_MODULE_NAME}" | tr " _" -)
43
43
  - >-
44
- tar -vczf /tmp/${OPENTOFU_MODULE_NAME}-${OPENTOFU_MODULE_SYSTEM}-${OPENTOFU_MODULE_VERSION}.tgz -C
45
-
46
- ${OPENTOFU_MODULE_DIR} --exclude=./.git .
44
+ tar -vczf /tmp/${OPENTOFU_MODULE_NAME}-${OPENTOFU_MODULE_SYSTEM}-${OPENTOFU_MODULE_VERSION}.tgz -C ${OPENTOFU_MODULE_DIR}
45
+ --exclude=./.git .
47
46
  - >-
48
- curl --fail-with-body --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file
49
-
50
- /tmp/${OPENTOFU_MODULE_NAME}-${OPENTOFU_MODULE_SYSTEM}-${OPENTOFU_MODULE_VERSION}.tgz
51
-
52
- ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/terraform/modules/${OPENTOFU_MODULE_NAME}/${OPENTOFU_MODULE_SYSTEM}/
53
-
54
- ${OPENTOFU_MODULE_VERSION}/file
47
+ curl --fail-with-body --location --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file /tmp/${OPENTOFU_MODULE_NAME}-${OPENTOFU_MODULE_SYSTEM}-${OPENTOFU_MODULE_VERSION}.tgz
48
+ ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/terraform/modules/${OPENTOFU_MODULE_NAME}/${OPENTOFU_MODULE_SYSTEM}/${OPENTOFU_MODULE_VERSION}/file
55
49
  cache: {}
56
50
  dependencies: []
57
51
  rules:
@@ -47,9 +47,8 @@ opentofu-production-trivy:
47
47
  - cd "${OPENTOFU_ROOT}"
48
48
  script:
49
49
  - >-
50
- curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz | tar -C
51
-
52
- /usr/local/bin/ -xzf - trivy
50
+ curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz
51
+ | tar -C /usr/local/bin/ -xzf - trivy
53
52
  - trivy config "${OPENTOFU_ROOT}/plan.json"
54
53
  cache:
55
54
  key: $OPENTOFU_STATE_NAME
@@ -47,9 +47,8 @@ opentofu-staging-trivy:
47
47
  - cd "${OPENTOFU_ROOT}"
48
48
  script:
49
49
  - >-
50
- curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz | tar -C
51
-
52
- /usr/local/bin/ -xzf - trivy
50
+ curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz
51
+ | tar -C /usr/local/bin/ -xzf - trivy
53
52
  - trivy config "${OPENTOFU_ROOT}/plan.json"
54
53
  cache:
55
54
  key: $OPENTOFU_STATE_NAME
@@ -46,9 +46,8 @@ opentofu-trivy:
46
46
  - cd "${OPENTOFU_ROOT}"
47
47
  script:
48
48
  - >-
49
- curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz | tar -C
50
-
51
- /usr/local/bin/ -xzf - trivy
49
+ curl -sSL https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz
50
+ | tar -C /usr/local/bin/ -xzf - trivy
52
51
  - trivy config .
53
52
  cache:
54
53
  key: $OPENTOFU_STATE_NAME
@@ -14,7 +14,7 @@ targets:
14
14
  - name: D
15
15
  """
16
16
  # Only some targets have hooks
17
- PRECOMMIT_HOOKS = {"A": {}, "C": {}}
17
+ PRECOMMIT_HOOKS = {"A": {}, "C": {}} # type: ignore[var-annotated]
18
18
 
19
19
 
20
20
  def _target_by_name(file_obj, name: str):
@@ -40,7 +40,7 @@ def test_precommit_hook_injection_is_name_based(
40
40
  file_obj = loads(
41
41
  CONFIG_YAML,
42
42
  gitlab_ci_jobs={}, # irrelevant for this test
43
- precommit_hooks=PRECOMMIT_HOOKS, # the thing we care about
43
+ precommit_hooks=PRECOMMIT_HOOKS,
44
44
  )
45
45
  target = _target_by_name(file_obj, target_name)
46
46
  # dict-or-None version
@@ -0,0 +1,96 @@
1
+ # SPDX-FileCopyrightText: UL Research Institutes
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ import io
5
+
6
+ import pytest
7
+ import ruamel.yaml
8
+ from ruamel.yaml.scalarstring import FoldedScalarString
9
+
10
+ from cici.providers.gitlab.yaml_style import make_scalar_string
11
+
12
+
13
+ # test the folding when handling string literals
14
+ @pytest.mark.parametrize(
15
+ "command_text",
16
+ [
17
+ # long command with pipe
18
+ "toolA subcommand with many flags and arguments that make this command exceed "
19
+ "a typical width threshold | toolB --option value --another-option something",
20
+ # long command with multiple pipes
21
+ "cmd1 --foo bar --baz qux | cmd2 --long-option here | cmd3 --final-stage",
22
+ # long command without pipe
23
+ "someverylongcommandname with a lot of arguments and flags that keeps going "
24
+ "and going and going until it is clearly longer than any sane line width",
25
+ # command with && and ;
26
+ "step1 --flag value && step2 --another value ; step3 --final",
27
+ ],
28
+ ids=[
29
+ "long-command-with-pipe",
30
+ "long-command-with-multiple-pipes",
31
+ "long-command-no-pipe",
32
+ "long-command-with-operators",
33
+ ],
34
+ )
35
+ def test_styled_command_has_no_semantic_newlines(command_text):
36
+ styled = make_scalar_string(command_text)
37
+
38
+ # If folding is used, it must be display-only
39
+ if isinstance(styled, FoldedScalarString):
40
+ assert "\n" not in str(styled), (
41
+ "FoldedScalarString must not contain real newlines; "
42
+ "folding must be display-only"
43
+ )
44
+
45
+
46
+ # make sure ruamel dumping never prints the blank line
47
+ @pytest.mark.parametrize(
48
+ "command_text",
49
+ [
50
+ "toolA subcommand with many flags and arguments that make this command exceed "
51
+ "a typical width threshold | toolB --option value --another-option something",
52
+ "cmd1 --foo bar --baz qux | cmd2 --long-option here | cmd3 --final-stage",
53
+ "someverylongcommandname with a lot of arguments and flags that keeps going "
54
+ "and going and going until it is clearly longer than any sane line width",
55
+ ],
56
+ ids=[
57
+ "yaml-dump-no-blank-line-case1",
58
+ "yaml-dump-no-blank-line-case2",
59
+ "yaml-dump-no-blank-line-case3",
60
+ ],
61
+ )
62
+ def test_yaml_dump_has_no_blank_line_in_folded_scalar(command_text):
63
+ styled = make_scalar_string(command_text)
64
+
65
+ data = {
66
+ "job": {
67
+ "script": [styled, "echo ok"],
68
+ }
69
+ }
70
+
71
+ yaml = ruamel.yaml.YAML(typ="rt")
72
+ yaml.width = 120
73
+ yaml.indent(mapping=2, sequence=4, offset=2)
74
+ yaml.default_flow_style = False
75
+
76
+ out = io.StringIO()
77
+ yaml.dump(data, out)
78
+ emitted = out.getvalue()
79
+
80
+ lines = emitted.splitlines()
81
+
82
+ # Find folded scalar start
83
+ try:
84
+ folded_start = next(
85
+ i for i, line in enumerate(lines) if line.strip() in ("- >-", "- >")
86
+ )
87
+ except StopIteration:
88
+ pytest.skip("No folded scalar emitted; nothing to assert")
89
+
90
+ # Inspect a small window of the folded block
91
+ folded_block = lines[folded_start : folded_start + 8]
92
+
93
+ # Regression guard: no visually empty line inside folded scalar
94
+ assert not any(line.strip() == "" for line in folded_block[1:]), "\n".join(
95
+ folded_block
96
+ )
File without changes
File without changes
File without changes