Releases: rhysd/actionlint
Releases · rhysd/actionlint
v1.7.11
- Support the
case()function in${{ }}expressions which was recently added to GitHub Actions. (#612, #614, thanks @heppu)env: # ERROR: case() requires an odd number of arguments ENVIRONMENT: |- ${{ case( github.ref == 'refs/heads/main', 'production', github.ref == 'refs/heads/staging', 'staging' ) }}
- Support new
macos-26-largeandwindows-2025-vs2026runner labels. See the GitHub's announce for more details. (#615, thanks @hugovk and @muzimuzhi) - Enable Artifact attestations for the released binaries. From v1.7.11
ghcommand can verify the integrity of the downloaded binaries as follows. The verification is highly recommended in terms of supply chain security. (#608, thanks @takaram)$ gh release download --repo rhysd/actionlint --pattern '*_darwin_amd64.tar.gz' v1.7.11 $ gh attestation verify --repo rhysd/actionlint actionlint_1.7.11_darwin_amd64.tar.gz Loaded digest sha256:17ffc17fed8f0258ef6ad4aed932d3272464c7ef7d64e1cb0d65aa97c9752107 for file://actionlint_1.7.11_darwin_amd64.tar.gz Loaded 1 attestation from GitHub API The following policy criteria will be enforced: - Predicate type must match:................ https://slsa.dev/provenance/v1 - Source Repository Owner URI must match:... https://github.com/rhysd - Source Repository URI must match:......... https://github.com/rhysd/actionlint - Subject Alternative Name must match regex: (?i)^https://github.com/rhysd/actionlint/ - OIDC Issuer must match:................... https://token.actions.githubusercontent.com ✓ Verification succeeded! The following 1 attestation matched the policy criteria - Attestation #1 - Build repo:..... rhysd/actionlint - Build workflow:. .github/workflows/release.yaml@refs/tags/v1.7.11 - Signer repo:.... rhysd/actionlint - Signer workflow: .github/workflows/release.yaml@refs/tags/v1.7.11
- Report path filters with
./as error because they never match anything. (#521)on: push: paths: # ERROR: This never matches anything. `foo/bar.txt` is correct. - ./foo/bar.txt
- Fix comparing matrix items when an item is a super set of another item. (#523, #613, thanks @michaelgruenewald)
- Fix stack overflow crash by a recursive anchor in matrix items. (#610)
- Fix an unassigned variable false positive from shellcheck by disabling SC2153 rule. (#573)
- Reduce the number of memory allocations on resolving anchors.
- Update the popular actions data set to the latest.
- Update Go dependencies to the latest.
- Remove legacy Homebrew formula in rhysd/actionlint repository in favor of the cask package. Note that this change does not affect Homebrew's official formula.
- Add a link to the release page of the version in the playground.
v1.7.10
- Support YAML anchors and aliases (
&anchorand*anchor) in workflow files. In addition to parsing YAML anchors correctly, actionlint checks unused and undefined anchors. See the document for more details. (#133, thanks @srz-zumix for the initial implementation at #568 and @alexaandru for trying another approach at #557)jobs: test: runs-on: ubuntu-latest services: nginx: image: nginx:latest credentials: &credentials username: ${{ secrets.user }} password: ${{ secrets.password }} steps: - run: ./download.sh # OK: Valid alias to &credentials env: *credentials - run: ./check.sh # ERROR: Undefined anchor 'credential' env: *credential - run: ./upload.sh # ERROR: Unused anchor 'credentials' env: &credentials
- Remove support for
*-xlmacOS runner labels because they were dropped. (#592, thanks @muzimuzhi) - Remove support for the macOS 13 runner labels because they were dropped on Dec 4, 2025. (#593, thanks @muzimuzhi)
macos-13macos-13-largemacos-13-xlarge
- Increase the maximum number of inputs in the
workflow_dispatchevent from 10 to 25 because the limitation was recently relaxed. (#598, thanks @Haegi) - Support
artifact-metadatapermission for workflow permissions. (#602, thanks @martincostello) - Detect more complicated constants at
if:conditions as error. See the rule document for more details. - Refactor the workflow parser with Go iterators. This slightly improves the performance and memory usage.
- Fix parsing extra
{and}characters in format string offormat()function call. For example v1.7.9 didn't parse"{{0} {1} {2}}"correctly. - Detect an invalid value at
typein workflow call inputs as error. - Report YAML merge key
<<as error because GitHub Actions doesn't support the syntax. - Check available contexts in expressions at
jobs.<job_id>.snapshot.if.snapshot: image-name: my-custom-image # ERROR: `env` context is not allowed here if: ${{ env.USE_SNAPSHOT == 'true' }}
- Fix the instruction to install actionlint with
misein the installation document. (#591, thanks @risu729) - Update the popular actions data set to the latest to include new major versions of the actions.
v1.7.9
- Add support for
ubuntu-slimrunner label. (#585, thanks @cestorer) - Check input deprecation in action by checking
deprecationMessageproperty. Using a deprecated input is reported as error if it is not marked asrequired. See the document for more details. (#580)- uses: reviewdog/action-actionlint@v1 with: # ERROR: Using a deprecated input fail_on_error: true
- Add support for the Custom images feature.
- Support
image_versionworkflow trigger.on: image_version: names: - "MyNewImage" - "MyOtherImage" versions: - 1.* - 2.*
- Support
jobs.<job_id>.snapshotsyntax. To make actionlint recognize your own image generation runner, useself-hosted-runner.labelsconfig.jobs: build: runs-on: my-image-generation-runner snapshot: image-name: my-custom-image version: 2.*
- Support
- Report constant conditions at
if:likeif: trueas error. Only very simple expressions liketrueorfalseare detected for now. See the document for more details. - Check unexpected keys in inputs in action metadata.
inputs: some_input: # Error: `type` is not supported for inputs in action metadata type: boolean
- Fix some invalid permissions are not reported as error in
id-tokenandmodelsscopes. (#582, thanks @holtkampjs) - Fix
argsandentrypointinputs are not recognized atuses:when it's not a Docker action. (#550) - Set correct column in source position of YAML parse error.
- Fix
credentialscannot be configured with${{ }}. (#590) - Improve messages in syntax errors on parsing steps (
run:anduses:). Available keys suggestion is now more accurate and unexpected keys are detected more accurately. - Fix the order of errors can be non-deterministic when multiple errors are caused at the same source positions.
- Improve error messages showing suggestions on detecting invalid permissions.
- Add instruction for installing actionlint with mise package manager. (#589, thanks @jylenhof)
- Fix outdated URLs in the document.
- Add new
actionlint.AllContextsmap constant in Go API that contains the information about all context availability. - Update popular actions data set to the latest with several major versions of actions and the following new actions.
anthropics/claude-code-actionopenai/codex-actiongoogle-github-actions/run-gemini-cli
- Add
make covtask to easily generate a code coverage report. - Make installing the formula version of
actionlintpacakge from tap of this repository with Homebrew a hard error. Install the cask version instead following the instruction in the error message.
v1.7.8
- Support
modelspermission inpermissionssection. (#531, thanks @muzimuzhi) - Support
job.check_run_idproperty. (#576, thanks @muzimuzhi for fixing the type at #577) - Support
node24runtime atusingsection in action metadata. (#561, thanks @salmanmkc) - Add support for the following runner labels.
macos-26andmacos-26-xlarge(#572, thanks @muzimuzhi)macos-15(#572, thanks @muzimuzhi)
- Drop support for the following runner labels which are no longer supported by GitHub.
ubuntu-20.04(#534, thanks @shogo82148)windows-2019(#572, thanks @muzimuzhi)
- Support
deprecationMessagein action inputs metadata. (#540, thanks @saansh45) - Support
windows-11-armrunner. (#542, thanks @trim21) - Handle
ubuntu-latestrunner label asubuntu-24.04andmacos-latestrunner label asmacos-15. - Report mixing Intel Mac labels and Arm Mac labels as error.
- Add new types to
issuesandpull_request_targetwebhooks. - Update the popular actions data set to the latest and add more actions to it. (thanks @sethvargo for fixing the
go generatescripts)actions/create-github-app-tokenactions/attest-sbomactions/ai-inferencepeter-evans/create-or-update-commentrelease-drafter/release-drafterSamKirkland/FTP-Deploy-Action
- Fix the version value in
actionlint -versionoutput can be empty. - Fix outdated URL links in some error messages and documents.
- Homebrew formula in this repository is deprecated and Homebrew cask is newly added instead because GoReleaser no longer supports Homebrew formula update. Note that Homebrew's official
actionlintformula is still maintained. Please read the documentation for more details. - Drop support for Go 1.23 and earlier because they are no longer maintained officially. Go 1.24 and later are supported to build actionlint.
- Replace
go-yaml/yaml@v3package withyaml/go-yaml@v4package.go-yaml/yamlwas used for parsing workflow files however it was unmaintained.yaml/go-yamlis a successor of the library officially maintained by YAML organization. (#575) - Improve error messages on parsing workflow and action metadata files.
v1.7.7
- Support runner labels for Linux arm64 hosted runners. (#503, #504, thanks @martincostello)
ubuntu-24.04-armubuntu-22.04-arm
- Update Go dependencies to the latest.
- Update the popular actions data set to the latest.
- Add Linux arm64 job to our CI workflow. Now actionlint is tested on the platform. (#507, thanks @cclauss)
v1.7.6
v1.7.5
- Strictly check available contexts in
${{ }}placeholders following the 'Context availability' table in the official document.- For example,
jobs.<job_id>.defaults.run.shellallowsenvcontext butshellworkflow keys in other places allow no context.defaults: run: # ERROR: No context is available here shell: ${{ env.SHELL }} jobs: test: runs-on: ubuntu-latest defaults: run: # OK: 'env' context is available here shell: ${{ env.SHELL }} steps: - run: echo hello # ERROR: No context is available here shell: ${{ env.SHELL}}
- For example,
- Check a string literal passed to
fromJSON()call. This pattern is popular to create array or object constants because GitHub Actions does not provide the literal syntax for them. See the document for more details. (#464)jobs: test: # ERROR: Key 'mac' does not exist in the object returned by the fromJSON() runs-on: ${{ fromJSON('{"win":"windows-latest","linux":"ubuntul-latest"}')['mac'] }} steps: - run: echo This is a special branch! # ERROR: Broken JSON string passed to fromJSON. if: contains(fromJSON('["main","release","dev"'), github.ref_name)
- Allow passing command arguments to
-shellcheckargument. (#483, thanks @anuraaga)- This is useful when you want to use alternative build of shellcheck like go-shellcheck.
actionlint -shellcheck="go run github.com/wasilibs/go-shellcheck/cmd/shellcheck@latest"
- This is useful when you want to use alternative build of shellcheck like go-shellcheck.
- Support undocumented
repository_visibility,artifact_cache_size_limit,step_summary,output,stateproperties ingithubcontext. (#489, thanks @rasa for addingrepository_visibilityproperty) - Remove
macos-12runner label from known labels because it was dropped from GitHub-hosted runners on Dec. 3 and is no longer available. - Add
windows-2025runner label to the known labels. The runner is in public preview. (#491, thanks @ericcornelissen) - Add
blackto the list of colors forbranding.coloraction metadata. (#485, thanks @eifinger) - Add
tableto the list of icons forbranding.iconaction metadata. - Fix parsing escaped
{informat()function call's first argument. - Fix the incorrect
join()function overload.join(s1: string, s2: string)was wrongly accepted. - Update popular actions data set to the latest.
- Link to the documents of the stable version in actionlint
manpage and-helpoutput. - Refactor
LintStdin()API example and some unit tests. (#472, #475, thanks @alexandear) - Improve the configuration example in
actionlint.yamldocument to explain glob patterns forpaths. (#481)
v1.7.4
- Disallow the usage of popular actions that run on
node16runner. Thenode16runner will reach the end of life on November 12.- In case of the error, please update your actions to the latest version so that they run on the latest
node20runner. - If you're using self-hosted runner and you cannot upgrade your runner to
node20soon, please consider to ignore the error by thepathsconfiguration described below. - If you're using
actions/upload-artifact@v3andactions/download-artifact@v3on GHES, please replace them withactions/upload-artifact@v3-node20andactions/download-artifact@v3-node20. (#468)
- In case of the error, please update your actions to the latest version so that they run on the latest
- Provide the configuration for ignoring errors by regular expressions in
actionlint.yml(oractionlint.yaml). Please see the document for more details. (#217, #342)- The
pathsis a mapping from the file path glob pattern to the corresponding configuration. Theignoreconfiguration is a list of regular expressions to match error messages (similar to the-ignorecommand line option).paths: # This pattern matches any YAML file under the '.github/workflows/' directory. .github/workflows/**/*.yaml: ignore: # Ignore the specific error from shellcheck - 'shellcheck reported issue in this script: SC2086:.+' # This pattern only matches '.github/workflows/release.yaml' file. .github/workflows/release.yaml: ignore: # Ignore errors from the old runner check. This may be useful for (outdated) self-hosted runner environment. - 'the runner of ".+" action is too old to run on GitHub Actions'
- This configuration was not implemented initially because I wanted to keep the configuration as minimal as possible. However, due to several requests for it, the configuration has now been added.
- The
- Untrusted inputs check is safely skipped inside specific function calls. (#459, thanks @IlyaGulya)
- For example, the following step contains the untrusted input
github.head_ref, but it is safe because it's passed to thecontains()argument.- run: echo "is_release_branch=${{ contains(github.head_ref, 'release') }}" >> "$GITHUB_OUTPUT"
- For more details, please read the rule document.
- For example, the following step contains the untrusted input
- Recognize
gcr.ioandgcr.devas the correct container registry hosts. (#463, thanks @takaidohigasi)- Note that it is recommended explicitly specifying the scheme like
docker://gcr.io/....
- Note that it is recommended explicitly specifying the scheme like
- Remove
macos-x.0runner labels which are no longer available. (#452) - Disable shellcheck
SC2043rule because it can cause false positives on checkingrun:. (#355)- The rule document was updated as well. (#466, thanks @risu729)
- Fix the error message was not deterministic when detecting cycles in
needsdependencies. - Fix the check for
format()function was not applied when the function name contains upper case likeFormat(). Note that function names in${{ }}placeholders are case-insensitive. - Update the popular actions data set to the latest.
- This includes the new
refandcommitoutputs ofactions/checkout.
- This includes the new
- Add
actions/cache/saveandactions/cache/restoreto the popular actions data set. - Links in the README.md now point to the document of the latest version tag instead of HEAD of
mainbranch. - Add
Linter.LintStdinmethod dedicated to linting STDIN instead of handling STDIN inCommand. - (Dev) Add new
check-checksscript to maintain the 'Checks' document. It automatically updates the outputs and playground links for example inputs in the document. It also checks the document is up-to-date on CI. Please read the document for more details.
v1.7.3
- Remove
macos-11runner labels because macOS 11 runner was dropped on 6/28/2024. (#451, thanks @muzimuzhi) - Support
macos-15,macos-15-large, andmacos-15-xlargerunner labels. The macOS 15 runner is not globally available yet, but they are available in beta. (#453, thanks @muzimuzhi) - Release artifact includes checksums for the released binaries. The file name is
actionlint_{version}_checksums.txt. (#449)- For example, the checksums for v1.7.3 can be found here.
- Fix
download-pathoutput is missing inactions/download-artifact@v3action. (#442)- Note that the latest version
actions/download-artifact@v4was not affected by this issue.
- Note that the latest version
- Support Go 1.23.
v1.7.2
- Fix child processes to run in parallel.
- Update the popular actions data set to the latest. (#442, #445, #446, #447, thanks @maikelvdh)
- Add support for checking branch filters on
merge_groupevent. (#448, thanks @muzimuzhi) - The playground now supports both light and dark modes and automatically applies the system's theme.
- Fix releasing a failure on making a new winget package. (#438, thanks @vedantmgoyal9)