File salt-lint.spec of Package salt-lint

#
# spec file for package salt-lint
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%if 0%{?suse_version} > 1500
%global pythons    %{primary_python}
%else
%if 0%{?sle_version} >= 150700
%global pythons    python311
%else
%global pythons    python3
%endif
%endif

Name:           salt-lint
Version:        0.9.2
Release:        0
License:        MIT
Summary:        A command-line utility that checks for best practices in SaltStack
URL:            https://github.com/warpnet/salt-lint
Group:          Development/Languages/Python
Source:         https://files.pythonhosted.org/packages/source/s/salt-lint/salt-lint-%{version}.tar.gz
BuildRequires:  %{pythons}-devel
BuildRequires:  %{pythons}-setuptools
BuildRequires:  python-rpm-macros
# SECTION test requirements
BuildRequires:  %{pythons}-pathspec >= 0.6.0
BuildRequires:  %{pythons}-PyYAML
BuildRequires:  %{pythons}-salt
# /SECTION
BuildRequires:  fdupes
Requires:       %{pythons} >= 3.6
Requires:       %{pythons}-PyYAML
Requires:       %{pythons}-pathspec >= 0.6.0
Requires:       %{pythons}-salt
BuildArch:      noarch

%description
.. image:: https://img.shields.io/pypi/v/salt-lint.svg?style=for-the-badge
    :target: https://pypi.org/project/salt-lint
    :alt: PyPI

.. image:: https://img.shields.io/travis/roaldnefs/salt-lint.svg?style=for-the-badge
    :target: https://travis-ci.org/roaldnefs/salt-lint
    :alt: Travis (.org)

.. image:: https://img.shields.io/coveralls/github/roaldnefs/salt-lint.svg?style=for-the-badge
    :target: https://coveralls.io/github/roaldnefs/salt-lint
    :alt: Coveralls

Salt-lint
=========

``salt-lint`` checks Salt state files (SLS) for practices and behavior that could potentially be improved.

The project is heavily based on `ansible-lint`_, which was created by `Will Thames`_ and is now maintained as part of the `Ansible`_ by `Red Hat`_ project.

Installing
==========

Using Pip
---------

.. code-block:: bash

    pip install salt-lint

From Source
-----------

.. code-block:: bash

    pip install git+https://github.com/roaldnefs/salt-lint.git

Usage
=====

Command Line Options
--------------------

The following is the output from ``salt-lint --help``, providing an overview of the basic command line options:

.. code-block:: bash

   Usage: salt-lint [options] init.sls [state ...]

   Options:
     --version             show program's version number and exit
     -h, --help            show this help message and exit
     -L                    list all the rules
     -r RULESDIR           specify one or more rules directories using one or
                           more -r arguments. Any -r flags override the default
                           rules in /tmp/saltlint/lib/saltlint/rules, unless -R
                           is also used.
     -R                    Use default rules in /tmp/saltlint/lib/saltlint/rules
                           in addition to any extra rules directories specified
                           with -r. There is no need to specify this if no -r
                           flags are used.
     -t TAGS               only check rules whose id/tags match these values
     -T                    list all the tags
     -v                    Increase verbosity level
     -x SKIP_LIST          only check rules whose id/tags do not match these
                           values
     --nocolor             disable colored output
     --force-color         Try force colored output (relying on salt's code)
     --exclude=EXCLUDE_PATHS
                           path to directories or files to skip. This option is
                           repeatable.
     -c C                  Specify configuration file to use.  Defaults to
                           ".salt-lint"

Linting Salt state files
------------------------

It's important to note that ``salt-lint`` accepts a list of Salt state files or a list of directories.

GitHub Action
-------------

Salt-lint is available on the GitHub `marketplace`_ as a GitHub Action. The `salt-lint-action`_ allows you to run ``salt-lint`` with no additional options.

To use the action simply add the following lines to your ``.github/workflows/main.yml``.

.. code-block:: yaml

    on: [push]

    jobs:
      test:
        runs-on: ubuntu-latest
        name: Salt Lint Action
        steps:
        - uses: actions/checkout@v1
        - name: Run salt-lint
          uses: roaldnefs/salt-lint-action@master
          env:
            ACTION_STATE_NAME: init.sls

Configuring
===========

Configuration File
------------------

Salt-lint supports local configuration via a ``.salt-lint`` configuration file. Salt-lint checks the working directory for the presence of this file and applies any configuration found there. The configuration file location can also be overridden via the ``-c path/to/file`` CLI flag.

If a value is provided on both the command line and via a configuration file, the values will be merged (if a list like **exclude_paths**), or the **True** value will be preferred, in the case of something like **quiet**.

The following values are supported, and function identically to their CLI counterparts:

.. code-block:: yaml

    ---
    exclude_paths:
      - exclude_this_file
      - exclude_this_directory/
      - exclude/this/sub-directory/
    skip_list:
      - 207
      - 208
    tags:
      - formatting
    verbosity: 1

Pre-commit Setup
----------------

To use salt-lint with `pre-commit`_,  just add the following to your local repo's ``.pre-commit-config.yaml`` file. Prior to version 0.12.0 of `pre-commit`_ the file was ``hooks.yaml`` (now ``.pre-commit-config.yaml``).

.. code-block:: yaml

    ---

    # For use with pre-commit.
    # See usage instructions at http://pre-commit.com

    -   id: salt-lint
        name: Salt-lint
        description: This hook runs salt-lint.
        entry: salt-lint
        language: python
        files: \.(sls)$

Rules
=====

False Positives: Skipping Rules
-------------------------------

Some rules are bit of a rule of thumb. To skip a specific rule for a specific task, inside your state add ``# noqa [rule_id]`` at the end of the line. You can skip multiple rules via a space-separated list. Example:

.. code-block:: yaml

    /tmp/testfile:
      file.managed:
        - source: salt://{{unspaced_var}}/example  # noqa: 206

Authors
=======

salt-lint is heavily based on `ansible-lint`_ with the modified work by `Roald Nefs`_. `ansible-lint`_ was created by `Will Thames`_ and is now maintained as part of the `Ansible`_ by `Red Hat`_ project.

.. _pre-commit: https://pre-commit.com
.. _ansible-lint: https://github.com/ansible/ansible-lint
.. _Roald Nefs: https://github.com/roaldnefs
.. _Will Thames: https://github.com/willthames
.. _Ansible: https://ansible.com
.. _Red Hat: https://redhat.com
.. _marketplace: https://github.com/marketplace/actions/salt-lint
.. _salt-lint-action: https://github.com/roaldnefs/salt-lint-action

%prep
%setup -q -n salt-lint-%{version}

%build
%python_build

%install
%python_install

%files
%doc *.md
%license LICENSE*
%{_bindir}/salt-lint
%{python_sitelib}/salt_lint*egg*
%{python_sitelib}/saltlint/

%changelog
openSUSE Build Service is sponsored by