Skip to content

v1.7.0

Compare
Choose a tag to compare
@github-actions github-actions released this 08 May 16:40
· 200 commits to main since this release
  • From this version, actionlint starts to check action metadata file action.yml (or action.yaml). At this point, only very basic checks are implemented and contents of steps: are not checked yet.
    • It checks properties under runs: section (e.g. main: can be specified when it is a JavaScript action), branding: properties, and so on.
      name: 'My action'
      author: '...'
      # ERROR: 'description' section is missing
      
      branding:
        # ERROR: Invalid icon name
        icon: dog
      
      runs:
        # ERROR: Node.js runtime version is too old
        using: 'node12'
        # ERROR: The source file being run by this action does not exist
        main: 'this-file-does-not-exist.js'
        # ERROR: 'env' configuration is only allowed for Docker actions
        env:
          SOME_VAR: SOME_VALUE
    • actionlint still focuses on checking workflow files. So there is no way to directly specify action.yml as an argument of actionlint command. actionlint checks all local actions which are used by given workflows. If you want to use actionlint for your action development, prepare a test/example workflow which uses your action, and check it with actionlint instead.
    • Checks for steps: contents are planned to be implemented. Since several differences are expected between steps: in workflow file and steps: in action metadata file (e.g. available contexts), the implementation is delayed to later version. And the current implementation of action metadata parser is ad hoc. I'm planning a large refactorying and breaking changes Go API around it are expected.
  • Add runner.environment property. (#412)
    - run: echo 'Run by GitHub-hosted runner'
      if: runner.environment == 'github-hosted'
  • Using outdated popular actions is now detected at error. See the document for more details.
    • Here 'outdated' means actions which use runtimes no longer supported by GitHub-hosted runners such as node12.
      # ERROR: actions/checkout@v2 is using the outdated runner 'node12'
      - uses: actions/checkout@v2
  • Support attestations permission which was recently added to GitHub Actions as beta. (#418, thanks @bdehamer)
    permissions:
      id-token: write
      contents: read
      attestations: write
  • Check comparison expressions more strictly. Arbitrary types of operands can be compared as the official document explains. However, comparisons between some types are actually meaningless because the values are converted to numbers implicitly. actionlint catches such meaningless comparisons as errors. Please see the check document for more details.
    on:
      workflow_call:
        inputs:
          timeout:
            type: boolean
    
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - run: echo 'called!'
            # ERROR: Comparing string to object is always evaluated to false
            if: ${{ github.event == 'workflow_call' }}
          - run: echo 'timeout is too long'
            # ERROR: Comparing boolean value with `>` doesn't make sense
            if: ${{ inputs.timeout > 60 }}
  • Follow the update that macos-latest is now an alias to macos-14 runner.
  • Support a custom python shell by pyflakes rule.
  • Add workaround actionlint reports that dorny/paths-filter's predicate-quantifier input is not defined. (#416)
  • Fix the type of a conditional expression by comparison operators is wider than expected by implementing type narrowing. (#384)
    • For example, the type of following expression should be number but it was actually string | number and actionlint complained that timeout-minutes must take a number value.
      timeout-minutes: ${{ env.FOO && 10 || 60 }}
  • Fix ${{ }} placeholder is not available at jobs.<job_id>.services. (#402)
    jobs:
      test:
        services: ${{ fromJSON('...') }}
        runs-on: ubuntu-latest
        steps:
          - run: ...
  • Do not check outputs of google-github-actions/get-secretmanager-secrets because this action sets outputs dynamically. (#404)
  • Fix defaults.run is ignored on detecting the shell used in run:. (#409)
    defaults:
      run:
        shell: pwsh
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          # This was wrongly detected as bash script
          - run: $Env:FOO = "FOO"
  • Fix parsing a syntax error reported from pyflakes when checking a Python script in run:. (#411)
    - run: print(
      shell: python
  • Skip checking exclude: items in matrix: when they are constructed from ${{ }} dynamically. (#414)
    matrix:
      foo: ['a', 'b']
      exclude:
        # actionlint complained this value didn't exist in matrix combinations
        - foo: ${{ env.EXCLUDE_FOO }}
  • Fix checking exclude: items when ${{ }} is used in nested arrays at matrix items.
    matrix:
      foo:
        - ["${{ fromJSON('...') }}"]
      exclude:
        # actionlint complained this value didn't match to any matrix combinations
        - foo: ['foo']
  • Update popular actions data set. New major versions are added and the following actions are newly added.
    • peaceiris/actions-hugo
    • actions/attest-build-provenance
    • actions/add-to-project
    • octokit/graphql-action
  • Update Go dependencies to the latest.
  • Reduce the size of actionlint executable by removing redundant data from popular actions data set.
    • x86_64 executable binary size was reduced from 6.9MB to 6.7MB (2.9% smaller).
    • Wasm binary size was reduced from 9.4MB to 8.9MB (5.3% smaller).
  • Describe how to integrate actionlint to Pulsar Edit in the document. (#408, thanks @mschuchard)
  • Update outdated action versions in the usage document. (#413, thanks @naglis)