zizmor 1.3.1__tar.gz → 1.4.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.
- {zizmor-1.3.1 → zizmor-1.4.0}/.github/dependabot.yml +9 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/.github/workflows/ci.yml +2 -2
- zizmor-1.4.0/.github/workflows/docker.yml +156 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/.github/workflows/pypi.yml +11 -11
- {zizmor-1.3.1 → zizmor-1.4.0}/.github/workflows/site.yml +1 -1
- {zizmor-1.3.1 → zizmor-1.4.0}/.github/workflows/zizmor.yml +2 -2
- {zizmor-1.3.1 → zizmor-1.4.0}/Cargo.lock +27 -27
- {zizmor-1.3.1 → zizmor-1.4.0}/Cargo.toml +10 -10
- zizmor-1.4.0/Dockerfile +30 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/PKG-INFO +1 -1
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/audits.md +70 -1
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/installation.md +8 -1
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/release-notes.md +37 -1
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/snippets/trophies.md +70 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/snippets/trophies.txt +14 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/usage.md +7 -1
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/artipacked.rs +2 -2
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/bot_conditions.rs +12 -2
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/insecure_commands.rs +1 -1
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/mod.rs +2 -1
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/overprovisioned_secrets.rs +1 -1
- zizmor-1.4.0/src/audit/unredacted_secrets.rs +121 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/finding/mod.rs +21 -1
- {zizmor-1.3.1 → zizmor-1.4.0}/src/github_api.rs +2 -2
- {zizmor-1.3.1 → zizmor-1.4.0}/src/main.rs +2 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/sarif.rs +25 -6
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshot.rs +9 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__bot_conditions.snap +4 -4
- zizmor-1.4.0/tests/snapshots/snapshot__unredacted_secrets.snap +22 -0
- zizmor-1.4.0/tests/test-data/unredacted-secrets.yml +18 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/.github/workflows/release.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/.gitignore +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/CONTRIBUTING.md +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/LICENSE +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/Makefile +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/README.md +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/assets/favicon48x48.png +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/assets/rainbow.svg +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/assets/zizmor-demo.gif +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/configuration.md +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/development.md +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/index.md +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/magiclink.css +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/quickstart.md +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/snippets/help.txt +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/snippets/render-sponsors.py +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/snippets/render-trophies.py +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/snippets/sponsors.html +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/snippets/sponsors.json +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/docs/trophy-case.md +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/mkdocs.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/pyproject.toml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/cache_poisoning.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/dangerous_triggers.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/excessive_permissions.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/github_env.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/hardcoded_container_credentials.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/impostor_commit.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/known_vulnerable_actions.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/ref_confusion.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/secrets_inherit.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/self_hosted_runner.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/template_injection.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/unpinned_uses.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/audit/use_trusted_publishing.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/config.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/expr/expr.pest +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/expr/mod.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/models/coordinate.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/models/uses.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/models.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/registry.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/render.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/state.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/src/utils.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/acceptance.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/common.rs +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__artipacked-2.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__artipacked-3.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__artipacked-4.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__artipacked.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-10.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-11.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-12.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-13.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-14.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-2.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-3.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-4.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-5.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-6.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-7.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-8.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning-9.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cache_poisoning.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__cant_retrieve.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-10.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-11.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-12.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-2.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-3.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-4.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-5.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-6.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-7.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-8.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions-9.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__excessive_permissions.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__github_env-2.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__github_env-3.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__github_env.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__insecure_commands-2.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__insecure_commands-3.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__insecure_commands.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__invalid_inputs.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__overprovisioned_secrets.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__ref_confusion-2.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__ref_confusion.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__secrets_inherit.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__self_hosted-2.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__self_hosted-3.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__self_hosted-4.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__self_hosted-5.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__self_hosted-6.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__self_hosted-7.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__self_hosted-8.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__self_hosted.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__template_injection-2.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__template_injection-3.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__template_injection-4.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__template_injection-5.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__template_injection-6.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__template_injection-7.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__template_injection-8.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__template_injection.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__unpinned_uses-2.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__unpinned_uses-3.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__unpinned_uses-4.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/snapshots/snapshot__unpinned_uses.snap +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/artipacked/issue-447-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/artipacked.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/bot-conditions.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/caching-disabled-by-default.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/caching-enabled-by-default.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/caching-not-configurable.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/caching-opt-in-boolean-toggle.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/caching-opt-in-boolish-toggle.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/caching-opt-in-expression.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/caching-opt-in-multi-value-toggle.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/caching-opt-out.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/issue-343-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/issue-378-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/no-cache-aware-steps.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/publisher-step.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/workflow-release-branch-trigger.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning/workflow-tag-trigger.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/cache-poisoning.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/issue-336-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/issue-472-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/jobs-broaden-permissions.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/reusable-workflow-call.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/reusable-workflow-other-triggers.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/workflow-default-perms-all-jobs-explicit.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/workflow-default-perms.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/workflow-empty-perms.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/workflow-read-all.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/workflow-write-all.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions/workflow-write-explicit.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/excessive-permissions.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/github-env/action.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/github-env/github-path.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/github-env/issue-397-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/github_env.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/hardcoded-credentials.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/inlined-ignores.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/insecure-commands/action.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/insecure-commands.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/invalid/invalid-workflow.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/overprovisioned-secrets.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/ref-confusion/issue-518-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/ref-confusion.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/secrets-inherit.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/self-hosted/issue-283-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/self-hosted/self-hosted-matrix-dimension.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/self-hosted/self-hosted-matrix-exclusion.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/self-hosted/self-hosted-matrix-inclusion.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/self-hosted/self-hosted-runner-group.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/self-hosted/self-hosted-runner-label.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/self-hosted.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/template-injection/issue-22-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/template-injection/issue-339-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/template-injection/issue-418-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/template-injection/pr-317-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/template-injection/pr-425-backstop/action.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/template-injection/static-env.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/template-injection/template-injection-dynamic-matrix.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/template-injection/template-injection-static-matrix.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/template-injection.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/unpinned-uses/action.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/unpinned-uses/issue-433-repro.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/unpinned-uses.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/tests/test-data/use-trusted-publishing.yml +0 -0
- {zizmor-1.3.1 → zizmor-1.4.0}/uv.lock +0 -0
|
@@ -33,7 +33,7 @@ jobs:
|
|
|
33
33
|
|
|
34
34
|
- uses: Swatinem/rust-cache@f0deed1e0edfc6a9be95417288c0e1099b1eeec3 # v2
|
|
35
35
|
|
|
36
|
-
- uses: astral-sh/setup-uv@
|
|
36
|
+
- uses: astral-sh/setup-uv@1edb52594c857e2b5b13128931090f0640537287 # v5.3.0
|
|
37
37
|
|
|
38
38
|
- name: Test
|
|
39
39
|
run: cargo test --features online-tests
|
|
@@ -52,7 +52,7 @@ jobs:
|
|
|
52
52
|
with:
|
|
53
53
|
persist-credentials: false
|
|
54
54
|
|
|
55
|
-
- uses: astral-sh/setup-uv@
|
|
55
|
+
- uses: astral-sh/setup-uv@1edb52594c857e2b5b13128931090f0640537287 # v5.3.0
|
|
56
56
|
|
|
57
57
|
- name: Test site
|
|
58
58
|
run: make site
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
name: Build and publish Docker images
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
version:
|
|
7
|
+
description: 'The version of zizmor to build against'
|
|
8
|
+
required: true
|
|
9
|
+
|
|
10
|
+
latest:
|
|
11
|
+
description: 'Whether to tag the image as latest'
|
|
12
|
+
required: false
|
|
13
|
+
default: true
|
|
14
|
+
type: boolean
|
|
15
|
+
|
|
16
|
+
permissions: {}
|
|
17
|
+
|
|
18
|
+
env:
|
|
19
|
+
ZIZMOR_IMAGE: ghcr.io/woodruffw/zizmor
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
build:
|
|
23
|
+
strategy:
|
|
24
|
+
fail-fast: false
|
|
25
|
+
matrix:
|
|
26
|
+
image:
|
|
27
|
+
- runner: ubuntu-latest
|
|
28
|
+
platform: linux/amd64
|
|
29
|
+
platform-pair: linux-amd64
|
|
30
|
+
- runner: ubuntu-24.04-arm
|
|
31
|
+
platform: linux/arm64
|
|
32
|
+
platform-pair: linux-arm64
|
|
33
|
+
|
|
34
|
+
name: Build and publish Docker image (${{ matrix.image.runner }})
|
|
35
|
+
|
|
36
|
+
runs-on: ${{ matrix.image.runner }}
|
|
37
|
+
|
|
38
|
+
environment:
|
|
39
|
+
name: docker
|
|
40
|
+
|
|
41
|
+
permissions:
|
|
42
|
+
contents: read
|
|
43
|
+
packages: write
|
|
44
|
+
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
|
47
|
+
with:
|
|
48
|
+
persist-credentials: false
|
|
49
|
+
|
|
50
|
+
- name: Set up Docker Buildx
|
|
51
|
+
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v3
|
|
52
|
+
with:
|
|
53
|
+
cache-binary: false
|
|
54
|
+
|
|
55
|
+
- name: Extract Docker metadata
|
|
56
|
+
id: docker-metadata
|
|
57
|
+
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5
|
|
58
|
+
with:
|
|
59
|
+
images: "${{ env.ZIZMOR_IMAGE }}"
|
|
60
|
+
|
|
61
|
+
- name: Login to GHCR
|
|
62
|
+
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v6
|
|
63
|
+
if: github.repository_owner == 'woodruffw'
|
|
64
|
+
with:
|
|
65
|
+
registry: ghcr.io
|
|
66
|
+
username: "${{ github.repository_owner }}"
|
|
67
|
+
password: "${{ secrets.GITHUB_TOKEN }}"
|
|
68
|
+
|
|
69
|
+
- name: Build and push by digest
|
|
70
|
+
id: build
|
|
71
|
+
uses: docker/build-push-action@0adf9959216b96bec444f325f1e493d4aa344497 # v6
|
|
72
|
+
with:
|
|
73
|
+
platforms: ${{ matrix.image.platform }}
|
|
74
|
+
labels: ${{ steps.docker-metadata.outputs.labels }}
|
|
75
|
+
outputs: type=image,"name=${{ env.ZIZMOR_IMAGE }}",push-by-digest=true,name-canonical=true,push=true
|
|
76
|
+
|
|
77
|
+
- name: Export digest
|
|
78
|
+
run: |
|
|
79
|
+
mkdir -p ${{ runner.temp }}/digests
|
|
80
|
+
digest="${DIGEST}"
|
|
81
|
+
touch "${{ runner.temp }}/digests/${digest#sha256:}"
|
|
82
|
+
env:
|
|
83
|
+
DIGEST: ${{ steps.build.outputs.digest }}
|
|
84
|
+
|
|
85
|
+
- name: Upload digest
|
|
86
|
+
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
|
|
87
|
+
with:
|
|
88
|
+
name: digests-${{ matrix.image.platform-pair }}
|
|
89
|
+
path: ${{ runner.temp }}/digests/*
|
|
90
|
+
if-no-files-found: error
|
|
91
|
+
retention-days: 1
|
|
92
|
+
|
|
93
|
+
merge:
|
|
94
|
+
needs: build
|
|
95
|
+
runs-on: ubuntu-latest
|
|
96
|
+
|
|
97
|
+
environment:
|
|
98
|
+
name: docker
|
|
99
|
+
|
|
100
|
+
permissions:
|
|
101
|
+
contents: read
|
|
102
|
+
packages: write
|
|
103
|
+
|
|
104
|
+
steps:
|
|
105
|
+
- name: Download digests
|
|
106
|
+
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
|
|
107
|
+
with:
|
|
108
|
+
path: ${{ runner.temp }}/digests
|
|
109
|
+
pattern: digests-*
|
|
110
|
+
merge-multiple: true
|
|
111
|
+
|
|
112
|
+
- name: Login to GHCR
|
|
113
|
+
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v6
|
|
114
|
+
if: github.repository_owner == 'woodruffw'
|
|
115
|
+
with:
|
|
116
|
+
registry: ghcr.io
|
|
117
|
+
username: ${{ github.repository_owner }}
|
|
118
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
119
|
+
|
|
120
|
+
- name: Set up Docker Buildx
|
|
121
|
+
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v3
|
|
122
|
+
with:
|
|
123
|
+
cache-binary: false
|
|
124
|
+
|
|
125
|
+
- name: Extract Docker metadata
|
|
126
|
+
id: docker-metadata
|
|
127
|
+
uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5
|
|
128
|
+
env:
|
|
129
|
+
DOCKER_METADATA_ANNOTATIONS_LEVELS: index
|
|
130
|
+
with:
|
|
131
|
+
images: "${{ env.ZIZMOR_IMAGE }}"
|
|
132
|
+
tags: |
|
|
133
|
+
type=raw,value=${{ github.event.inputs.version }}
|
|
134
|
+
typw=raw,value=latest,enable=${{ github.event.inputs.latest }}
|
|
135
|
+
|
|
136
|
+
- name: Create manifest list and push
|
|
137
|
+
working-directory: ${{ runner.temp }}/digests
|
|
138
|
+
# NOTE: annotation technique adapted from Ruff's build-docker.yml,
|
|
139
|
+
# see: https://github.com/astral-sh/ruff/blob/6e34f74c16/.github/workflows/build-docker.yml
|
|
140
|
+
run: |
|
|
141
|
+
readarray -t lines <<< "$DOCKER_METADATA_OUTPUT_ANNOTATIONS"
|
|
142
|
+
annotations=()
|
|
143
|
+
for line in "${lines[@]}"; do
|
|
144
|
+
annotations+=(--annotation "$line")
|
|
145
|
+
done
|
|
146
|
+
|
|
147
|
+
docker buildx imagetools create \
|
|
148
|
+
"${annotations[@]}" \
|
|
149
|
+
$(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
|
|
150
|
+
$(printf '${{ env.ZIZMOR_IMAGE }}@sha256:%s ' *)
|
|
151
|
+
|
|
152
|
+
- name: Inspect image
|
|
153
|
+
run: |
|
|
154
|
+
docker buildx imagetools inspect "${ZIZMOR_IMAGE}:${VERSION}"
|
|
155
|
+
env:
|
|
156
|
+
VERSION: ${{ steps.docker-metadata.outputs.version }}
|
|
@@ -40,14 +40,14 @@ jobs:
|
|
|
40
40
|
with:
|
|
41
41
|
persist-credentials: false
|
|
42
42
|
- name: Build wheels
|
|
43
|
-
uses: PyO3/maturin-action@
|
|
43
|
+
uses: PyO3/maturin-action@53965ae436bfa278197425c78ac1e3eeebc7cc33 # v1
|
|
44
44
|
with:
|
|
45
45
|
target: ${{ matrix.platform.target }}
|
|
46
46
|
args: --release --out dist
|
|
47
47
|
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} # zizmor: ignore[cache-poisoning]
|
|
48
48
|
manylinux: ${{ matrix.platform.manylinux }}
|
|
49
49
|
- name: Upload wheels
|
|
50
|
-
uses: actions/upload-artifact@
|
|
50
|
+
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
|
|
51
51
|
with:
|
|
52
52
|
name: wheels-linux-${{ matrix.platform.target }}
|
|
53
53
|
path: dist
|
|
@@ -70,14 +70,14 @@ jobs:
|
|
|
70
70
|
with:
|
|
71
71
|
persist-credentials: false
|
|
72
72
|
- name: Build wheels
|
|
73
|
-
uses: PyO3/maturin-action@
|
|
73
|
+
uses: PyO3/maturin-action@53965ae436bfa278197425c78ac1e3eeebc7cc33 # v1
|
|
74
74
|
with:
|
|
75
75
|
target: ${{ matrix.platform.target }}
|
|
76
76
|
args: --release --out dist
|
|
77
77
|
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} # zizmor: ignore[cache-poisoning]
|
|
78
78
|
manylinux: musllinux_1_2
|
|
79
79
|
- name: Upload wheels
|
|
80
|
-
uses: actions/upload-artifact@
|
|
80
|
+
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
|
|
81
81
|
with:
|
|
82
82
|
name: wheels-musllinux-${{ matrix.platform.target }}
|
|
83
83
|
path: dist
|
|
@@ -96,13 +96,13 @@ jobs:
|
|
|
96
96
|
with:
|
|
97
97
|
persist-credentials: false
|
|
98
98
|
- name: Build wheels
|
|
99
|
-
uses: PyO3/maturin-action@
|
|
99
|
+
uses: PyO3/maturin-action@53965ae436bfa278197425c78ac1e3eeebc7cc33 # v1
|
|
100
100
|
with:
|
|
101
101
|
target: ${{ matrix.platform.target }}
|
|
102
102
|
args: --release --out dist
|
|
103
103
|
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} # zizmor: ignore[cache-poisoning]
|
|
104
104
|
- name: Upload wheels
|
|
105
|
-
uses: actions/upload-artifact@
|
|
105
|
+
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
|
|
106
106
|
with:
|
|
107
107
|
name: wheels-windows-${{ matrix.platform.target }}
|
|
108
108
|
path: dist
|
|
@@ -121,13 +121,13 @@ jobs:
|
|
|
121
121
|
with:
|
|
122
122
|
persist-credentials: false
|
|
123
123
|
- name: Build wheels
|
|
124
|
-
uses: PyO3/maturin-action@
|
|
124
|
+
uses: PyO3/maturin-action@53965ae436bfa278197425c78ac1e3eeebc7cc33 # v1
|
|
125
125
|
with:
|
|
126
126
|
target: ${{ matrix.platform.target }}
|
|
127
127
|
args: --release --out dist
|
|
128
128
|
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} # zizmor: ignore[cache-poisoning]
|
|
129
129
|
- name: Upload wheels
|
|
130
|
-
uses: actions/upload-artifact@
|
|
130
|
+
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
|
|
131
131
|
with:
|
|
132
132
|
name: wheels-macos-${{ matrix.platform.target }}
|
|
133
133
|
path: dist
|
|
@@ -139,12 +139,12 @@ jobs:
|
|
|
139
139
|
with:
|
|
140
140
|
persist-credentials: false
|
|
141
141
|
- name: Build sdist
|
|
142
|
-
uses: PyO3/maturin-action@
|
|
142
|
+
uses: PyO3/maturin-action@53965ae436bfa278197425c78ac1e3eeebc7cc33 # v1
|
|
143
143
|
with:
|
|
144
144
|
command: sdist
|
|
145
145
|
args: --out dist
|
|
146
146
|
- name: Upload sdist
|
|
147
|
-
uses: actions/upload-artifact@
|
|
147
|
+
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4
|
|
148
148
|
with:
|
|
149
149
|
name: wheels-sdist
|
|
150
150
|
path: dist
|
|
@@ -172,7 +172,7 @@ jobs:
|
|
|
172
172
|
subject-path: 'wheels-*/*'
|
|
173
173
|
- name: Publish to PyPI
|
|
174
174
|
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
175
|
-
uses: PyO3/maturin-action@
|
|
175
|
+
uses: PyO3/maturin-action@53965ae436bfa278197425c78ac1e3eeebc7cc33 # v1
|
|
176
176
|
with:
|
|
177
177
|
command: upload
|
|
178
178
|
args: --non-interactive --skip-existing wheels-*/*
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
persist-credentials: false
|
|
31
31
|
|
|
32
32
|
- name: Install the latest version of uv
|
|
33
|
-
uses: astral-sh/setup-uv@
|
|
33
|
+
uses: astral-sh/setup-uv@1edb52594c857e2b5b13128931090f0640537287 # v5.3.0
|
|
34
34
|
|
|
35
35
|
- name: build site
|
|
36
36
|
run: make site
|
|
@@ -21,13 +21,13 @@ jobs:
|
|
|
21
21
|
with:
|
|
22
22
|
persist-credentials: false
|
|
23
23
|
- name: Install the latest version of uv
|
|
24
|
-
uses: astral-sh/setup-uv@
|
|
24
|
+
uses: astral-sh/setup-uv@1edb52594c857e2b5b13128931090f0640537287 # v5.3.0
|
|
25
25
|
- name: Run zizmor 🌈
|
|
26
26
|
run: uvx zizmor --format sarif . > results.sarif
|
|
27
27
|
env:
|
|
28
28
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
29
29
|
- name: Upload SARIF file
|
|
30
|
-
uses: github/codeql-action/upload-sarif@
|
|
30
|
+
uses: github/codeql-action/upload-sarif@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10
|
|
31
31
|
with:
|
|
32
32
|
sarif_file: results.sarif
|
|
33
33
|
category: zizmor
|
|
@@ -97,9 +97,9 @@ dependencies = [
|
|
|
97
97
|
|
|
98
98
|
[[package]]
|
|
99
99
|
name = "anyhow"
|
|
100
|
-
version = "1.0.
|
|
100
|
+
version = "1.0.96"
|
|
101
101
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
102
|
-
checksum = "
|
|
102
|
+
checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
|
|
103
103
|
|
|
104
104
|
[[package]]
|
|
105
105
|
name = "arrayvec"
|
|
@@ -273,9 +273,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|
|
273
273
|
|
|
274
274
|
[[package]]
|
|
275
275
|
name = "clap"
|
|
276
|
-
version = "4.5.
|
|
276
|
+
version = "4.5.30"
|
|
277
277
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
278
|
-
checksum = "
|
|
278
|
+
checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d"
|
|
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.
|
|
296
|
+
version = "4.5.30"
|
|
297
297
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
298
|
-
checksum = "
|
|
298
|
+
checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c"
|
|
299
299
|
dependencies = [
|
|
300
300
|
"anstream",
|
|
301
301
|
"anstyle",
|
|
@@ -305,9 +305,9 @@ dependencies = [
|
|
|
305
305
|
|
|
306
306
|
[[package]]
|
|
307
307
|
name = "clap_derive"
|
|
308
|
-
version = "4.5.
|
|
308
|
+
version = "4.5.28"
|
|
309
309
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
310
|
-
checksum = "
|
|
310
|
+
checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
|
|
311
311
|
dependencies = [
|
|
312
312
|
"heck",
|
|
313
313
|
"proc-macro2",
|
|
@@ -475,9 +475,9 @@ dependencies = [
|
|
|
475
475
|
|
|
476
476
|
[[package]]
|
|
477
477
|
name = "flate2"
|
|
478
|
-
version = "1.0
|
|
478
|
+
version = "1.1.0"
|
|
479
479
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
480
|
-
checksum = "
|
|
480
|
+
checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc"
|
|
481
481
|
dependencies = [
|
|
482
482
|
"crc32fast",
|
|
483
483
|
"miniz_oxide",
|
|
@@ -616,9 +616,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
|
|
|
616
616
|
|
|
617
617
|
[[package]]
|
|
618
618
|
name = "github-actions-models"
|
|
619
|
-
version = "0.
|
|
619
|
+
version = "0.26.0"
|
|
620
620
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
621
|
-
checksum = "
|
|
621
|
+
checksum = "63a17952a0374993a4c7f8df12bd75b3d1ed8fb9c78e8dbaa32cf451143faaaa"
|
|
622
622
|
dependencies = [
|
|
623
623
|
"indexmap",
|
|
624
624
|
"serde",
|
|
@@ -1168,9 +1168,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
|
|
1168
1168
|
|
|
1169
1169
|
[[package]]
|
|
1170
1170
|
name = "miniz_oxide"
|
|
1171
|
-
version = "0.8.
|
|
1171
|
+
version = "0.8.5"
|
|
1172
1172
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1173
|
-
checksum = "
|
|
1173
|
+
checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
|
|
1174
1174
|
dependencies = [
|
|
1175
1175
|
"adler2",
|
|
1176
1176
|
]
|
|
@@ -1259,9 +1259,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
|
|
|
1259
1259
|
|
|
1260
1260
|
[[package]]
|
|
1261
1261
|
name = "owo-colors"
|
|
1262
|
-
version = "4.
|
|
1262
|
+
version = "4.2.0"
|
|
1263
1263
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1264
|
-
checksum = "
|
|
1264
|
+
checksum = "1036865bb9422d3300cf723f657c2851d0e9ab12567854b1f4eba3d77decf564"
|
|
1265
1265
|
|
|
1266
1266
|
[[package]]
|
|
1267
1267
|
name = "percent-encoding"
|
|
@@ -1620,9 +1620,9 @@ dependencies = [
|
|
|
1620
1620
|
|
|
1621
1621
|
[[package]]
|
|
1622
1622
|
name = "reqwest-middleware"
|
|
1623
|
-
version = "0.4.
|
|
1623
|
+
version = "0.4.1"
|
|
1624
1624
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1625
|
-
checksum = "
|
|
1625
|
+
checksum = "64e8975513bd9a7a43aad01030e79b3498e05db14e9d945df6483e8cf9b8c4c4"
|
|
1626
1626
|
dependencies = [
|
|
1627
1627
|
"anyhow",
|
|
1628
1628
|
"async-trait",
|
|
@@ -1763,9 +1763,9 @@ dependencies = [
|
|
|
1763
1763
|
|
|
1764
1764
|
[[package]]
|
|
1765
1765
|
name = "serde"
|
|
1766
|
-
version = "1.0.
|
|
1766
|
+
version = "1.0.218"
|
|
1767
1767
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1768
|
-
checksum = "
|
|
1768
|
+
checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60"
|
|
1769
1769
|
dependencies = [
|
|
1770
1770
|
"serde_derive",
|
|
1771
1771
|
]
|
|
@@ -1792,9 +1792,9 @@ dependencies = [
|
|
|
1792
1792
|
|
|
1793
1793
|
[[package]]
|
|
1794
1794
|
name = "serde_derive"
|
|
1795
|
-
version = "1.0.
|
|
1795
|
+
version = "1.0.218"
|
|
1796
1796
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1797
|
-
checksum = "
|
|
1797
|
+
checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b"
|
|
1798
1798
|
dependencies = [
|
|
1799
1799
|
"proc-macro2",
|
|
1800
1800
|
"quote",
|
|
@@ -1803,9 +1803,9 @@ dependencies = [
|
|
|
1803
1803
|
|
|
1804
1804
|
[[package]]
|
|
1805
1805
|
name = "serde_json"
|
|
1806
|
-
version = "1.0.
|
|
1806
|
+
version = "1.0.139"
|
|
1807
1807
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1808
|
-
checksum = "
|
|
1808
|
+
checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6"
|
|
1809
1809
|
dependencies = [
|
|
1810
1810
|
"itoa",
|
|
1811
1811
|
"memchr",
|
|
@@ -2086,9 +2086,9 @@ dependencies = [
|
|
|
2086
2086
|
|
|
2087
2087
|
[[package]]
|
|
2088
2088
|
name = "tar"
|
|
2089
|
-
version = "0.4.
|
|
2089
|
+
version = "0.4.44"
|
|
2090
2090
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2091
|
-
checksum = "
|
|
2091
|
+
checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a"
|
|
2092
2092
|
dependencies = [
|
|
2093
2093
|
"filetime",
|
|
2094
2094
|
"libc",
|
|
@@ -3151,7 +3151,7 @@ dependencies = [
|
|
|
3151
3151
|
|
|
3152
3152
|
[[package]]
|
|
3153
3153
|
name = "zizmor"
|
|
3154
|
-
version = "1.
|
|
3154
|
+
version = "1.4.0"
|
|
3155
3155
|
dependencies = [
|
|
3156
3156
|
"annotate-snippets",
|
|
3157
3157
|
"anstream",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "zizmor"
|
|
3
3
|
description = "Static analysis for GitHub Actions"
|
|
4
|
-
version = "1.
|
|
4
|
+
version = "1.4.0"
|
|
5
5
|
edition = "2021"
|
|
6
6
|
repository = "https://github.com/woodruffw/zizmor"
|
|
7
7
|
homepage = "https://github.com/woodruffw/zizmor"
|
|
@@ -21,22 +21,22 @@ online-tests = ["gh-token-tests"]
|
|
|
21
21
|
[dependencies]
|
|
22
22
|
annotate-snippets = "0.11.5"
|
|
23
23
|
anstream = "0.6.18"
|
|
24
|
-
anyhow = "1.0.
|
|
24
|
+
anyhow = "1.0.96"
|
|
25
25
|
camino = { version = "1.1.9", features = ["serde1"] }
|
|
26
|
-
clap = { version = "4.5.
|
|
26
|
+
clap = { version = "4.5.30", features = ["derive", "env"] }
|
|
27
27
|
clap-verbosity-flag = { version = "3.0.2", features = [
|
|
28
28
|
"tracing",
|
|
29
29
|
], default-features = false }
|
|
30
30
|
etcetera = "0.8.0"
|
|
31
|
-
flate2 = "1.0
|
|
32
|
-
github-actions-models = "0.
|
|
31
|
+
flate2 = "1.1.0"
|
|
32
|
+
github-actions-models = "0.26.0"
|
|
33
33
|
http-cache-reqwest = "0.15.1"
|
|
34
34
|
human-panic = "2.0.1"
|
|
35
35
|
indexmap = "2.7.1"
|
|
36
36
|
indicatif = "0.17.11"
|
|
37
37
|
itertools = "0.14.0"
|
|
38
38
|
line-index = "0.1.2"
|
|
39
|
-
owo-colors = "4.
|
|
39
|
+
owo-colors = "4.2.0"
|
|
40
40
|
pest = "2.7.15"
|
|
41
41
|
pest_derive = "2.7.15"
|
|
42
42
|
regex = "1.11.1"
|
|
@@ -45,14 +45,14 @@ reqwest = { version = "0.12.12", features = [
|
|
|
45
45
|
"json",
|
|
46
46
|
"rustls-tls",
|
|
47
47
|
], default-features = false }
|
|
48
|
-
reqwest-middleware = "0.4.
|
|
49
|
-
serde = { version = "1.0.
|
|
48
|
+
reqwest-middleware = "0.4.1"
|
|
49
|
+
serde = { version = "1.0.218", features = ["derive"] }
|
|
50
50
|
serde-sarif = "0.7.0"
|
|
51
|
-
serde_json = "1.0.
|
|
51
|
+
serde_json = "1.0.139"
|
|
52
52
|
serde_yaml = "0.9.34"
|
|
53
53
|
# TODO remove pending https://github.com/tree-sitter/tree-sitter/pull/4034
|
|
54
54
|
streaming-iterator = "0.1.9"
|
|
55
|
-
tar = "0.4.
|
|
55
|
+
tar = "0.4.44"
|
|
56
56
|
terminal-link = "0.1.0"
|
|
57
57
|
tokio = { version = "1.43.0", features = ["rt-multi-thread"] }
|
|
58
58
|
tracing = "0.1.41"
|
zizmor-1.4.0/Dockerfile
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
FROM python:3.13-slim-bullseye AS build
|
|
2
|
+
|
|
3
|
+
LABEL org.opencontainers.image.source=https://github.com/woodruffw/zizmor
|
|
4
|
+
|
|
5
|
+
# Zizmor version to install (set as an argument to pair with zizmor releases)
|
|
6
|
+
ARG ZIZMOR_VERSION
|
|
7
|
+
|
|
8
|
+
ENV PYTHONUNBUFFERED=1 \
|
|
9
|
+
PIP_NO_CACHE_DIR=1 \
|
|
10
|
+
PIP_DISABLE_PIP_VERSION_CHECK=1
|
|
11
|
+
|
|
12
|
+
RUN set -eux && \
|
|
13
|
+
apt-get update && \
|
|
14
|
+
apt-get clean && \
|
|
15
|
+
rm -rf /var/lib/apt/lists/*
|
|
16
|
+
|
|
17
|
+
RUN pip install zizmor && \
|
|
18
|
+
which zizmor
|
|
19
|
+
|
|
20
|
+
# ------------------------------------------------------------------------------
|
|
21
|
+
# Runtime image
|
|
22
|
+
# ------------------------------------------------------------------------------
|
|
23
|
+
|
|
24
|
+
FROM debian:bullseye-slim
|
|
25
|
+
|
|
26
|
+
# Copy necessary files from build stage
|
|
27
|
+
COPY --from=build /usr/local/bin/zizmor /app/zizmor
|
|
28
|
+
|
|
29
|
+
# Set the entrypoint to zizmor
|
|
30
|
+
ENTRYPOINT ["/app/zizmor"]
|
|
@@ -877,7 +877,7 @@ not using `pull_request_target` for auto-merge workflows.
|
|
|
877
877
|
|
|
878
878
|
| Type | Examples | Introduced in | Works offline | Enabled by default |
|
|
879
879
|
|----------|-------------------------|---------------|----------------|--------------------|
|
|
880
|
-
| Workflow | [overprovisioned-secrets.yml] | v1.3.0 | ✅ | ✅ |
|
|
880
|
+
| Workflow, Action | [overprovisioned-secrets.yml] | v1.3.0 | ✅ | ✅ |
|
|
881
881
|
|
|
882
882
|
[overprovisioned-secrets.yml]: https://github.com/woodruffw/gha-hazmat/blob/main/.github/workflows/overprovisioned-secrets.yml
|
|
883
883
|
|
|
@@ -934,6 +934,74 @@ Secrets should be accessed individually by name.
|
|
|
934
934
|
SECRET_TWO: ${{ secrets.SECRET_TWO }}
|
|
935
935
|
```
|
|
936
936
|
|
|
937
|
+
## `unredacted-secrets`
|
|
938
|
+
|
|
939
|
+
| Type | Examples | Introduced in | Works offline | Enabled by default |
|
|
940
|
+
|----------|-------------------------|---------------|----------------|--------------------|
|
|
941
|
+
| Workflow, Action | [unredacted-secrets.yml] | v1.4.0 | ✅ | ✅ |
|
|
942
|
+
|
|
943
|
+
[unredacted-secrets.yml]: https://github.com/woodruffw/gha-hazmat/blob/main/.github/workflows/unredacted-secrets.yml
|
|
944
|
+
|
|
945
|
+
Detects potential secret leakage via redaction failures.
|
|
946
|
+
|
|
947
|
+
Typically, users access the `secrets` context via its individual members:
|
|
948
|
+
|
|
949
|
+
```yaml
|
|
950
|
+
env:
|
|
951
|
+
PASSWORD: ${{ secrets.PASSWORD }}
|
|
952
|
+
```
|
|
953
|
+
|
|
954
|
+
This allows the Actions runner to redact the secret values from the job logs,
|
|
955
|
+
as it knows the exact string value of each secret.
|
|
956
|
+
|
|
957
|
+
However, if the user instead treats the secret as a structured value,
|
|
958
|
+
e.g. JSON:
|
|
959
|
+
|
|
960
|
+
```yaml
|
|
961
|
+
env:
|
|
962
|
+
PASSWORD: ${{ fromJSON(secrets.MY_SECRET).password }}
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
...then the `password` field is not redacted, as the runner does not
|
|
966
|
+
treat arbitrary substrings of secrets as secret values.
|
|
967
|
+
|
|
968
|
+
Other resources:
|
|
969
|
+
|
|
970
|
+
* [Using secrets in GitHub Actions]
|
|
971
|
+
|
|
972
|
+
### Remediation
|
|
973
|
+
|
|
974
|
+
In general, users should avoid treating secrets as structured values.
|
|
975
|
+
For example, instead of storing a JSON object in a secret, store the
|
|
976
|
+
individual fields as separate secrets.
|
|
977
|
+
|
|
978
|
+
=== "Before :warning:"
|
|
979
|
+
|
|
980
|
+
```yaml title="unredacted-secrets.yml" hl_lines="7-8"
|
|
981
|
+
jobs:
|
|
982
|
+
deploy:
|
|
983
|
+
runs-on: ubuntu-latest
|
|
984
|
+
steps:
|
|
985
|
+
- run: ./deploy.sh
|
|
986
|
+
env:
|
|
987
|
+
USERNAME: ${{ fromJSON(secrets.MY_SECRET).username }}
|
|
988
|
+
PASSWORD: ${{ fromJSON(secrets.MY_SECRET).password }}
|
|
989
|
+
```
|
|
990
|
+
|
|
991
|
+
=== "After :white_check_mark:"
|
|
992
|
+
|
|
993
|
+
```yaml title="unredacted-secrets.yml" hl_lines="7-8"
|
|
994
|
+
jobs:
|
|
995
|
+
deploy:
|
|
996
|
+
runs-on: ubuntu-latest
|
|
997
|
+
steps:
|
|
998
|
+
- run: ./deploy.sh
|
|
999
|
+
env:
|
|
1000
|
+
USERNAME: ${{ secrets.MY_SECRET_USERNAME }}
|
|
1001
|
+
PASSWORD: ${{ secrets.MY_SECRET_PASSWORD }}
|
|
1002
|
+
```
|
|
1003
|
+
|
|
1004
|
+
|
|
937
1005
|
[ArtiPACKED: Hacking Giants Through a Race Condition in GitHub Actions Artifacts]: https://unit42.paloaltonetworks.com/github-repo-artifacts-leak-tokens/
|
|
938
1006
|
[Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests]: https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/
|
|
939
1007
|
[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
|
|
@@ -956,3 +1024,4 @@ Secrets should be accessed individually by name.
|
|
|
956
1024
|
[Principle of Least Authority]: https://en.wikipedia.org/wiki/Principle_of_least_privilege
|
|
957
1025
|
[Cacheract: The Monster in your Build Cache]: https://adnanthekhan.com/2024/12/21/cacheract-the-monster-in-your-build-cache/
|
|
958
1026
|
[GitHub Actions exploitations: Dependabot]: https://www.synacktiv.com/publications/github-actions-exploitation-dependabot
|
|
1027
|
+
[Using secrets in GitHub Actions]: https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions
|
|
@@ -49,6 +49,14 @@ description: Installation instructions for zizmor.
|
|
|
49
49
|
uvx zizmor --help
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
+
=== ":simple-docker: Docker"
|
|
53
|
+
|
|
54
|
+
An official `zizmor` image is available from the [GitHub Container Registry](https://ghcr.io/woodruffw/zizmor):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
docker pull ghcr.io/woodruffw/zizmor:latest
|
|
58
|
+
```
|
|
59
|
+
|
|
52
60
|
=== ":simple-anaconda: Conda"
|
|
53
61
|
|
|
54
62
|
[](https://anaconda.org/conda-forge/zizmor)
|
|
@@ -98,7 +106,6 @@ description: Installation instructions for zizmor.
|
|
|
98
106
|
pacman -S zizmor
|
|
99
107
|
```
|
|
100
108
|
|
|
101
|
-
|
|
102
109
|
=== "Other ecosystems"
|
|
103
110
|
|
|
104
111
|
!!! info
|