- From this version, actionlint starts to check action metadata file
action.yml(oraction.yaml). At this point, only very basic checks are implemented and contents ofsteps: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.ymlas an argument ofactionlintcommand. 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 betweensteps:in workflow file andsteps: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.
- It checks properties under
- Add
runner.environmentproperty. (#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
- Here 'outdated' means actions which use runtimes no longer supported by GitHub-hosted runners such as
- Support
attestationspermission 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-latestis now an alias tomacos-14runner. - Support a custom python shell by
pyflakesrule. - Add workaround actionlint reports that
dorny/paths-filter'spredicate-quantifierinput 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
numberbut it was actuallystring | numberand actionlint complained thattimeout-minutesmust take a number value.timeout-minutes: ${{ env.FOO && 10 || 60 }}
- For example, the type of following expression should be
- Fix
${{ }}placeholder is not available atjobs.<job_id>.services. (#402)jobs: test: services: ${{ fromJSON('...') }} runs-on: ubuntu-latest steps: - run: ... - Do not check outputs of
google-github-actions/get-secretmanager-secretsbecause this action sets outputs dynamically. (#404) - Fix
defaults.runis ignored on detecting the shell used inrun:. (#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 inmatrix: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-hugoactions/attest-build-provenanceactions/add-to-projectoctokit/graphql-action
- Update Go dependencies to the latest.
- Reduce the size of
actionlintexecutable 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)