Repository navigation
Update dependency jdx/jactionlint to v2 - #1429
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/jdx-jactionlint-2.x
branch
10 times, most recently
from
October 14, 2026 19:49
80fa9c7 to
050a715
Compare
renovate
Bot
force-pushed
the
renovate/jdx-jactionlint-2.x
branch
13 times, most recently
from
October 23, 2026 11:07
73441d6 to
bd1172f
Compare
renovate
Bot
force-pushed
the
renovate/jdx-jactionlint-2.x
branch
22 times, most recently
from
November 2, 2026 16:12
264a072 to
26b3007
Compare
renovate
Bot
force-pushed
the
renovate/jdx-jactionlint-2.x
branch
7 times, most recently
from
November 4, 2026 01:15
c59335c to
65caf35
Compare
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
v1.8.2→v2.5.0v1.8.2→v2.5.0Note: The
pre-commitmanager in Renovate is not supported by thepre-commitmaintainers or community. Please do not report any problems there, instead create a Discussion in the Renovate repository if you have any questions.Release Notes
jdx/jactionlint
v2.5.0: : Run workflows locally with jactionlint runCompare Source
jactionlint 2.5.0 adds
jactionlint run, which runs the jobs of a workflow on your machine inside an OS sandbox, without a container engine. It also adds theunreachable-required-checkrule, fixes twounpinned-imagesissues, and accepts theapmDependabot ecosystem.Added
jactionlint run: run workflows locallyjactionlint runlets you debug arun:script, an expression, a matrix or theneedswiring without pushing a commit. It shows what happened on your machine, not whether the workflow will pass on GitHub. Every skip or refusal is printed with its reason, and the run guide has a "Differences from GitHub" table. The workflow is first linted with thecorrectnessprofile, and the run stops on an error (--no-lintskips the lint). (#316, #317, #319, #320, #321, #322, #323, #324, @jdx)--list(--jsonfor JSON) groups jobs into stages and expands matrices the way the runner does:exclude, theninclude. It evaluatesname:,runs-on:and jobif:expressions that it can, and marks each oneif is trueorif is false. Thegithubcontext comes from git,-i NAME=VALUEsetsworkflow_dispatchinputs, and--event-filesuppliesgithub.event. A matrix built fromneedsoutputs shows as "known at run time".run:steps withshell,working-directory,defaults.run, layeredenv,timeout-minutesandcontinue-on-error. Also supported: step and job outputs,needs.*.result, matrices withfail-fast, background andparallel:steps, theGITHUB_ENV/PATH/OUTPUT/STATE/STEP_SUMMARYfile commands and workflow commands. Values from--secretand::add-mask::show as***in all output. Jobs whoseruns-onnames a different OS are skipped. Ctrl-C cancels the steps, and steps withif: always()still run.pre/post) and local or remote reusable workflows. If no Node.js onPATHhas the right major version, jactionlint downloads it and checks it against the release'sSHASUMS256.txt. Remote actions and reusable workflows must be pinned to a commit SHA. Use--trust-actionsto resolve a tag or branch and print the commit it picked.actions/checkout,upload-artifactanddownload-artifactare replaced with local versions. Use--no-shim ACTIONto run the real action.127.0.0.1works with unmodifiedactions/cache,setup-*,jdx/mise-actionand other actions built on@actions/cache, so a second run restores instead of downloading again. Caches are scoped to the ref and fall back to the default branch. Entries expire after 7 days, and the store has a 10 GB LRU limit (--cache-size). Related options:--cache=read-only|off,--no-cache,--cache-dir. Manage the store withjactionlint cache ls|rm|prune|path.--net=openis the default.--net=noneblocks internet sockets.--net=proxyallows only a proxy that lets through GitHub and the common package registries. It needs Landlock ABI 4, which is Linux 6.7 or later.--allow-net HOST,...adds hosts, and--learnprints the hosts your steps contacted.container:jobs,services:and Docker actions run throughdockerorpodman(--container-engine). By default all capabilities are dropped except nine, andno-new-privilegesis set. jactionlint never runs privileged containers or mounts the host home or Docker socket. Images must be pinned by digest unless you pass--trust-images.options:is checked against an allow list:--privileged,--cap-add,-v,--network hostand similar options are refused unless you pass--unsafe-container-options. Use--containerto run Linux matrix cells in a digest-pinnedubuntuimage, for example from a Mac. If no engine is installed, or you pass--no-containers, only the jobs and steps that need a container are skipped.--parallel Nruns matrix cells and independent jobs at the same time. It respectsneedsandmax-parallel, and prints each job's output in one block.(jactionlint run --explain ID)have a longer explanation.jactionlint run --explain listlists all of them.Isolation and platform support: Each step runs with a filtered environment, a throwaway home, and a per-job copy of the workspace. Your checkout and real home cannot be read or written. Use
--in-placeto work in your checkout,--allow-read/--allow-write DIRto open more paths, and--sandbox=offto turn the sandbox off. If the sandbox can't be applied, the step does not run.sandbox-exec. This backend is new and has had much less use than the Linux one.New rule:
unreachable-required-checkThe new
unreachable-required-checkrule reports a required check that no workflow will report for a change. GitHub waits forever for such a check, and the pull request cannot merge. Common causes are a missingmerge_grouptrigger, abranchesfilter that leaves out the protected branch, and apathsfilter that skips a README-only change. (#331, @mariusvniekerk)The rule turns on in every profile when
required-checksis in the config file:It reads every workflow in
.github/workflows, so it doesn't report GitHub's workaround of a second workflow with the oppositepathsfilter. Each finding is placed where the fix goes: the config declaration (with a "did you mean" suggestion),on:, or the filter. When the answer depends on something the rule doesn't evaluate, it reports at levelinfoand gives the reason. It does not read branch protection or rulesets from GitHub, so keep the list in sync with your repository settings. To turn the rule off, setrules: {unreachable-required-check: off}.Fixed
unpinned-imagesnow treats images built by drop-in forks ofdocker/build-push-actionas local, the same as the original:useblacksmith/build-push-action,depot/build-push-actionandwarpbuilds/build-push-action. A laterdocker runof the image's tag is no longer reported. Other actions that take atags:input are still reported. (#328, @jdx, @tedserbinski)unpinned-imagesnow only treats an image as local when the same job builds, tags or loads it. Each job runs on its own runner, sodocker run app:ciin a job that doesn't buildapp:cipulls the image from the registry. That use is now reported. Previously, a build anywhere in the workflow hid the finding in every job. (#329, @jdx, @tedserbinski)dependabot-syntaxacceptspackage-ecosystem: apm(Agent Package Manager), which GitHub added on November 3, 2026. (#333, @frottke)New Contributors
4d0fcf6(#328)Full Changelog: jdx/jactionlint@v2.4.0...v2.5.0
💚 Sponsor jactionlint
jactionlint is a fork of rhysd/actionlint, maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If jactionlint has a place in your development workflow, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep jactionlint fast, free, and independent.
v2.4.0: : Private Use Area detection and fixes for artipacked, Dependabot groups and SARIF uploadsCompare Source
jactionlint 2.4.0 extends
invisible-charactersto report Private Use Area characters. It also fixes false positives inartipackedanddependabot-syntax, and stops the "inconsistent fingerprint" warnings when you upload SARIF to code scanning.Added
invisible-charactersreports Private Use Area characters (U+E000–U+F8FFand the two supplementary private-use planes). Most fonts have no glyph for these characters, so they can hide a payload that a script decodes at run time, the same way variation selectors can. The message calls themPRIVATE USE CHARACTER. The rule ID, profile, level and the fix that removes the character have not changed. If you use Nerd Font or Powerline icons on purpose, write them as escape sequences before you apply the fix. Otherwise the fix removes them. (#311, @jdx)Fixed
artipackedno longer reportsactions/checkoutv6 and later. Starting with v6, checkout stores the credential in a file under$RUNNER_TEMPinstead of the workspace, so uploading the workspace doesn't publish it. The rule skips v6+ tag refs, and also commit pins whose version comment says v6 or later. v5 and earlier are still reported. (#308, @jdx)dependabot-syntaxno longer reports an update withmulti-ecosystem-groupas a duplicate of the regular update for the same ecosystem and directory. Two updates are now duplicates only when they match on ecosystem, directory, target branch and group. Two ungrouped updates, or two updates in the same group, are still reported. (#314, @jdx)primaryLocationLineHash.github/codeql-action/upload-sarifcomputes this value itself and logs an "inconsistent fingerprint" warning when a file supplies a different one. The fingerprint value is unchanged and is now stored underjactionlint/contextHash/v1inpartialFingerprints. If your tools read jactionlint's fingerprint fromprimaryLocationLineHash, switch them to the new key. (#307, @jdx)Full Changelog: jdx/jactionlint@v2.3.0...v2.4.0
💚 Sponsor jactionlint
jactionlint is a fork of rhysd/actionlint, maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If jactionlint has a place in your development workflow, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep jactionlint fast, free, and independent.
v2.3.0: : allow-unused for config ignores, and a Go toolchain fix for online checksCompare Source
jactionlint 2.3.0 adds an
allow-unusedoption toignoresentries in the config file and fixes aworkflow-call-permissionsfalse positive for OIDC. It is also built with Go 1.27.3, so online checks reject certificates from the compromised eMudhra CA.Added
allow-unusedfor durable ignores. Anignoresentry withallow-unused: trueis not reported asunused-ignorewhen it suppresses nothing. Use it for findings that come and go, such as one caused by a moving tag.expired-ignorestill reports the entry when it expires. The default isfalse, and any value other thantrueorfalseis a config error. The option is also in the config JSON Schema. (#297, @jdx)Fixed
workflow-call-permissionsno longer reports a missingid-token: writewhen the caller sets nopermissions:andassume-default-permissionsispermissiveor not set. In that case, GitHub gives the called job an OIDC token. Withassume-default-permissions: restricted, jactionlint still reports it. (#299, @jdx)--online. (#301, @jdalton)New Contributors
Full Changelog: jdx/jactionlint@v2.2.0...v2.3.0
💚 Sponsor jactionlint
jactionlint is a fork of rhysd/actionlint, maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If jactionlint has a place in your development workflow, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep jactionlint fast, free, and independent.
v2.2.0: : New rules, repository-aware CLI modes, and a PyPI packageCompare Source
jactionlint 2.2.0 adds about thirty new rules and extends many existing ones, mostly for script injection, token permissions, pinning and runner limits. It also adds CLI modes for pull request checks (
--changed-since), rule discovery (--list-rules,--explain, shell completions), fact export and timeout suggestions, and publishes wheels to PyPI. Several new rules are in thedefaultorcorrectnessprofile, so a run that was clean on 2.1.0 can show new findings. See Changed before you upgrade.Highlights
actions/github-script, job permissions too narrow for the actions in the job,ghwithout a token,ubuntu-slimlimits,github.eventproperty typos, and validation of GitHub's Actions lock file.untrusted-checkout,cache-poisoning,template-injectionand the secret rules follow more code paths. New pedantic and online rules cover command and argument injection, repojacking, release age, unpinned action dependencies and environments without required reviewers.pip/uvx.Added
New rules in the
defaultandcorrectnessprofilesshell-syntax(default, error): reports syntax errors inbash/shrun:scripts, such as an unclosed quote or a missingfi/done, using a built-in parser. It runs only when shellcheck does not run, so the two never report the same error. (#273, @jdx)insufficient-permissions(default, error): reports a job whose explicitpermissions:miss a scope that one of its actions needs (upload-sarif,deploy-pages, OIDC logins,gh release create,git pushand others, about 26 entries).missing-permissions --fixnow uses the same table to write job-level permissions when the needs are exact. (#192, @jdx)ubuntu-slim-limits(default, error): reportscontainer:,services:and Docker container actions in jobs that run only onubuntu-slim. Withpedantic, it also reportstimeout-minutesabove 15.missing-timeout --fixlimits its value to 15 for these jobs. (#190, @jdx)actions-lock(default, error) andactions-lock-drift(online): check.github/workflows/actions.lockagainst the workflows. They report missing, stale and malformed entries. With--online, they also report replaced repositories, moved tags and commits that are on no branch or tag. Repositories without a lock file are not affected.unpinned-usesaccepts a ref that the lock file pins to a commit. (#237, #228, @jdx)hardcoded-registry-credentials(default, error): reports plain-text passwords, tokens and keys inregistriesofdependabot.yml, including passwords embedded in a registry URL. (#265, @jdx)gh-without-token(correctness): reports aghcommand that needs a token in a step where noGH_TOKEN/GITHUB_TOKENis set. (#177, @jdx)environment-file-redirect(correctness): reports writes toGITHUB_OUTPUT(and similar files) without the$, and a>that overwrites data the same script already wrote. It has a fix: safe for the missing$, unsafe for>. (#184, @jdx)github-script-syntax(correctness): checks thescriptinput ofactions/github-scriptwithnode --check. It knows the argument names of each action version, so it catches errors likeconst glob = require(...). It needs Node.js 20 or later onPATH; without it, the rule is skipped and a note says so. (#242, @jdx)malformed-expression-delimiters(correctness): reports${ github.ref },$ {{ x }}and{{ github.sha }}. (#180, @jdx)multiline-plain-run(correctness): reports a multi-linerun:that YAML folds into a single line. (#205, #256, @jdx)concurrency-deadlock(correctness): reports a concurrency group that a workflow shares with a local reusable workflow it calls. GitHub cancels such runs as a deadlock. (#210, @jdx)conflicting-action-inputs(correctness), plus newmissing-action-inputcases: report input combinations of well-known actions that cannot work, for exampledownload-artifactnamewithartifact-ids, ornick-fields/retrywithout exactly one timeout input. (#207, @jdx)undefined-propertynow checksgithub.event.*property names against the webhook payloads, down to three levels. By default, it reports only names that no event has. Thestrict-event-payloadsoption, on in the pedantic profile, also reports properties that the workflow's own triggers don't have. (#249, @jdx)New pedantic rules
deprecated-runner-label: warns about runner labels with an announced retirement date (macos-14,ubuntu-22.04), with replacement labels. (#182)deprecated-node-runtime: reportsruns.using: node20/16/12in action metadata, popular actions at majors that declare node20, and environment variables that select the Node.js runtime. (#225, #230, #234)command-injection: reports untrusted input that was moved toenv:but then runs as code (eval,bash -c,python -c,execSyncin github-script, and similar). (#202)argument-injection: reports free text in the program ofsed/awk, infind -exec, or as a leading word oftar,curl,git cloneand others. (#221)output-clobbering: reports input that can contain line breaks written toGITHUB_OUTPUTas a single record. (#212)comment-trigger-authorization: reports comment-triggered jobs that don't check who commented. (#217)event-name-never-received: reportsgithub.event_namecompared with an event the workflow never receives. (#214)fail-fast-action-inputs: reports actions configured to pass when they produced nothing. (#196)macos-gnu-flags: reports GNU-only options in run scripts of macOS jobs. (#241)unmatched-paths-filter: reportspathsfilters that match no file in the repository. (#238)missing-version-comment: reports a commit-SHA pin without a version comment.--online --fixadds the comment. (#232)unused-workflow-secret: reportson.workflow_call.secretsthat nothing reads. (#223)All by @jdx.
New online rules
repojacking: reports an action or reusable workflow whose owner name anyone could register. It runs on github.com only. (#248, @jdx)unpinnable-action: reports an action pinned by hash whose own dependencies are not pinned. (#240, @jdx)action-release-cooldown(opt-in): reports an action at a version released less than N days ago. It is off until the config has an entry for it:Extensions to existing rules
untrusted-checkoutfollows the pull request revision through variables, script files,pull/N/headfetches, local reusable workflows and composite actions. It now coversissue_commentworkflows that build a pull request, and reports gates that pass once in front of code that can change. It honors the fork protection ofactions/checkout, and counts actions that run the workspace and the input that makes them do it. (#159, #175, #203, #206, #208, #213, #220, @jdx)With
--online, environments are checked:untrusted-checkout,untrusted-artifactandagentic-actionsno longer trust anenvironment:that has no required reviewers, or that doesn't exist in a public repository. (#247, @jdx)cache-poisoning:docker/build-push-actionwith an expression forpush, plus maturin and sccache caches,pnpm/setup, graalvm and composer.pedanticoption adds zizmor's heuristics for tag-triggered and release-branch workflows.(#160, #216, @jdx)
template-injectionreports more outsider-controlled free text in the default profile: previous titles and bodies of edited issues, the fork homepage, wiki page titles, merge queue commit messages, andworkflow_runpaths. (#173, @jdx)dangerous-triggersmessages say which token scopes the workflow can write and which secrets it reads. (#189, @jdx)github-envfollows text that a script reads withghandgit. (#218, @jdx)unpinned-imageschecksdocker runimages in scripts and adds per-image policies and image allow/deny lists.--online --fix=unsafepins container images to a digest. (#211, #239, @jdx)unpinned-usesaccepts the tag of an immutable release under--online.--online --fixnames the most specific version tag in the comment it writes. (#251, #224, @jdx)ref-version-mismatchreads ratchet comments and can fix the version comment (unsafe). (#227, @jdx)workflow-secret-scopehas ajob-leveloption.secrets-outside-envnow reports secrets passed to reusable workflows. (#223, @jdx)More pedantic options:
unlocked-installreports npm/yarn/bun/aube installs that run lifecycle scripts or have no release-age cooldown.untrusted-artifactknows more download actions and reports downloads of every artifact.use-trusted-publishingreports jobs that build, have no environment, or drop attestations.unredacted-secretsreports values cut from a secret and printed by a script.concurrency-limitsreports schedule-only and manual-only workflows.(#187, #201, #255, #219, #209, #222, #266, @jdx)
aube is recognized wherever npm, pnpm, yarn and bun are. (#254, @jdx)
Runner labels:
self-hosted-runner.providers.self-hosted-runnercounts the configured labels and runner groups, and says when a pull request reaches the runner.(#199, #233, #194, @jdx)
github-appchecks two more token actions, anddependabot-missing-actions-updatecovers local composite actions. (#229, @jdx)superfluous-actionsresolvesruns-onexpressions that the repository defines. (#271, @jdx)missing-timeouthas anaccept-step-timeoutsoption for jobs whose steps all settimeout-minutes. (#252, @jdx)Online checks
--online, the inputs of any remote action outside the built-in data set are checked against itsaction.ymlat the pinned ref. Calls of reusable workflows in other repositories are checked the same way. (#231, #236, @jdx)--online-report=FILEwrites online coverage and cache freshness as JSON, for any output format. The SARIF output gets the same fields. (#166, @jdx)CLI and configuration
--changed-since REVshows only findings on lines changed since the merge base withREV, for pull request checks.--changed-scope filesshows every finding in a changed file. The whole repository and call graph are still analyzed. A missing merge base, for example in a shallow clone, exits with status 3. (#274, #279, @jdx)--select=RULESreports only the named rules.--no-ignoresdisables inline ignores, config ignores and the baseline.--list-ruleslists all rules, also as JSON. (#200, @jdx)--explain RULEprints a rule's documentation, options, fix prerequisites and examples, offline.--completion=bash|zsh|fish|powershellprints a shell completion script. (#204, #269, @jdx)--show-fix-statusshows under each finding whether a fix is available and how to apply it, and more fixable rules say why a finding has no fix. SARIF output explains a missing fix as well. (#269, #164, @jdx)--show-doc-urlsand--finding-context(events and token permissions on each JSON/SARIF finding) add details to the output.--ruff=CMDchecks Python scripts with ruff instead of pyflakes. The config keyplatform: forgejo|giteaaccepts full-URLuses:references to other hosts. Jujutsu (.jj) workspaces are detected as project roots. (#215, @jdx)--export-factsprints the events, permissions, concurrency, jobs, steps and calls of a repository as versioned JSON, forjqor policy tools.--print-facts-schemaprints its schema. (#272, @jdx)--suggest-timeoutsreports how long each job took in its latest successful runs and suggests atimeout-minutesvalue. It is a report only and changes no files. (#275, @jdx)--format jsonoutput are available through--print-config-schemaand--print-output-schema.--init-configadds ayaml-language-serverschema comment. (#195, @jdx)shellcheck:config section setsrcfile,argsandenable. The--shellcheck-rcfile=FILEflag overridesrcfile. (#191, @jdx)Installation
pip,pipx,uv tooloruvx. (#277, @jdx)action.ymlordependabot.ymlchanges. A newjactionlint-shellcheckhook builds shellcheck into the hook environment. (#181, @jdx)Changed
New findings on existing workflows. The new
defaultandcorrectnessrules above, the newtemplate-injectioncontexts and the widercache-poisoningcoverage can report on workflows that passed on 2.1.0.actions-lockreports only in repositories with an Actions lock file. Popular actions pinned to a full version, or to a commit with a version comment, now get their inputs checked. (#174, @jdx)Stricter syntax checks. These are now reported because GitHub rejects them: a
scheduleentry withoutcron,merge_grouptypes other thanchecks_requested,$/path@ref,$/paths that leave the repository or don't exist,timeout-minutesin composite steps, unsupported contexts in action input defaults, and expressions inuses:. (#186, @jdx)Runner label retirements:
unknown-runner-labelwill start reportingmacos-14on 2026-11-02 andubuntu-22.04on 2027-04-17. Each finding names the retirement date and replacement labels. Before those dates, only the pedanticdeprecated-runner-labelwarns. (#182, @jdx)Fewer default findings:
dangerous-triggersreports a workflow that has no write scopes and reads no secrets only withpedantic. (#189)cache-poisoningreportsdocker/setup-buildx-actiononly whenversionis set.pedanticrestores the old behavior. (#160)All by @jdx.
A broken
extendsis now an error. In a discovered config file, anextendsentry that points to a missing file exits with status 3. Before, the whole config was silently skipped. (#285, @jdx)Ignore comments inside scripts no longer apply. An own-line
# jactionlint ignore=inside arun: |block or another multi-line string has no effect. Only real YAML comments are read. (#284, @jdx)Go API:
NewLinter(out, nil)no longer panics.Error.PrettyPrintprints the rule ID instead of the kind.Error()is unchanged.ExprSemanticsCheckerrejects every context unlessSetContextAvailabilityis called.(#283, @jdx)
Fixed
if-always-trueno longer reports the trailing newlines of a block scalar. (#226)-latestrunner labels are matched to the images behind them. (#171)untrusted-checkoutskips merged pull requests and countssed -f,awk -f,tar -Pandunzip -:. (#175)--changed-sincecounts findings that several files share once, keeps..foopaths inside the repository, and refuses--export-facts. (#279)download-jactionlint.bash: a missing release now prints a clear error instead of a gzip error. The script acceptsamd64(FreeBSD), and its help text is corrected. (#282)--helpand messages:--helpand several online and--migrate-ignoresmessages now match the documented behavior. (#287)All by @jdx.
Performance
--onlinechecks read the advisories of all actions with one request. (#268)All by @jdx.
Full Changelog: jdx/jactionlint@v2.1.0...v2.2.0
💚 Sponsor jactionlint
jactionlint is a fork of rhysd/actionlint, maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If jactionlint has a place in your development workflow, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep jactionlint fast, free, and independent.
v2.1.0: : JACTIONLINT_ONLINE, workflow-secret-scope, and more precise security rulesCompare Source
jactionlint 2.1.0 adds an environment variable that turns on the online checks, a new
workflow-secret-scoperule, and machine-readable reasons when a finding has no fix. Many security rules now produce fewer false positives, especially in reusable workflows and release pipelines. Some rules now report things they did not report before, so an existing clean run can show new findings (see Changed).Added
JACTIONLINT_ONLINEenvironment variable. It turns on the online checks without changing the command, so CI can run them while local pre-commit hooks stay offline.1,trueoronworks like--online, andcache,strictorcache,strictselect a mode.0,false,offornoworks like--no-onlineand overridesonline: truein the config file. The--online/--no-onlineflags override the variable, and the variable overrides the config file. An invalid value exits with status 2. (#155, @jdx)workflow-secret-scoperule (security, pedantic profile, warning, no autofix). It reports a named secret in workflow-levelenv:when steps in two or more jobs can see it. The rule skips single-job workflows,GITHUB_TOKEN, jobs or steps that override the variable, and jobs that call reusable workflows. (#136, @jdx)background-step-not-waited(correctness profile, fromparallel-steps). It reports reads of a background step'soutputs,outcomeorconclusionbefore awaitorwait-allcovers that step. Those reads evaluate to an empty string. Steps withbackground: ${{ ... }}are not tracked. (#132, @jdx)missing-timeout,dependabot-cooldown,unpinned-uses,template-injectionandartipacked. The reason appears asno_fixin JSON and template output, and asnoFixCode,noFixReasonandnoFixOptionproperties in SARIF. The codes areoption-required,option-invalid,online-required,lookup-failed,unsupported-shapeandneeds-judgment. Text output is unchanged. Whendefault-minutesordefault-daysis not set, themissing-timeoutanddependabot-cooldownmessages now say which option to set to enable--fix. (#135, #147, #154, @jdx)properties.onlineCoveragewithstatus(complete/incomplete),mode,skippedLookups,excludedRepositoriesandevidence(networkorcache). (#140, @jdx)Changed
excessive-permissionsnow reports workflow-level write scopes in single-job workflows too, unless the trigger is privileged. Any job added later would inherit those scopes without notice. (#152, @jdx)missing-permissionsno longer reports workflows whose only trigger isworkflow_call, because the callers decide the token permissions. Workflows that haveworkflow_callplus another trigger are still reported. They now get an unsafe fix (contents: read, applied only with--fix=unsafe), and the message says the permissions must not exceed what callers grant. (#138, #152, @jdx)wait,wait-allandcancelsteps, onlyidandnameare allowed besides the keyword. Onparallelsteps, onlyparallelis allowed.wait-all: falseis now an error. To apply a condition, putif:on a step inside the parallel group instead of on the group. (#128, [@&#Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.