Minor Changes
-
#62
c50ee67Thanks @toiroakr! - Honourzizmor.ymlconfigs and fix five parity divergences found by diffing
karinto against zizmor / actionlint on real OSS workflows.- New:
zizmor.ymlconfig support. A zizmor config'srules.<id>.disable
andrules.<id>.ignore(filename[:line[:col]]) opt-outs are now honoured,
alongside the existing inline-comment and ghalint-config opt-outs. Pass it via
the CLI's--zizmor-configor the HTTPzizmorparameter. known-vulnerable-actionsno longer carries a hardcoded action list. It
could not track GHSA's per-advisory version ranges and false-flagged fixed
releases (e.g.tj-actions/changed-files@v47). Vulnerability is now decided
solely by the online advisory path (OSV.dev viaosv=1/ the companion
action) — the mechanism zizmor uses. Withoutosv=1the rule no longer fires.context-availabilityno longer flagsinputsin workflow-levelenv/
concurrencyforworkflow_call/workflow_dispatchworkflows, where the
inputscontext is in fact available (matching actionlint).expression-syntaxno longer reports a stray}}: a literal{{ … }}
template (e.g. docker/metadata-action'spattern={{version}}) is not an
expression. Only an unterminated${{is an error, as in actionlint.bot-conditionsnow fires only on an==comparison ofgithub.actor/
github.triggering_actoragainst a[bot]login (and now also covers
triggering_actor), matching zizmor; the!=/endsWith(...)exclude forms
are no longer flagged.excessive-permissionspersona gating: the workflow-level "no
permissions:block" finding is nowpedantic(the per-job "default
permissions used" finding staysregular), matching zizmor's per-persona
behaviour.
- New:
Patch Changes
- #56
19e61a5Thanks @toiroakr! - Refactorcheck_unknown_contextto reuse the sharedextract_expr_bodies
andstrip_expr_string_literalshelpers instead of its own inline${{ }}
extraction and string-literal skipping. The duplicated expression-scanning
logic is removed and the single-quoted-literal false-positive fix is
preserved.extract_expr_bodiesnow skips single-quoted literals while
locating the terminating}}, so a}}inside a literal (e.g.
${{ hashFiles('a}}b') && github.ref }}) no longer truncates the extracted
body — this preserves the previouscheck_unknown_contextbehaviour and also
hardens the sharedtext_references_regular_contextscan against the same
edge case. The context-access lookahead incheck_unknown_contextnow skips
tabs and newlines (not just spaces) before the., matching theexpr.mbt
lexer, so a typo like${{ githab<TAB>.ref }}is still flagged.