zizmor 1.2.2__tar.gz → 1.3.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.

Potentially problematic release.


This version of zizmor might be problematic. Click here for more details.

Files changed (201) hide show
  1. {zizmor-1.2.2 → zizmor-1.3.0}/.github/workflows/ci.yml +1 -1
  2. {zizmor-1.2.2 → zizmor-1.3.0}/.github/workflows/pypi.yml +8 -8
  3. {zizmor-1.2.2 → zizmor-1.3.0}/.github/workflows/zizmor.yml +1 -1
  4. {zizmor-1.2.2 → zizmor-1.3.0}/Cargo.lock +61 -17
  5. {zizmor-1.2.2 → zizmor-1.3.0}/Cargo.toml +9 -8
  6. {zizmor-1.2.2 → zizmor-1.3.0}/PKG-INFO +1 -1
  7. {zizmor-1.2.2 → zizmor-1.3.0}/docs/audits.md +63 -2
  8. {zizmor-1.2.2 → zizmor-1.3.0}/docs/release-notes.md +30 -1
  9. {zizmor-1.2.2 → zizmor-1.3.0}/docs/snippets/trophies.md +27 -0
  10. {zizmor-1.2.2 → zizmor-1.3.0}/docs/snippets/trophies.txt +6 -0
  11. {zizmor-1.2.2 → zizmor-1.3.0}/docs/usage.md +1 -1
  12. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/bot_conditions.rs +15 -10
  13. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/mod.rs +39 -4
  14. zizmor-1.3.0/src/audit/overprovisioned_secrets.rs +117 -0
  15. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/template_injection.rs +14 -15
  16. {zizmor-1.2.2 → zizmor-1.3.0}/src/expr/mod.rs +163 -25
  17. {zizmor-1.2.2 → zizmor-1.3.0}/src/finding/mod.rs +118 -23
  18. {zizmor-1.2.2 → zizmor-1.3.0}/src/main.rs +8 -3
  19. {zizmor-1.2.2 → zizmor-1.3.0}/src/models.rs +9 -0
  20. {zizmor-1.2.2 → zizmor-1.3.0}/src/registry.rs +2 -2
  21. {zizmor-1.2.2 → zizmor-1.3.0}/src/render.rs +31 -3
  22. {zizmor-1.2.2 → zizmor-1.3.0}/src/utils.rs +27 -24
  23. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshot.rs +20 -0
  24. zizmor-1.3.0/tests/snapshots/snapshot__invalid_inputs.snap +17 -0
  25. zizmor-1.3.0/tests/snapshots/snapshot__overprovisioned_secrets.snap +22 -0
  26. zizmor-1.3.0/tests/test-data/invalid/invalid-workflow.yml +14 -0
  27. zizmor-1.3.0/tests/test-data/overprovisioned-secrets.yml +27 -0
  28. zizmor-1.2.2/src/finding/locate.rs +0 -59
  29. {zizmor-1.2.2 → zizmor-1.3.0}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  30. {zizmor-1.2.2 → zizmor-1.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  31. {zizmor-1.2.2 → zizmor-1.3.0}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  32. {zizmor-1.2.2 → zizmor-1.3.0}/.github/dependabot.yml +0 -0
  33. {zizmor-1.2.2 → zizmor-1.3.0}/.github/workflows/release.yml +0 -0
  34. {zizmor-1.2.2 → zizmor-1.3.0}/.github/workflows/site.yml +0 -0
  35. {zizmor-1.2.2 → zizmor-1.3.0}/.gitignore +0 -0
  36. {zizmor-1.2.2 → zizmor-1.3.0}/CONTRIBUTING.md +0 -0
  37. {zizmor-1.2.2 → zizmor-1.3.0}/LICENSE +0 -0
  38. {zizmor-1.2.2 → zizmor-1.3.0}/Makefile +0 -0
  39. {zizmor-1.2.2 → zizmor-1.3.0}/README.md +0 -0
  40. {zizmor-1.2.2 → zizmor-1.3.0}/docs/assets/favicon48x48.png +0 -0
  41. {zizmor-1.2.2 → zizmor-1.3.0}/docs/assets/rainbow.svg +0 -0
  42. {zizmor-1.2.2 → zizmor-1.3.0}/docs/assets/zizmor-demo.gif +0 -0
  43. {zizmor-1.2.2 → zizmor-1.3.0}/docs/configuration.md +0 -0
  44. {zizmor-1.2.2 → zizmor-1.3.0}/docs/development.md +0 -0
  45. {zizmor-1.2.2 → zizmor-1.3.0}/docs/index.md +0 -0
  46. {zizmor-1.2.2 → zizmor-1.3.0}/docs/installation.md +0 -0
  47. {zizmor-1.2.2 → zizmor-1.3.0}/docs/magiclink.css +0 -0
  48. {zizmor-1.2.2 → zizmor-1.3.0}/docs/quickstart.md +0 -0
  49. {zizmor-1.2.2 → zizmor-1.3.0}/docs/snippets/help.txt +0 -0
  50. {zizmor-1.2.2 → zizmor-1.3.0}/docs/snippets/render-sponsors.py +0 -0
  51. {zizmor-1.2.2 → zizmor-1.3.0}/docs/snippets/render-trophies.py +0 -0
  52. {zizmor-1.2.2 → zizmor-1.3.0}/docs/snippets/sponsors.html +0 -0
  53. {zizmor-1.2.2 → zizmor-1.3.0}/docs/snippets/sponsors.json +0 -0
  54. {zizmor-1.2.2 → zizmor-1.3.0}/docs/trophy-case.md +0 -0
  55. {zizmor-1.2.2 → zizmor-1.3.0}/mkdocs.yml +0 -0
  56. {zizmor-1.2.2 → zizmor-1.3.0}/pyproject.toml +0 -0
  57. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/artipacked.rs +0 -0
  58. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/cache_poisoning.rs +0 -0
  59. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/dangerous_triggers.rs +0 -0
  60. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/excessive_permissions.rs +0 -0
  61. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/github_env.rs +0 -0
  62. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/hardcoded_container_credentials.rs +0 -0
  63. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/impostor_commit.rs +0 -0
  64. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/insecure_commands.rs +0 -0
  65. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/known_vulnerable_actions.rs +0 -0
  66. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/ref_confusion.rs +0 -0
  67. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/secrets_inherit.rs +0 -0
  68. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/self_hosted_runner.rs +0 -0
  69. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/unpinned_uses.rs +0 -0
  70. {zizmor-1.2.2 → zizmor-1.3.0}/src/audit/use_trusted_publishing.rs +0 -0
  71. {zizmor-1.2.2 → zizmor-1.3.0}/src/config.rs +0 -0
  72. {zizmor-1.2.2 → zizmor-1.3.0}/src/expr/expr.pest +0 -0
  73. {zizmor-1.2.2 → zizmor-1.3.0}/src/github_api.rs +0 -0
  74. {zizmor-1.2.2 → zizmor-1.3.0}/src/models/coordinate.rs +0 -0
  75. {zizmor-1.2.2 → zizmor-1.3.0}/src/models/uses.rs +0 -0
  76. {zizmor-1.2.2 → zizmor-1.3.0}/src/sarif.rs +0 -0
  77. {zizmor-1.2.2 → zizmor-1.3.0}/src/state.rs +0 -0
  78. {zizmor-1.2.2 → zizmor-1.3.0}/tests/acceptance.rs +0 -0
  79. {zizmor-1.2.2 → zizmor-1.3.0}/tests/common.rs +0 -0
  80. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__artipacked-2.snap +0 -0
  81. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__artipacked-3.snap +0 -0
  82. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__artipacked-4.snap +0 -0
  83. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__artipacked.snap +0 -0
  84. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__bot_conditions.snap +0 -0
  85. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-10.snap +0 -0
  86. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-11.snap +0 -0
  87. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-12.snap +0 -0
  88. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-13.snap +0 -0
  89. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-14.snap +0 -0
  90. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-2.snap +0 -0
  91. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-3.snap +0 -0
  92. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-4.snap +0 -0
  93. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-5.snap +0 -0
  94. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-6.snap +0 -0
  95. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-7.snap +0 -0
  96. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-8.snap +0 -0
  97. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning-9.snap +0 -0
  98. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cache_poisoning.snap +0 -0
  99. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__cant_retrieve.snap +0 -0
  100. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__conflicting_online_options-2.snap +0 -0
  101. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__conflicting_online_options-3.snap +0 -0
  102. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__conflicting_online_options.snap +0 -0
  103. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-10.snap +0 -0
  104. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-11.snap +0 -0
  105. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-12.snap +0 -0
  106. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-2.snap +0 -0
  107. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-3.snap +0 -0
  108. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-4.snap +0 -0
  109. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-5.snap +0 -0
  110. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-6.snap +0 -0
  111. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-7.snap +0 -0
  112. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-8.snap +0 -0
  113. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions-9.snap +0 -0
  114. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__excessive_permissions.snap +0 -0
  115. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__github_env-2.snap +0 -0
  116. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__github_env-3.snap +0 -0
  117. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__github_env.snap +0 -0
  118. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__insecure_commands-2.snap +0 -0
  119. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__insecure_commands-3.snap +0 -0
  120. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__insecure_commands.snap +0 -0
  121. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__secrets_inherit.snap +0 -0
  122. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__self_hosted-2.snap +0 -0
  123. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__self_hosted-3.snap +0 -0
  124. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__self_hosted-4.snap +0 -0
  125. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__self_hosted-5.snap +0 -0
  126. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__self_hosted-6.snap +0 -0
  127. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__self_hosted-7.snap +0 -0
  128. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__self_hosted-8.snap +0 -0
  129. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__self_hosted.snap +0 -0
  130. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__template_injection-2.snap +0 -0
  131. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__template_injection-3.snap +0 -0
  132. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__template_injection-4.snap +0 -0
  133. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__template_injection-5.snap +0 -0
  134. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__template_injection-6.snap +0 -0
  135. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__template_injection-7.snap +0 -0
  136. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__template_injection-8.snap +0 -0
  137. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__template_injection.snap +0 -0
  138. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__unpinned_uses-2.snap +0 -0
  139. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__unpinned_uses-3.snap +0 -0
  140. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__unpinned_uses-4.snap +0 -0
  141. {zizmor-1.2.2 → zizmor-1.3.0}/tests/snapshots/snapshot__unpinned_uses.snap +0 -0
  142. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/artipacked/issue-447-repro.yml +0 -0
  143. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/artipacked.yml +0 -0
  144. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/bot-conditions.yml +0 -0
  145. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/caching-disabled-by-default.yml +0 -0
  146. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/caching-enabled-by-default.yml +0 -0
  147. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/caching-not-configurable.yml +0 -0
  148. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/caching-opt-in-boolean-toggle.yml +0 -0
  149. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/caching-opt-in-boolish-toggle.yml +0 -0
  150. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/caching-opt-in-expression.yml +0 -0
  151. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/caching-opt-in-multi-value-toggle.yml +0 -0
  152. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/caching-opt-out.yml +0 -0
  153. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/issue-343-repro.yml +0 -0
  154. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/issue-378-repro.yml +0 -0
  155. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/no-cache-aware-steps.yml +0 -0
  156. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/publisher-step.yml +0 -0
  157. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/workflow-release-branch-trigger.yml +0 -0
  158. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning/workflow-tag-trigger.yml +0 -0
  159. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/cache-poisoning.yml +0 -0
  160. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/issue-336-repro.yml +0 -0
  161. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/issue-472-repro.yml +0 -0
  162. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/jobs-broaden-permissions.yml +0 -0
  163. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/reusable-workflow-call.yml +0 -0
  164. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/reusable-workflow-other-triggers.yml +0 -0
  165. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/workflow-default-perms-all-jobs-explicit.yml +0 -0
  166. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/workflow-default-perms.yml +0 -0
  167. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/workflow-empty-perms.yml +0 -0
  168. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/workflow-read-all.yml +0 -0
  169. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/workflow-write-all.yml +0 -0
  170. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions/workflow-write-explicit.yml +0 -0
  171. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/excessive-permissions.yml +0 -0
  172. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/github-env/action.yml +0 -0
  173. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/github-env/github-path.yml +0 -0
  174. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/github-env/issue-397-repro.yml +0 -0
  175. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/github_env.yml +0 -0
  176. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/hardcoded-credentials.yml +0 -0
  177. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/inlined-ignores.yml +0 -0
  178. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/insecure-commands/action.yml +0 -0
  179. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/insecure-commands.yml +0 -0
  180. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/secrets-inherit.yml +0 -0
  181. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/self-hosted/issue-283-repro.yml +0 -0
  182. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/self-hosted/self-hosted-matrix-dimension.yml +0 -0
  183. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/self-hosted/self-hosted-matrix-exclusion.yml +0 -0
  184. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/self-hosted/self-hosted-matrix-inclusion.yml +0 -0
  185. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/self-hosted/self-hosted-runner-group.yml +0 -0
  186. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/self-hosted/self-hosted-runner-label.yml +0 -0
  187. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/self-hosted.yml +0 -0
  188. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/template-injection/issue-22-repro.yml +0 -0
  189. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/template-injection/issue-339-repro.yml +0 -0
  190. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/template-injection/issue-418-repro.yml +0 -0
  191. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/template-injection/pr-317-repro.yml +0 -0
  192. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/template-injection/pr-425-backstop/action.yml +0 -0
  193. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/template-injection/static-env.yml +0 -0
  194. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/template-injection/template-injection-dynamic-matrix.yml +0 -0
  195. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/template-injection/template-injection-static-matrix.yml +0 -0
  196. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/template-injection.yml +0 -0
  197. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/unpinned-uses/action.yml +0 -0
  198. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/unpinned-uses/issue-433-repro.yml +0 -0
  199. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/unpinned-uses.yml +0 -0
  200. {zizmor-1.2.2 → zizmor-1.3.0}/tests/test-data/use-trusted-publishing.yml +0 -0
  201. {zizmor-1.2.2 → zizmor-1.3.0}/uv.lock +0 -0
@@ -22,7 +22,7 @@ jobs:
22
22
  - uses: Swatinem/rust-cache@f0deed1e0edfc6a9be95417288c0e1099b1eeec3 # v2
23
23
 
24
24
  - name: Lint
25
- run: cargo clippy -- -D warnings
25
+ run: cargo clippy -- -D warnings -D clippy::dbg_macro
26
26
 
27
27
  test:
28
28
  runs-on: ubuntu-latest
@@ -23,7 +23,7 @@ jobs:
23
23
  - runner: ubuntu-24.04
24
24
  target: x86
25
25
  manylinux: auto
26
- - runner: ubuntu-24.04-arm
26
+ - runner: ubuntu-24.04
27
27
  target: aarch64
28
28
  manylinux: "2_24"
29
29
  - runner: ubuntu-24.04
@@ -40,7 +40,7 @@ jobs:
40
40
  with:
41
41
  persist-credentials: false
42
42
  - name: Build wheels
43
- uses: PyO3/maturin-action@ea5bac0f1ccd0ab11c805e2b804bfcb65dac2eab # v1
43
+ uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
44
44
  with:
45
45
  target: ${{ matrix.platform.target }}
46
46
  args: --release --out dist
@@ -70,7 +70,7 @@ jobs:
70
70
  with:
71
71
  persist-credentials: false
72
72
  - name: Build wheels
73
- uses: PyO3/maturin-action@ea5bac0f1ccd0ab11c805e2b804bfcb65dac2eab # v1
73
+ uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
74
74
  with:
75
75
  target: ${{ matrix.platform.target }}
76
76
  args: --release --out dist
@@ -96,7 +96,7 @@ jobs:
96
96
  with:
97
97
  persist-credentials: false
98
98
  - name: Build wheels
99
- uses: PyO3/maturin-action@ea5bac0f1ccd0ab11c805e2b804bfcb65dac2eab # v1
99
+ uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
100
100
  with:
101
101
  target: ${{ matrix.platform.target }}
102
102
  args: --release --out dist
@@ -121,7 +121,7 @@ jobs:
121
121
  with:
122
122
  persist-credentials: false
123
123
  - name: Build wheels
124
- uses: PyO3/maturin-action@ea5bac0f1ccd0ab11c805e2b804bfcb65dac2eab # v1
124
+ uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
125
125
  with:
126
126
  target: ${{ matrix.platform.target }}
127
127
  args: --release --out dist
@@ -139,7 +139,7 @@ jobs:
139
139
  with:
140
140
  persist-credentials: false
141
141
  - name: Build sdist
142
- uses: PyO3/maturin-action@ea5bac0f1ccd0ab11c805e2b804bfcb65dac2eab # v1
142
+ uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
143
143
  with:
144
144
  command: sdist
145
145
  args: --out dist
@@ -167,12 +167,12 @@ jobs:
167
167
  steps:
168
168
  - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
169
169
  - name: Generate artifact attestation
170
- uses: actions/attest-build-provenance@7668571508540a607bdfd90a87a560489fe372eb # v2
170
+ uses: actions/attest-build-provenance@520d128f165991a6c774bcb264f323e3d70747f4 # v2
171
171
  with:
172
172
  subject-path: 'wheels-*/*'
173
173
  - name: Publish to PyPI
174
174
  if: ${{ startsWith(github.ref, 'refs/tags/') }}
175
- uses: PyO3/maturin-action@ea5bac0f1ccd0ab11c805e2b804bfcb65dac2eab # v1
175
+ uses: PyO3/maturin-action@5f8a1b3b0aad13193f46c9131f9b9e663def8ce5 # v1
176
176
  with:
177
177
  command: upload
178
178
  args: --non-interactive --skip-existing wheels-*/*
@@ -27,7 +27,7 @@ jobs:
27
27
  env:
28
28
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29
29
  - name: Upload SARIF file
30
- uses: github/codeql-action/upload-sarif@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1
30
+ uses: github/codeql-action/upload-sarif@f6091c0113d1dcf9b98e269ee48e8a7e51b7bdd4 # v3.28.5
31
31
  with:
32
32
  sarif_file: results.sarif
33
33
  category: zizmor
@@ -273,9 +273,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
273
273
 
274
274
  [[package]]
275
275
  name = "clap"
276
- version = "4.5.26"
276
+ version = "4.5.27"
277
277
  source = "registry+https://github.com/rust-lang/crates.io-index"
278
- checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783"
278
+ checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796"
279
279
  dependencies = [
280
280
  "clap_builder",
281
281
  "clap_derive",
@@ -293,9 +293,9 @@ dependencies = [
293
293
 
294
294
  [[package]]
295
295
  name = "clap_builder"
296
- version = "4.5.26"
296
+ version = "4.5.27"
297
297
  source = "registry+https://github.com/rust-lang/crates.io-index"
298
- checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121"
298
+ checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7"
299
299
  dependencies = [
300
300
  "anstream",
301
301
  "anstyle",
@@ -616,9 +616,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
616
616
 
617
617
  [[package]]
618
618
  name = "github-actions-models"
619
- version = "0.22.0"
619
+ version = "0.23.0"
620
620
  source = "registry+https://github.com/rust-lang/crates.io-index"
621
- checksum = "ea4c30fa8bf11e002d3ca72233e7a7bac33ffce4dc50877d63a8f5a161e0cd84"
621
+ checksum = "f2269402e4d8fe06d41aa858a0fe15a49842764334d0aacc52f5f41e11466e30"
622
622
  dependencies = [
623
623
  "indexmap",
624
624
  "serde",
@@ -972,9 +972,9 @@ dependencies = [
972
972
 
973
973
  [[package]]
974
974
  name = "indexmap"
975
- version = "2.7.0"
975
+ version = "2.7.1"
976
976
  source = "registry+https://github.com/rust-lang/crates.io-index"
977
- checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
977
+ checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
978
978
  dependencies = [
979
979
  "equivalent",
980
980
  "hashbrown",
@@ -983,9 +983,9 @@ dependencies = [
983
983
 
984
984
  [[package]]
985
985
  name = "indicatif"
986
- version = "0.17.9"
986
+ version = "0.17.11"
987
987
  source = "registry+https://github.com/rust-lang/crates.io-index"
988
- checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281"
988
+ checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
989
989
  dependencies = [
990
990
  "console",
991
991
  "number_prefix",
@@ -997,13 +997,14 @@ dependencies = [
997
997
 
998
998
  [[package]]
999
999
  name = "insta"
1000
- version = "1.42.0"
1000
+ version = "1.42.1"
1001
1001
  source = "registry+https://github.com/rust-lang/crates.io-index"
1002
- checksum = "6513e4067e16e69ed1db5ab56048ed65db32d10ba5fc1217f5393f8f17d8b5a5"
1002
+ checksum = "71c1b125e30d93896b365e156c33dadfffab45ee8400afcbba4752f59de08a86"
1003
1003
  dependencies = [
1004
1004
  "console",
1005
1005
  "linked-hash-map",
1006
1006
  "once_cell",
1007
+ "pin-project",
1007
1008
  "similar",
1008
1009
  ]
1009
1010
 
@@ -1072,6 +1073,16 @@ dependencies = [
1072
1073
  "redox_syscall",
1073
1074
  ]
1074
1075
 
1076
+ [[package]]
1077
+ name = "line-index"
1078
+ version = "0.1.2"
1079
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1080
+ checksum = "3e27e0ed5a392a7f5ba0b3808a2afccff16c64933312c84b57618b49d1209bd2"
1081
+ dependencies = [
1082
+ "nohash-hasher",
1083
+ "text-size",
1084
+ ]
1085
+
1075
1086
  [[package]]
1076
1087
  name = "linked-hash-map"
1077
1088
  version = "0.5.6"
@@ -1176,6 +1187,12 @@ dependencies = [
1176
1187
  "windows-sys 0.52.0",
1177
1188
  ]
1178
1189
 
1190
+ [[package]]
1191
+ name = "nohash-hasher"
1192
+ version = "0.2.0"
1193
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1194
+ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
1195
+
1179
1196
  [[package]]
1180
1197
  name = "nom"
1181
1198
  version = "7.1.3"
@@ -1297,6 +1314,26 @@ dependencies = [
1297
1314
  "sha2",
1298
1315
  ]
1299
1316
 
1317
+ [[package]]
1318
+ name = "pin-project"
1319
+ version = "1.1.8"
1320
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1321
+ checksum = "1e2ec53ad785f4d35dac0adea7f7dc6f1bb277ad84a680c7afefeae05d1f5916"
1322
+ dependencies = [
1323
+ "pin-project-internal",
1324
+ ]
1325
+
1326
+ [[package]]
1327
+ name = "pin-project-internal"
1328
+ version = "1.1.8"
1329
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1330
+ checksum = "d56a66c0c55993aa927429d0f8a0abfd74f084e4d9c192cffed01e418d83eefb"
1331
+ dependencies = [
1332
+ "proc-macro2",
1333
+ "quote",
1334
+ "syn 2.0.90",
1335
+ ]
1336
+
1300
1337
  [[package]]
1301
1338
  name = "pin-project-lite"
1302
1339
  version = "0.2.15"
@@ -1766,9 +1803,9 @@ dependencies = [
1766
1803
 
1767
1804
  [[package]]
1768
1805
  name = "serde_json"
1769
- version = "1.0.135"
1806
+ version = "1.0.137"
1770
1807
  source = "registry+https://github.com/rust-lang/crates.io-index"
1771
- checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9"
1808
+ checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b"
1772
1809
  dependencies = [
1773
1810
  "itoa",
1774
1811
  "memchr",
@@ -2083,6 +2120,12 @@ version = "0.4.1"
2083
2120
  source = "registry+https://github.com/rust-lang/crates.io-index"
2084
2121
  checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
2085
2122
 
2123
+ [[package]]
2124
+ name = "text-size"
2125
+ version = "1.1.1"
2126
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2127
+ checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233"
2128
+
2086
2129
  [[package]]
2087
2130
  name = "thiserror"
2088
2131
  version = "1.0.69"
@@ -2332,9 +2375,9 @@ dependencies = [
2332
2375
 
2333
2376
  [[package]]
2334
2377
  name = "tracing-indicatif"
2335
- version = "0.3.8"
2378
+ version = "0.3.9"
2336
2379
  source = "registry+https://github.com/rust-lang/crates.io-index"
2337
- checksum = "74ba258e9de86447f75edf6455fded8e5242704c6fccffe7bf8d7fb6daef1180"
2380
+ checksum = "8201ca430e0cd893ef978226fd3516c06d9c494181c8bf4e5b32e30ed4b40aa1"
2338
2381
  dependencies = [
2339
2382
  "indicatif",
2340
2383
  "tracing",
@@ -3108,7 +3151,7 @@ dependencies = [
3108
3151
 
3109
3152
  [[package]]
3110
3153
  name = "zizmor"
3111
- version = "1.2.2"
3154
+ version = "1.3.0"
3112
3155
  dependencies = [
3113
3156
  "annotate-snippets",
3114
3157
  "anstream",
@@ -3126,6 +3169,7 @@ dependencies = [
3126
3169
  "indicatif",
3127
3170
  "insta",
3128
3171
  "itertools",
3172
+ "line-index",
3129
3173
  "owo-colors",
3130
3174
  "pest",
3131
3175
  "pest_derive",
@@ -1,7 +1,7 @@
1
1
  [package]
2
2
  name = "zizmor"
3
3
  description = "Static analysis for GitHub Actions"
4
- version = "1.2.2"
4
+ version = "1.3.0"
5
5
  edition = "2021"
6
6
  repository = "https://github.com/woodruffw/zizmor"
7
7
  homepage = "https://github.com/woodruffw/zizmor"
@@ -17,18 +17,19 @@ annotate-snippets = "0.11.5"
17
17
  anstream = "0.6.18"
18
18
  anyhow = "1.0.95"
19
19
  camino = { version = "1.1.9", features = ["serde1"] }
20
- clap = { version = "4.5.26", features = ["derive", "env"] }
20
+ clap = { version = "4.5.27", features = ["derive", "env"] }
21
21
  clap-verbosity-flag = { version = "3.0.2", features = [
22
22
  "tracing",
23
23
  ], default-features = false }
24
24
  etcetera = "0.8.0"
25
25
  flate2 = "1.0.35"
26
- github-actions-models = "0.22.0"
26
+ github-actions-models = "0.23.0"
27
27
  http-cache-reqwest = "0.15.0"
28
28
  human-panic = "2.0.1"
29
- indexmap = "2.7.0"
30
- indicatif = "0.17.9"
29
+ indexmap = "2.7.1"
30
+ indicatif = "0.17.11"
31
31
  itertools = "0.14.0"
32
+ line-index = "0.1.2"
32
33
  owo-colors = "4.1.0"
33
34
  pest = "2.7.15"
34
35
  pest_derive = "2.7.15"
@@ -41,7 +42,7 @@ reqwest = { version = "0.12.12", features = [
41
42
  reqwest-middleware = "0.4.0"
42
43
  serde = { version = "1.0.217", features = ["derive"] }
43
44
  serde-sarif = "0.7.0"
44
- serde_json = "1.0.135"
45
+ serde_json = "1.0.137"
45
46
  serde_yaml = "0.9.34"
46
47
  # TODO remove pending https://github.com/tree-sitter/tree-sitter/pull/4034
47
48
  streaming-iterator = "0.1.9"
@@ -49,7 +50,7 @@ tar = "0.4.43"
49
50
  terminal-link = "0.1.0"
50
51
  tokio = { version = "1.43.0", features = ["rt-multi-thread"] }
51
52
  tracing = "0.1.41"
52
- tracing-indicatif = "0.3.8"
53
+ tracing-indicatif = "0.3.9"
53
54
  tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
54
55
  tree-sitter = "0.24.7"
55
56
  tree-sitter-bash = "0.23.3"
@@ -65,6 +66,6 @@ lto = true
65
66
 
66
67
  [dev-dependencies]
67
68
  assert_cmd = "2.0.16"
68
- insta = { version = "1.42.0" }
69
+ insta = { version = "1.42.1" }
69
70
  pretty_assertions = "1.4.1"
70
71
  serde_json_path = "0.7.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zizmor
3
- Version: 1.2.2
3
+ Version: 1.3.0
4
4
  License-File: LICENSE
5
5
  Summary: Static analysis for GitHub Actions
6
6
  Keywords: cli,github-actions,static-analysis,security
@@ -849,7 +849,7 @@ not using `pull_request_target` for auto-merge workflows.
849
849
  jobs:
850
850
  automerge:
851
851
  runs-on: ubuntu-latest
852
- if: github.actor == 'dependabot[bot] && github.repository == 'me/my-repo'
852
+ if: github.actor == 'dependabot[bot]' && github.repository == github.event.pull_request.head.repo.full_name
853
853
  steps:
854
854
  - run: gh pr merge --auto --merge "$PR_URL"
855
855
  env:
@@ -865,7 +865,7 @@ not using `pull_request_target` for auto-merge workflows.
865
865
  jobs:
866
866
  automerge:
867
867
  runs-on: ubuntu-latest
868
- if: github.event.pull_request.user.login == 'dependabot[bot] && github.repository == 'me/my-repo'
868
+ if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == github.event.pull_request.head.repo.full_name
869
869
  steps:
870
870
  - run: gh pr merge --auto --merge "$PR_URL"
871
871
  env:
@@ -873,6 +873,67 @@ not using `pull_request_target` for auto-merge workflows.
873
873
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
874
874
  ```
875
875
 
876
+ ## `overprovisioned-secrets`
877
+
878
+ | Type | Examples | Introduced in | Works offline | Enabled by default |
879
+ |----------|-------------------------|---------------|----------------|--------------------|
880
+ | Workflow | [overprovisioned-secrets.yml] | v1.3.0 | ✅ | ✅ |
881
+
882
+ [overprovisioned-secrets.yml]: https://github.com/woodruffw/gha-hazmat/blob/main/.github/workflows/overprovisioned-secrets.yml
883
+
884
+ Detects excessive sharing of the `secrets` context.
885
+
886
+ Typically, users access the `secrets` context via its individual members:
887
+
888
+ ```yaml
889
+ env:
890
+ SECRET_ONE: ${{ secrets.SECRET_ONE }}
891
+ SECRET_TWO: ${{ secrets.SECRET_TWO }}
892
+ ```
893
+
894
+ This allows the Actions runner to only expose the secrets actually used by
895
+ the workflow to the job environment.
896
+
897
+ However, if the user instead accesses the *entire* `secrets` context:
898
+
899
+ ```yaml
900
+ env:
901
+ SECRETS: ${{ toJson(secrets) }}
902
+ ```
903
+
904
+ ...then the entire `secrets` context is exposed to the runner, even if
905
+ only a single secret is actually needed.
906
+
907
+ ### Remediation
908
+
909
+ In general, users should avoid loading the entire `secrets` context.
910
+ Secrets should be accessed individually by name.
911
+
912
+ === "Before :warning:"
913
+
914
+ ```yaml title="overprovisioned.yml" hl_lines="7"
915
+ jobs:
916
+ deploy:
917
+ runs-on: ubuntu-latest
918
+ steps:
919
+ - run: ./deploy.sh
920
+ env:
921
+ SECRETS: ${{ toJSON(secrets) }}
922
+ ```
923
+
924
+ === "After :white_check_mark:"
925
+
926
+ ```yaml title="overprovisioned.yml" hl_lines="7-8"
927
+ jobs:
928
+ deploy:
929
+ runs-on: ubuntu-latest
930
+ steps:
931
+ - run: ./deploy.sh
932
+ env:
933
+ SECRET_ONE: ${{ secrets.SECRET_ONE }}
934
+ SECRET_TWO: ${{ secrets.SECRET_TWO }}
935
+ ```
936
+
876
937
  [ArtiPACKED: Hacking Giants Through a Race Condition in GitHub Actions Artifacts]: https://unit42.paloaltonetworks.com/github-repo-artifacts-leak-tokens/
877
938
  [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests]: https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/
878
939
  [What the fork? Imposter commits in GitHub Actions and CI/CD]: https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd
@@ -9,7 +9,35 @@ of `zizmor`.
9
9
 
10
10
  ## Next (UNRELEASED)
11
11
 
12
- Nothing to see here (yet!)
12
+ Nothing to see here yet!
13
+
14
+ ## v1.3.0
15
+
16
+ This release comes with one new audit ([overprovisioned-secrets]), plus a
17
+ handful of bugfixes and analysis improvements to existing audits. It also
18
+ comes with a special easter egg for those who wish to *kvell* about their
19
+ audit results.
20
+
21
+ ### New Features 🌈
22
+
23
+ * **New audit**: [overprovisioned-secrets] detects uses of the `secrets`
24
+ context that result in excessive secret provisioning (#485)
25
+ * Added a special naches mode for when you're feeling particularly proud of
26
+ your audit results (#490)
27
+
28
+ ### Improvements 🌱
29
+
30
+ * `zizmor` produces slightly more informative error messages when given
31
+ an invalid input file (#482)
32
+ * Case insensitivity in contexts is now handeled more consistently
33
+ and pervasively (#491)
34
+
35
+ ### Bug Fixes 🐛
36
+
37
+ * Fixed a bug where `zizmor` would fail to discover actions within
38
+ subdirectories of `.github/workflows` (#477)
39
+ * Fixed a bug where `zizmor` would fail to parse composite action definitions
40
+ with no `name` field (#487)
13
41
 
14
42
  ## v1.2.2
15
43
 
@@ -490,3 +518,4 @@ This is one of `zizmor`'s bigger recent releases! Key enhancements include:
490
518
  [secrets-inherit]: ./audits.md#secrets-inherit
491
519
  [unpinned-uses]: ./audits.md#unpinned-uses
492
520
  [bot-conditions]: ./audits.md#bot-conditions
521
+ [overprovisioned-secrets]: ./audits.md#overprovisioned-secrets
@@ -48,6 +48,22 @@
48
48
  - autotag-dev/autotag#142
49
49
 
50
50
 
51
+ - ![](https://github.com/BerkeleyLearnVerify.png?size=40){ width="40" loading=lazy align=left } BerkeleyLearnVerify
52
+
53
+ ---
54
+
55
+ ??? example "Examples"
56
+ - BerkeleyLearnVerify/Scenic#320
57
+
58
+
59
+ - ![](https://github.com/bitcoindevkit.png?size=40){ width="40" loading=lazy align=left } bitcoindevkit
60
+
61
+ ---
62
+
63
+ ??? example "Examples"
64
+ - bitcoindevkit/bdk#1778
65
+
66
+
51
67
  - ![](https://github.com/blakeblackshear.png?size=40){ width="40" loading=lazy align=left } blakeblackshear
52
68
 
53
69
  ---
@@ -445,6 +461,15 @@
445
461
  - numpy/numpy.org#797
446
462
 
447
463
 
464
+ - ![](https://github.com/onnx.png?size=40){ width="40" loading=lazy align=left } onnx
465
+
466
+ ---
467
+
468
+ ??? example "Examples"
469
+ - onnx/onnx#6661
470
+ - onnx/onnx#6662
471
+
472
+
448
473
  - ![](https://github.com/Orange-OpenSource.png?size=40){ width="40" loading=lazy align=left } Orange-OpenSource
449
474
 
450
475
  ---
@@ -514,6 +539,7 @@
514
539
  ---
515
540
 
516
541
  ??? example "Examples"
542
+ - pymc-devs/pymc#7624
517
543
  - pymc-devs/pytensor#1136
518
544
 
519
545
 
@@ -666,6 +692,7 @@
666
692
  - sigstore/cosign#3959
667
693
  - sigstore/fulcio#1910
668
694
  - sigstore/gitsign#602
695
+ - sigstore/sigstore-rs#424
669
696
 
670
697
 
671
698
  - ![](https://github.com/simpeg.png?size=40){ width="40" loading=lazy align=left } simpeg
@@ -11,6 +11,8 @@ ashishb/wp2hugo#91
11
11
  astral-sh/ruff#14844
12
12
  astropy/astropy#17315
13
13
  autotag-dev/autotag#142
14
+ BerkeleyLearnVerify/Scenic#320
15
+ bitcoindevkit/bdk#1778
14
16
  blakeblackshear/frigate#15490
15
17
  brian-team/brian2@d497b11a268549c0c491df2f5f9c6332c4f733d0
16
18
  cakephp/cakephp#18081
@@ -93,6 +95,8 @@ NLnetLabs/nsd#413
93
95
  NLnetLabs/unbound#1204
94
96
  numpy/numpy#27931
95
97
  numpy/numpy.org#797
98
+ onnx/onnx#6661
99
+ onnx/onnx#6662
96
100
  Ouranosinc/xclim#2023
97
101
  Orange-OpenSource/hurl#3574
98
102
  oxc-project/oxc#7844
@@ -105,6 +109,7 @@ pypa/packaging.python.org#1765
105
109
  pypa/pip-audit#851
106
110
  pypi/stdlib-list#138
107
111
  pypi/warehouse#16996
112
+ pymc-devs/pymc#7624
108
113
  pymc-devs/pytensor#1136
109
114
  pytest-dev/pytest#13062
110
115
  python/bedevere#652
@@ -134,6 +139,7 @@ Saghen/blink.cmp#991
134
139
  sigstore/cosign#3959
135
140
  sigstore/fulcio#1910
136
141
  sigstore/gitsign#602
142
+ sigstore/sigstore-rs#424
137
143
  simpeg/simpeg#1592
138
144
  termcolor/termcolor#89
139
145
  termux/termux-packages#22519
@@ -457,7 +457,7 @@ To do so, add the following to your `.pre-commit-config.yaml` `repos` section:
457
457
 
458
458
  ```yaml
459
459
  - repo: https://github.com/woodruffw/zizmor-pre-commit
460
- rev: v1.2.2 # (1)!
460
+ rev: v1.3.0 # (1)!
461
461
  hooks:
462
462
  - id: zizmor
463
463
  ```
@@ -2,7 +2,7 @@ use github_actions_models::common::{expr::ExplicitExpr, If};
2
2
 
3
3
  use super::{audit_meta, Audit};
4
4
  use crate::{
5
- expr::{self, Expr},
5
+ expr::{self, Context, Expr},
6
6
  finding::{Confidence, Severity},
7
7
  models::JobExt,
8
8
  };
@@ -73,10 +73,10 @@ impl BotConditions {
73
73
  func: _,
74
74
  args: exprs,
75
75
  }
76
- | Expr::Context {
76
+ | Expr::Context(Context {
77
77
  raw: _,
78
78
  components: exprs,
79
- } => exprs
79
+ }) => exprs
80
80
  .iter()
81
81
  .map(|arg| Self::walk_tree_for_bot_condition(arg, false))
82
82
  .reduce(|(bc, _), (bc_next, _)| (bc || bc_next, false))
@@ -92,9 +92,9 @@ impl BotConditions {
92
92
  }
93
93
  // == is trivially dominating.
94
94
  expr::BinOp::Eq => match (lhs.as_ref(), rhs.as_ref()) {
95
- (Expr::Context { raw, .. }, Expr::String(s))
96
- | (Expr::String(s), Expr::Context { raw, .. }) => {
97
- if raw == "github.actor" && s.ends_with("[bot]") {
95
+ (Expr::Context(ctx), Expr::String(s))
96
+ | (Expr::String(s), Expr::Context(ctx)) => {
97
+ if ctx == "github.actor" && s.ends_with("[bot]") {
98
98
  (true, true)
99
99
  } else {
100
100
  (false, true)
@@ -132,10 +132,13 @@ impl BotConditions {
132
132
  }
133
133
 
134
134
  fn bot_condition(expr: &str) -> Option<Confidence> {
135
- let Ok(expr) = (match ExplicitExpr::from_curly(expr) {
136
- Some(raw_expr) => Expr::parse(raw_expr.as_bare()),
137
- None => Expr::parse(expr),
138
- }) else {
135
+ // TODO: Remove clones here.
136
+ let bare = match ExplicitExpr::from_curly(expr) {
137
+ Some(raw_expr) => raw_expr.as_bare().to_string(),
138
+ None => expr.to_string(),
139
+ };
140
+
141
+ let Ok(expr) = Expr::parse(&bare) else {
139
142
  tracing::warn!("couldn't parse expression: {expr}");
140
143
  return None;
141
144
  };
@@ -166,6 +169,8 @@ mod tests {
166
169
  // Trivial dominating cases.
167
170
  ("github.actor == 'dependabot[bot]'", Confidence::High),
168
171
  ("'dependabot[bot]' == github.actor", Confidence::High),
172
+ ("'dependabot[bot]' == GitHub.actor", Confidence::High),
173
+ ("'dependabot[bot]' == GitHub.ACTOR", Confidence::High),
169
174
  // Dominating cases with OR.
170
175
  (
171
176
  "'dependabot[bot]' == github.actor || true",