Skip to content

Releases: rhysd/actionlint

v1.7.11

14 Feb 11:41

Choose a tag to compare

  • 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-large and windows-2025-vs2026 runner 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 gh command 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

30 Dec 16:30

Choose a tag to compare

  • Support YAML anchors and aliases (&anchor and *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 *-xl macOS 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-13
    • macos-13-large
    • macos-13-xlarge
  • Increase the maximum number of inputs in the workflow_dispatch event from 10 to 25 because the limitation was recently relaxed. (#598, thanks @Haegi)
  • Support artifact-metadata permission 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 of format() function call. For example v1.7.9 didn't parse "{{0} {1} {2}}" correctly.
  • Detect an invalid value at type in 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 mise in 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

21 Nov 04:38

Choose a tag to compare

  • Add support for ubuntu-slim runner label. (#585, thanks @cestorer)
  • Check input deprecation in action by checking deprecationMessage property. Using a deprecated input is reported as error if it is not marked as required. 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.
  • Report constant conditions at if: like if: true as error. Only very simple expressions like true or false are 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-token and models scopes. (#582, thanks @holtkampjs)
  • Fix args and entrypoint inputs are not recognized at uses: when it's not a Docker action. (#550)
  • Set correct column in source position of YAML parse error.
  • Fix credentials cannot be configured with ${{ }}. (#590)
  • Improve messages in syntax errors on parsing steps (run: and uses:). 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.AllContexts map 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-action
    • openai/codex-action
    • google-github-actions/run-gemini-cli
  • Add make cov task to easily generate a code coverage report.
  • Make installing the formula version of actionlint pacakge 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

11 Oct 11:09

Choose a tag to compare

v1.7.7

19 Jan 12:01

Choose a tag to compare

  • Support runner labels for Linux arm64 hosted runners. (#503, #504, thanks @martincostello)
    • ubuntu-24.04-arm
    • ubuntu-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

04 Jan 15:38

Choose a tag to compare

  • Fix using contexts at specific workflow keys is incorrectly reported as not allowed. Affected workflow keys are as follows. (#495, #497, #498, #500)
    • jobs.<job_id>.steps.with.args
    • jobs.<job_id>.steps.with.entrypoint
    • jobs.<job_id>.services.<service_id>.env
  • Update Go dependencies to the latest.

v1.7.5

28 Dec 11:45

Choose a tag to compare

  • Strictly check available contexts in ${{ }} placeholders following the 'Context availability' table in the official document.
    • For example, jobs.<job_id>.defaults.run.shell allows env context but shell workflow 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}}
  • 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 -shellcheck argument. (#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"
  • Support undocumented repository_visibility, artifact_cache_size_limit, step_summary, output, state properties in github context. (#489, thanks @rasa for adding repository_visibility property)
  • Remove macos-12 runner label from known labels because it was dropped from GitHub-hosted runners on Dec. 3 and is no longer available.
  • Add windows-2025 runner label to the known labels. The runner is in public preview. (#491, thanks @ericcornelissen)
  • Add black to the list of colors for branding.color action metadata. (#485, thanks @eifinger)
  • Add table to the list of icons for branding.icon action metadata.
  • Fix parsing escaped { in format() 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.
    • Add download-artifact/v3-node20 to the data set. (#468)
    • Fix missing the reviewdog/action-hadolint@v1 action input. (#487, thanks @mi-wada)
  • Link to the documents of the stable version in actionlint man page and -help output.
  • Refactor LintStdin() API example and some unit tests. (#472, #475, thanks @alexandear)
  • Improve the configuration example in actionlint.yaml document to explain glob patterns for paths. (#481)

v1.7.4

04 Nov 11:05

Choose a tag to compare

  • Disallow the usage of popular actions that run on node16 runner. The node16 runner 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 node20 runner.
    • If you're using self-hosted runner and you cannot upgrade your runner to node20 soon, please consider to ignore the error by the paths configuration described below.
    • If you're using actions/upload-artifact@v3 and actions/download-artifact@v3 on GHES, please replace them with actions/upload-artifact@v3-node20 and actions/download-artifact@v3-node20. (#468)
  • Provide the configuration for ignoring errors by regular expressions in actionlint.yml (or actionlint.yaml). Please see the document for more details. (#217, #342)
    • The paths is a mapping from the file path glob pattern to the corresponding configuration. The ignore configuration is a list of regular expressions to match error messages (similar to the -ignore command 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.
  • 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 the contains() argument.
      - run: echo "is_release_branch=${{ contains(github.head_ref, 'release') }}" >> "$GITHUB_OUTPUT"
    • For more details, please read the rule document.
  • Recognize gcr.io and gcr.dev as the correct container registry hosts. (#463, thanks @takaidohigasi)
    • Note that it is recommended explicitly specifying the scheme like docker://gcr.io/....
  • Remove macos-x.0 runner labels which are no longer available. (#452)
  • Disable shellcheck SC2043 rule because it can cause false positives on checking run:. (#355)
  • Fix the error message was not deterministic when detecting cycles in needs dependencies.
  • Fix the check for format() function was not applied when the function name contains upper case like Format(). Note that function names in ${{ }} placeholders are case-insensitive.
  • Update the popular actions data set to the latest.
  • Add actions/cache/save and actions/cache/restore to the popular actions data set.
  • Links in the README.md now point to the document of the latest version tag instead of HEAD of main branch.
  • Add Linter.LintStdin method dedicated to linting STDIN instead of handling STDIN in Command.
  • (Dev) Add new check-checks script 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.

Documentation

v1.7.3

29 Sep 12:09

Choose a tag to compare

  • Remove macos-11 runner labels because macOS 11 runner was dropped on 6/28/2024. (#451, thanks @muzimuzhi)
  • Support macos-15, macos-15-large, and macos-15-xlarge runner 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-path output is missing in actions/download-artifact@v3 action. (#442)
    • Note that the latest version actions/download-artifact@v4 was not affected by this issue.
  • Support Go 1.23.

Documentation

v1.7.2

23 Sep 16:40

Choose a tag to compare