Skip to content

irasnyd/puppet-lint-action

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

GitHub Action for Puppet Lint

This Action for Puppet Lint enables arbitrary actions for interacting with Puppet Lint to test Puppet code against the recommended Puppet language style guide.

Puppet Lint validates only code style; it does not validate syntax. If you wish to perform syntax validation, you can use the puppet-parser-validate-action Github Action.

Usage

An example workflow for testing manifests for correct Puppet style - run the puppet-lint command with the path to the files you want to test as args.

name: Puppet Lint

on: [push]

jobs:
  puppet-lint:

    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: puppet-lint
      uses: irasnyd/puppet-lint-action@master
      with:
        args: ./

If you wish to use a specific version, without needing to rebuild the container each time, you can use the version hosted on the Docker Hub.

name: Puppet Lint

on: [push]

jobs:
  puppet-lint:

    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: puppet-lint
      uses: docker://irasnyd/puppet-lint-action:2.4.2-2
      with:
        args: ./

For example:

See Testing with Puppet Lint for full usage details.

Full Example

name: Puppet Lint

on: [push]

jobs:
  puppet-lint:

    runs-on: ubuntu-18.04

    steps:

    # Checkout the source code from the Github repository
    - name: Checkout Source Code
      uses: actions/checkout@v2
      with:
        fetch-depth: 0

    # Determine which files changed in the commit(s) in this Pull Request
    # https://github.com/trilom/file-changes-action
    # https://github.com/marketplace/actions/file-changes-action
    - name: Get Changed Files
      id: get_file_changes
      uses: trilom/[email protected]

    # Filter out Puppet manifests (*.pp) from the added/modified files
    # Store the Puppet manifest filenames into output named: files
    # Store the number of Puppet manifests into output named: numfiles
    - name: Filter Puppet Manifests
      id: puppet_manifests
      run: |
        jq '.[] | select(.|endswith(".pp"))' $HOME/files_added.json $HOME/files_modified.json > $HOME/manifests.txt
        echo "::set-output name=files::$(cat $HOME/manifests.txt | tr '\n' ' ')"
        echo "::set-output name=numfiles::$(cat $HOME/manifests.txt | wc -l)"

    # Puppet Lint on added/modified Puppet manifests
    - name: Puppet Lint
      uses: docker://irasnyd/puppet-lint-action:2.4.2-2
      with:
        args: --no-140chars-check --no-class_inherits_from_params_class-check --no-relative_classname_inclusion-check ${{ steps.puppet_manifests.outputs.files }}
      if: "steps.puppet_manifests.outputs.numfiles > 0"

License

The Dockerfile and associated scripts and documentation in this project are released under the MIT License.

Container images built with this project include third party materials. See THIRD_PARTY_NOTICE.md for details.