pax_global_header 0000666 0000000 0000000 00000000064 14773473560 0014532 g ustar 00root root 0000000 0000000 52 comment=c16f018b1bdfdea6717f4b5b1b141a78b86021cd
ansible-ansible-lint-c16f018/ 0000775 0000000 0000000 00000000000 14773473560 0016060 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/.ansible-lint 0000664 0000000 0000000 00000010601 14773473560 0020440 0 ustar 00root root 0000000 0000000 ---
# .ansible-lint
profile: null # min, basic, moderate,safety, shared, production
# Allows dumping of results in SARIF format
# sarif_file: result.sarif
# exclude_paths included in this file are parsed relative to this file's location
# and not relative to the CWD of execution. CLI arguments passed to the --exclude
# option are parsed relative to the CWD of execution.
exclude_paths:
- .cache/ # implicit unless exclude_paths is defined in config
- test/fixtures/formatting-before/
- test/fixtures/formatting-prettier/
# parseable: true
# quiet: true
# strict: true
# verbosity: 1
# Mock modules or roles in order to pass ansible-playbook --syntax-check
mock_modules:
- zuul_return
# note the foo.bar is invalid as being neither a module or a collection
- fake_namespace.fake_collection.fake_module
- fake_namespace.fake_collection.fake_module.fake_submodule
mock_roles:
- mocked_role
- author.role_name # old standalone galaxy role
- fake_namespace.fake_collection.fake_role # role within a collection
# Enable checking of loop variable prefixes in roles
loop_var_prefix: "^(__|{role}_)"
# Enforce variable names to follow pattern below, in addition to Ansible own
# requirements, like avoiding python identifiers. To disable add `var-naming`
# to skip_list.
var_naming_pattern: "^[a-z_][a-z0-9_]*$"
use_default_rules: true
# Load custom rules from this specific folder
# rulesdir:
# - ./rule/directory/
# Ansible-lint is able to recognize and load skip rules stored inside
# `.ansible-lint-ignore` (or `.config/ansible-lint-ignore.txt`) files.
# To skip a rule just enter filename and tag, like "playbook.yml package-latest"
# on a new line.
# Optionally you can add comments after the tag, prefixed by "#". We discourage
# the use of skip_list below because that will hide violations from the output.
# When putting ignores inside the ignore file, they are marked as ignored, but
# still visible, making it easier to address later.
skip_list:
- skip_this_tag
# Ansible-lint does not automatically load rules that have the 'opt-in' tag.
# You must enable opt-in rules by listing each rule 'id' below.
enable_list:
- args
- empty-string-compare # opt-in
- no-log-password # opt-in
- no-same-owner # opt-in
- name[prefix] # opt-in
- galaxy-version-incorrect # opt-in
# add yaml here if you want to avoid ignoring yaml checks when yamllint
# library is missing. Normally its absence just skips using that rule.
- yaml
# Report only a subset of tags and fully ignore any others
# tags:
# - jinja[spacing]
# Ansible-lint does not fail on warnings from the rules or tags listed below
warn_list:
- skip_this_tag
- experimental # experimental is included in the implicit list
# - role-name
# - yaml[document-start] # you can also use sub-rule matches
# Some rules can transform files to fix (or make it easier to fix) identified
# errors. `ansible-lint --fix` will reformat YAML files and run these transforms.
# By default it will run all transforms (effectively `write_list: ["all"]`).
# You can disable running transforms by setting `write_list: ["none"]`.
# Or only enable a subset of rule transforms by listing rules/tags here.
# write_list:
# - all
# Offline mode disables installation of requirements.yml and schema refreshing
offline: true
# Define required Ansible's variables to satisfy syntax check
extra_vars:
foo: bar
multiline_string_variable: |
line1
line2
complex_variable: ":{;\t$()"
# Uncomment to enforce action validation with tasks, usually is not
# needed as Ansible syntax check also covers it.
# skip_action_validation: false
# List of additional kind:pattern to be added at the top of the default
# match list, first match determines the file kind.
kinds:
# - playbook: "**/examples/*.{yml,yaml}"
# - galaxy: "**/folder/galaxy.yml"
# - tasks: "**/tasks/*.yml"
# - vars: "**/vars/*.yml"
# - meta: "**/meta/main.yml"
- yaml: "**/*.yaml-too"
# List of additional collections to allow in only-builtins rule.
# only_builtins_allow_collections:
# - example_ns.example_collection
# List of additions modules to allow in only-builtins rule.
# only_builtins_allow_modules:
# - example_module
# Allow setting custom prefix for name[prefix] rule
task_name_prefix: "{stem} | "
# Complexity related settings
# Limit the depth of the nested blocks:
# max_block_depth: 20
# Also recognize these versions of Ansible as supported:
# supported_ansible_also:
# - "2.18"
ansible-ansible-lint-c16f018/.ansible-lint-ignore 0000664 0000000 0000000 00000000235 14773473560 0021723 0 ustar 00root root 0000000 0000000 # See https://ansible.readthedocs.io/projects/lint/configuring/#ignoring-rules-for-entire-files
playbook2.yml package-latest # comment
playbook2.yml foo-bar
ansible-ansible-lint-c16f018/.config/ 0000775 0000000 0000000 00000000000 14773473560 0017403 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/.config/ansible-lint.spec 0000664 0000000 0000000 00000003303 14773473560 0022637 0 ustar 00root root 0000000 0000000 # spell-checker:ignore bcond pkgversion buildrequires autosetup PYTHONPATH noarch buildroot bindir sitelib numprocesses clib
# All tests require Internet access
# to test in mock use: --enable-network --with check
# to test in a privileged environment use:
# --with check --with privileged_tests
%bcond_with check
%bcond_with privileged_tests
Name: ansible-lint
Version: VERSION_PLACEHOLDER
Release: 1%{?dist}
Summary: Ansible-lint checks ansible content for common mistakes
License: GPL-3.0-or-later AND MIT
URL: https://github.com/ansible/ansible-lint
Source0: %{pypi_source}
BuildArch: noarch
BuildRequires: python%{python3_pkgversion}-devel
%if %{with check}
# These are required for tests:
BuildRequires: python%{python3_pkgversion}-pytest
BuildRequires: python%{python3_pkgversion}-pytest-xdist
BuildRequires: python%{python3_pkgversion}-libselinux
BuildRequires: git-core
%endif
Requires: git-core
%description
Ansible-lint checks ansible content for practices and behaviors that could
potentially be improved.
%prep
%autosetup
%generate_buildrequires
%pyproject_buildrequires
%build
%pyproject_wheel
%install
%pyproject_install
%pyproject_save_files ansiblelint
%check
# Don't try to import tests that import pytest which isn't available at runtime
%pyproject_check_import -e 'ansiblelint.testing*' -e 'ansiblelint.rules.conftest'
%if %{with check}
%pytest \
-v \
--disable-pytest-warnings \
--numprocesses=auto \
%if %{with privileged_tests}
tests
%else
tests/unit
%endif
%endif
%files -f %{pyproject_files}
%{_bindir}/ansible-lint
%license COPYING docs/licenses/LICENSE.mit.txt
%doc docs/ README.md
%changelog
ansible-ansible-lint-c16f018/.config/constraints.txt 0000664 0000000 0000000 00000020046 14773473560 0022515 0 ustar 00root root 0000000 0000000 # This file was autogenerated by uv via the following command:
# tox run -e deps
ansible-compat==25.1.5 # via ansible-lint (pyproject.toml)
astroid==3.3.9 # via pylint
asttokens==3.0.0 # via stack-data
attrs==25.3.0 # via jsonschema, referencing
babel==2.17.0 # via mkdocs-material
backrefs==5.8 # via mkdocs-material
beautifulsoup4==4.13.3 # via linkchecker, mkdocs-htmlproofer-plugin
bindep==2.13.0 # via tox-extra
black==25.1.0 # via ansible-lint (pyproject.toml)
boolean-py==4.0 # via license-expression
bracex==2.5.post1 # via wcmatch
cachetools==5.5.2 # via tox
cairocffi==1.7.1 # via cairosvg
cairosvg==2.7.1 # via mkdocs-ansible
certifi==2025.1.31 # via requests
cffi==1.17.1 # via cairocffi, cryptography
chardet==5.2.0 # via tox
charset-normalizer==3.4.1 # via requests
click==8.1.8 # via black, mkdocs
colorama==0.4.6 # via griffe, mkdocs-material, tox
coverage==7.7.1 # via coverage-enable-subprocess, ansible-lint (pyproject.toml)
coverage-enable-subprocess==1.0 # via ansible-lint (pyproject.toml)
cryptography==44.0.2 # via ansible-core
csscompressor==0.9.5 # via mkdocs-minify-plugin
cssselect2==0.8.0 # via cairosvg
decorator==5.2.1 # via ipdb, ipython
defusedxml==0.7.1 # via cairosvg
dill==0.3.9 # via pylint
distlib==0.3.9 # via virtualenv
distro==1.9.0 # via bindep
dnspython==2.7.0 # via linkchecker
execnet==2.1.1 # via pytest-xdist
executing==2.2.0 # via stack-data
filelock==3.18.0 # via tox, virtualenv, ansible-lint (pyproject.toml)
ghp-import==2.1.0 # via mkdocs
gitdb==4.0.12 # via gitpython
gitpython==3.1.44 # via tox-extra
griffe==1.7.1 # via mkdocstrings-python
hjson==3.1.0 # via mkdocs-macros-plugin, super-collections
htmlmin2==0.1.13 # via mkdocs-minify-plugin
idna==3.10 # via requests
importlib-metadata==8.6.1 # via ansible-lint (pyproject.toml)
iniconfig==2.1.0 # via pytest
ipdb==0.13.13 # via ansible-lint (pyproject.toml)
ipython==8.34.0 # via ipdb, ansible-lint (pyproject.toml)
isort==6.0.1 # via pylint
jedi==0.19.2 # via ipython
jinja2==3.1.6 # via ansible-core, mkdocs, mkdocs-macros-plugin, mkdocs-material, mkdocstrings
jmespath==1.0.1 # via ansible-lint (pyproject.toml)
jsmin==3.0.1 # via mkdocs-minify-plugin
jsonschema==4.23.0 # via ansible-compat, ansible-lint (pyproject.toml)
jsonschema-specifications==2024.10.1 # via jsonschema
license-expression==30.4.1 # via ansible-lint (pyproject.toml)
linkchecker==10.5.0 # via mkdocs-ansible
markdown==3.7 # via markdown-include, mkdocs, mkdocs-autorefs, mkdocs-htmlproofer-plugin, mkdocs-material, mkdocstrings, pymdown-extensions
markdown-exec==1.10.3 # via mkdocs-ansible
markdown-include==0.8.1 # via mkdocs-ansible
markupsafe==3.0.2 # via jinja2, mkdocs, mkdocs-autorefs, mkdocstrings
matplotlib-inline==0.1.7 # via ipython
mccabe==0.7.0 # via pylint
mergedeep==1.3.4 # via mkdocs, mkdocs-get-deps
mkdocs==1.6.1 # via mkdocs-ansible, mkdocs-autorefs, mkdocs-gen-files, mkdocs-htmlproofer-plugin, mkdocs-macros-plugin, mkdocs-material, mkdocs-minify-plugin, mkdocs-monorepo-plugin, mkdocstrings
mkdocs-ansible==25.2.0 # via ansible-lint (pyproject.toml)
mkdocs-autorefs==1.4.1 # via mkdocstrings, mkdocstrings-python
mkdocs-gen-files==0.5.0 # via mkdocs-ansible
mkdocs-get-deps==0.2.0 # via mkdocs
mkdocs-htmlproofer-plugin==1.3.0 # via mkdocs-ansible
mkdocs-macros-plugin==1.3.7 # via mkdocs-ansible
mkdocs-material==9.6.9 # via mkdocs-ansible
mkdocs-material-extensions==1.3.1 # via mkdocs-ansible, mkdocs-material
mkdocs-minify-plugin==0.8.0 # via mkdocs-ansible
mkdocs-monorepo-plugin==1.1.0 # via mkdocs-ansible
mkdocstrings==0.29.0 # via mkdocs-ansible, mkdocstrings-python
mkdocstrings-python==1.16.8 # via mkdocs-ansible
mypy==1.15.0 # via ansible-lint (pyproject.toml)
mypy-extensions==1.0.0 # via black, mypy
netaddr==1.3.0 # via ansible-lint (pyproject.toml)
packaging==24.2 # via ansible-compat, ansible-core, bindep, black, mkdocs, mkdocs-macros-plugin, pyproject-api, pytest, pytest-sugar, tox, tox-extra, tox-uv, ansible-lint (pyproject.toml)
paginate==0.5.7 # via mkdocs-material
parsley==1.3 # via bindep
parso==0.8.4 # via jedi
pathspec==0.12.1 # via black, mkdocs, mkdocs-macros-plugin, yamllint, ansible-lint (pyproject.toml)
pbr==6.1.1 # via bindep
pexpect==4.9.0 # via ipython
pillow==11.1.0 # via cairosvg, mkdocs-ansible
platformdirs==4.3.7 # via black, mkdocs-get-deps, pylint, tox, virtualenv
pluggy==1.5.0 # via pytest, tox
prompt-toolkit==3.0.50 # via ipython
psutil==7.0.0 # via pytest-xdist, ansible-lint (pyproject.toml)
ptyprocess==0.7.0 # via pexpect
pure-eval==0.2.3 # via stack-data
pycparser==2.22 # via cffi
pygments==2.19.1 # via ipython, mkdocs-material
pylint==3.3.6 # via ansible-lint (pyproject.toml)
pymdown-extensions==10.14.3 # via markdown-exec, mkdocs-ansible, mkdocs-material, mkdocstrings
pyproject-api==1.9.0 # via tox
pytest==8.3.5 # via pytest-instafail, pytest-mock, pytest-plus, pytest-sugar, pytest-xdist, ansible-lint (pyproject.toml)
pytest-instafail==0.5.0 # via ansible-lint (pyproject.toml)
pytest-mock==3.14.0 # via ansible-lint (pyproject.toml)
pytest-plus==0.8.1 # via ansible-lint (pyproject.toml)
pytest-sugar==1.0.0 # via ansible-lint (pyproject.toml)
pytest-xdist==3.6.1 # via ansible-lint (pyproject.toml)
python-dateutil==2.9.0.post0 # via ghp-import, mkdocs-macros-plugin
python-slugify==8.0.4 # via mkdocs-monorepo-plugin
pyyaml==6.0.2 # via ansible-compat, ansible-core, mkdocs, mkdocs-get-deps, mkdocs-macros-plugin, pymdown-extensions, pyyaml-env-tag, yamllint, ansible-lint (pyproject.toml)
pyyaml-env-tag==0.1 # via mkdocs
referencing==0.36.2 # via jsonschema, jsonschema-specifications, types-jsonschema, ansible-lint (pyproject.toml)
requests==2.32.3 # via linkchecker, mkdocs-htmlproofer-plugin, mkdocs-material
rpds-py==0.24.0 # via jsonschema, referencing
ruamel-yaml==0.18.10 # via ansible-lint (pyproject.toml)
setproctitle==1.3.5 # via pytest-xdist
setuptools==78.1.0 # via pbr
six==1.17.0 # via python-dateutil
smmap==5.0.2 # via gitdb
soupsieve==2.6 # via beautifulsoup4
stack-data==0.6.3 # via ipython
subprocess-tee==0.4.2 # via ansible-compat, ansible-lint (pyproject.toml)
super-collections==0.5.3 # via mkdocs-macros-plugin
termcolor==2.5.0 # via mkdocs-macros-plugin, pytest-sugar
text-unidecode==1.3 # via python-slugify
tinycss2==1.4.0 # via cairosvg, cssselect2
tomlkit==0.13.2 # via pylint
tox==4.25.0 # via tox-extra, tox-uv, ansible-lint (pyproject.toml)
tox-extra==2.1.0 # via ansible-lint (pyproject.toml)
tox-uv==1.25.0 # via tox-extra, ansible-lint (pyproject.toml)
traitlets==5.14.3 # via ipython, matplotlib-inline
types-jsonschema==4.23.0.20241208 # via ansible-lint (pyproject.toml)
types-pyyaml==6.0.12.20250326 # via ansible-lint (pyproject.toml)
urllib3==2.3.0 # via requests
virtualenv==20.29.3 # via tox
watchdog==6.0.0 # via mkdocs
wcmatch==10.0 # via ansible-lint (pyproject.toml)
wcwidth==0.2.13 # via prompt-toolkit
webencodings==0.5.1 # via cssselect2, tinycss2
yamllint==1.37.0 # via ansible-lint (pyproject.toml)
zipp==3.21.0 # via importlib-metadata
# The following packages were excluded from the output:
# ansible-core
# exceptiongroup
# pip
# resolvelib
# ruamel-yaml-clib
# tomli
# typing-extensions
# uv
ansible-ansible-lint-c16f018/.config/dictionary.txt 0000664 0000000 0000000 00000007727 14773473560 0022326 0 ustar 00root root 0000000 0000000 Adrián
Autobuild
CLICOLOR
CODENOTIFY
CODEOWNERS
CTYPE
Cacqueray
Chamoulaud
DISTRO
DOTGLOB
ENVVAR
EPEL
EPIPE # linux
Fimport
Jython
MYTAG
PYTHONBREAKPOINT
PYTHONIOENCODING
PYTHONPYCACHEPREFIX
REQPASS
RULEDIRS
RUNLEVEL
Renderable
Representer
SIGUSR1
SRCROOT
Sbarnea
Sorin
Sshell
TOXENV
TYPECHECK
Taskfiles
Tsukinowa
Tóth
WSLENV
aarch64
abspath
addoption
addopts
alertmanager
ansiblelint
apidoc
apport
argparsing
argspecs
arxcruz
audgirka
auditd
autobuild
autoclass
autodetected
autodiscovery
autodoc
autofix
autohide
autorefs
autoupdate
awcrosby
backports
backticks
bdist
becomeuserabove
bindep
blockincludes
blockinfile
bools
boto
bracketsmatchtest
bracketsmatchtestfile
buildinfo
buildset
builtins
cacheable
cachier
capfd
caplog
capsys
cffi
chdir
chgrp
chkconfig
chunksize
clib
codeclimate
codecov
codenotify
codeql
codespell
colorama
colsystem
commandline
commitlint
commonmark
compat
conftest
coveragerc
cpus
cpuset
createfile
darglint
dataclasses
dbservers
deannotate
debconf
debops
decryptable
delenv
dellemc
denormalize
deps
devel
dharmabumstead
direnv
dirhtml
dists
distutils
doas
docstrings
doctest
doctrees
docutils
dotconfig
dotslash
drybjed
dunder
dzdo
ematcher
ematchtestfile
envrc
execnet
extlinks
facelessuser
facter
fakerole
fastapi
fileglob
filelock
filesspot
filetree
fips
firewalld
fontawesome
formatstr
formetting
fqcn
fqrn
fstring
fulltoc
fullwidth
gecos
geerlingguy
getent
getmatches
globbing
globmatch
gplv3
groupname
hostkey
hostnames
hostvars
htmldir
htmlproofer
htpasswd
hwchksum
hwcksum
idempotency
ignorelist
importlib
indentless
iniconfig
inlinehilite
insertafter
ipaddr
ipwrap
isclass
iscsi
isdir
isdisjoint
iskeyword
isort
isorted
jsonfile
jsonschema
junitxml
keepends
keypair
keyserver
konstruktoid
kubernetes
kubevirt
lalo
languageservice
letsencrypt
levelname
libbzip
libera
libyaml
licensedb
lineinfile
linenums
linkcheck
lintable
lintables
literalinclude
localectl
machinectl
magiclink
markdownlint
matchdir
matcherror
matchlines
matchtask
matchtasks
matchvar
matchyaml
maxdepth
maxsplit
minversion
mkdir
mkdocs
mkdocstrings
mkdtemp
mockings
mockreturn
modifyitems
modindex
moduleauthor
mypy
myrole
namedtempfile
nestedincludes
netcommon
netscaler
nilashishc
nitpicky
nocolor
nodeps
noexist
nomatches
nomatchestest
noqa
norole
nostderr
notest
nxos
octal
octals
opensearch
openshift
outdir
outlen
pacman
pageview
panos
parseable
pathex
pathlib
pathspec
pathspecs
pbrun
pfexec
pickleable
pipefail
piptools
pipx
pkgcache # linux
pkgs
placefolder
plainexamples
pluggy
pluginmanager
pmrun
podman
portchannel
posargs
preexec
prerun
prettierignore
programoutput
psutil
pwsh
pyargs
pycache
pycharm
pyenv
pygments
pylint
pylintrc
pymdown
pymdownx
pypa
pyparsing
pypi
pyproject
pyproject.toml
pypy
pyright
pytest
pyupgrade
pyyaml
redef
redirections
reexec
reformatter
regexes
releasenotes
relpath
reportversion
representer
reqs
resolvelib
returncode
rmtree
robertdebock
rolepath
roundtrip
ruamel
rulebook
rulebooks
ruledirs
rulesdir
rulesdirs
ruleset
runas
sarif
scalarint
scalarstring
scancode
schemafile
sdist
sdists
sectionauthor
seealso
sesu
setenv
setuptools
shortdesc
showlocals
shutil
signoff
simpletask
simplifiable
skippable
skiptasks
skiputils
slackpkg
slaveinput
sortfunc
sourcegraph
srcs
srpm
ssbarnea
stylesheet
subdir
subelements
subfolders
subresults
subschema
subschemas
substrs
subtest
sudosu
superfences
supervisorctl
swdepot
switchport
synchronize
sysvinit
taskfile
taskhandler
taskimports
taskincludes
taskshandlers
templatevars
templating
testcollection
testinfra
testmon
testns
testpath
testpaths
testproject
testpypi
testrun
timesyncd
tmpfs
toctree
toidentifier
tomli
tomlsort
toolset
tripleo
tuco
typehint
typehints
ulimits
uncook
ungrouped
unignored
unimported
unindented
uninstallation
unjinja
unlex
unloadable
unnormalized
unskippable
unspaced
unsubscriptable
untemplated
userbase
uwsgi
validable
vararg
varname
varnotset
varset
varsfile
varstring
varunset
venv
viewcode
virtnet
virtualenv
virtualenvs
wcmatch
webserver
webservers
willthames
workdir
workerinput
worktree
xdist
xfail
xunit
yatesr
zuul
ansible-ansible-lint-c16f018/.config/requirements-docs.in 0000664 0000000 0000000 00000000133 14773473560 0023401 0 ustar 00root root 0000000 0000000 mkdocs-ansible>=24.12.0 # do not use lock extra because it would break dependabot updates
ansible-ansible-lint-c16f018/.config/requirements-lock.txt 0000664 0000000 0000000 00000003353 14773473560 0023621 0 ustar 00root root 0000000 0000000 # This file was autogenerated by uv via the following command:
# tox run -e deps
ansible-compat==25.1.5 # via ansible-lint (pyproject.toml)
attrs==25.3.0 # via jsonschema, referencing
black==25.1.0 # via ansible-lint (pyproject.toml)
bracex==2.5.post1 # via wcmatch
cffi==1.17.1 # via cryptography
click==8.1.8 # via black
cryptography==44.0.2 # via ansible-core
filelock==3.18.0 # via ansible-lint (pyproject.toml)
importlib-metadata==8.6.1 # via ansible-lint (pyproject.toml)
jinja2==3.1.6 # via ansible-core
jsonschema==4.23.0 # via ansible-compat, ansible-lint (pyproject.toml)
jsonschema-specifications==2024.10.1 # via jsonschema
markupsafe==3.0.2 # via jinja2
mypy-extensions==1.0.0 # via black
packaging==24.2 # via ansible-compat, ansible-core, black, ansible-lint (pyproject.toml)
pathspec==0.12.1 # via black, yamllint, ansible-lint (pyproject.toml)
platformdirs==4.3.7 # via black
pycparser==2.22 # via cffi
pyyaml==6.0.2 # via ansible-compat, ansible-core, yamllint, ansible-lint (pyproject.toml)
referencing==0.36.2 # via jsonschema, jsonschema-specifications, ansible-lint (pyproject.toml)
rpds-py==0.24.0 # via jsonschema, referencing
ruamel-yaml==0.18.10 # via ansible-lint (pyproject.toml)
subprocess-tee==0.4.2 # via ansible-compat, ansible-lint (pyproject.toml)
wcmatch==10.0 # via ansible-lint (pyproject.toml)
yamllint==1.37.0 # via ansible-lint (pyproject.toml)
zipp==3.21.0 # via importlib-metadata
# The following packages were excluded from the output:
# ansible-core
# resolvelib
# ruamel-yaml-clib
# tomli
# typing-extensions
ansible-ansible-lint-c16f018/.config/requirements-test.in 0000664 0000000 0000000 00000001370 14773473560 0023434 0 ustar 00root root 0000000 0000000 black # IDE support
coverage-enable-subprocess # see https://github.com/nedbat/coveragepy/issues/1341#issuecomment-1228942657
coverage[toml] >= 6.4.4
ipdb
ipython
jmespath
license-expression >= 30.3.0 # Apache 2.0
mypy # IDE support
netaddr # needed by ipwrap filter
pip # tox command
psutil # soft-dep of pytest-xdist
pylint # IDE support
pytest >= 7.2.2
pytest-instafail >= 0.5.0 # only for local development, via PYTEST_ADDOPTS=-edit
pytest-mock
pytest-plus >= 0.6 # for PYTEST_REQPASS
pytest-sugar # shows failures immediately, even with xdist
pytest-xdist[psutil,setproctitle] >= 2.1.0
ruamel-yaml-clib # needed for mypy
ruamel.yaml>=0.17.31
tox >= 4.0.0
tox-extra>=2.1
tox-uv>=1.25
tox>=4.24.2
types-jsonschema # IDE support
types-pyyaml # IDE support
ansible-ansible-lint-c16f018/.config/requirements.in 0000664 0000000 0000000 00000001346 14773473560 0022462 0 ustar 00root root 0000000 0000000 # Special order section for helping pip:
ansible-core>=2.16.11 # GPLv3
ansible-compat>=25.1.5 # GPLv3
# alphabetically sorted:
black>=24.3.0 # MIT (security)
filelock>=3.8.2 # The Unlicense
importlib-metadata # Apache
jsonschema>=4.10.0 # MIT, version needed for improved errors
packaging>=22.0 # Apache-2.0,BSD-2-Clause
pathspec>=0.10.3 # Mozilla Public License 2.0 (MPL 2.0)
pyyaml>=6.0.2 # MIT (compilation probles with older versions)
ruamel.yaml>=0.18.5,!=0.18.7,!=0.18.8 # MIT
referencing>=0.36.2 # MIT, https://github.com/python-jsonschema/referencing/issues/216
subprocess-tee>=0.4.1 # MIT, used by ansible-compat
yamllint >= 1.34.0 # GPLv3
wcmatch>=8.1.2; python_version < '3.12' # MIT
wcmatch>=8.5.0; python_version >= '3.12' # MIT
ansible-ansible-lint-c16f018/.config/vulture_whitelist.py 0000664 0000000 0000000 00000003501 14773473560 0023556 0 ustar 00root root 0000000 0000000 # type: ignore
_.configured # unused attribute (src/ansiblelint/__main__.py:140)
configured # unused variable (src/ansiblelint/config.py:132)
_.keep_trailing_newline # unused attribute (src/ansiblelint/rules/jinja.py:280)
_.lstrip_blocks # unused attribute (src/ansiblelint/rules/jinja.py:282)
_.trim_blocks # unused attribute (src/ansiblelint/rules/jinja.py:283)
_.autoescape # unused attribute (src/ansiblelint/rules/jinja.py:284)
_.newline_sequence # unused attribute (src/ansiblelint/rules/jinja.py:285)
_.allow_duplicate_keys # unused attribute (src/ansiblelint/skip_utils.py:138)
_.playbook_paths # unused attribute (src/ansiblelint/utils.py:257)
_.explicit_end # unused attribute (src/ansiblelint/yaml_utils.py:915)
_.default_flow_style # unused attribute (src/ansiblelint/yaml_utils.py:923)
_.compact_seq_seq # unused attribute (src/ansiblelint/yaml_utils.py:924)
_.compact_seq_map # unused attribute (src/ansiblelint/yaml_utils.py:925)
_.Constructor # unused attribute (src/ansiblelint/yaml_utils.py:946)
_.preserve_quotes # unused attribute (src/ansiblelint/yaml_utils.py:956)
_.BLACK # unused variable (src/ansiblelint/output.py:172)
_.YELLOW # unused variable (src/ansiblelint/output.py:175)
_.CYAN # unused variable (src/ansiblelint/output.py:178)
_.WHITE # unused variable (src/ansiblelint/output.py:179)
_.GREY # unused variable (src/ansiblelint/output.py:180)
_.BRIGHT_RED # unused variable (src/ansiblelint/output.py:181)
_.BRIGHT_GREEN # unused variable (src/ansiblelint/output.py:182)
_.BRIGHT_YELLOW # unused variable (src/ansiblelint/output.py:183)
_.BRIGHT_BLUE # unused variable (src/ansiblelint/output.py:184)
_.BRIGHT_MAGENTA # unused variable (src/ansiblelint/output.py:185)
_.BRIGHT_CYAN # unused variable (src/ansiblelint/output.py:186)
_.BRIGHT_WHITE # unused variable (src/ansiblelint/output.py:187)
ansible-ansible-lint-c16f018/.darglint 0000664 0000000 0000000 00000000117 14773473560 0017664 0 ustar 00root root 0000000 0000000 [darglint]
docstring_style=sphinx
ignore=DAR101
enable=DAR104
strictness=long
ansible-ansible-lint-c16f018/.git_archival.txt 0000664 0000000 0000000 00000000222 14773473560 0021327 0 ustar 00root root 0000000 0000000 node: c16f018b1bdfdea6717f4b5b1b141a78b86021cd
node-date: 2025-04-03T11:56:32Z
describe-name: v25
ref-names: HEAD -> main, tag: v25.2.1, tag: v25
ansible-ansible-lint-c16f018/.gitattributes 0000664 0000000 0000000 00000000221 14773473560 0020746 0 ustar 00root root 0000000 0000000 # Force LF line endings for text files
* text=auto eol=lf
*.png binary
# Needed for setuptools-scm-git-archive
.git_archival.txt export-subst
ansible-ansible-lint-c16f018/.github/ 0000775 0000000 0000000 00000000000 14773473560 0017420 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/.github/CODEOWNERS 0000664 0000000 0000000 00000000032 14773473560 0021006 0 ustar 00root root 0000000 0000000 * @ansible/devtools
ansible-ansible-lint-c16f018/.github/CODE_OF_CONDUCT.md 0000664 0000000 0000000 00000000242 14773473560 0022215 0 ustar 00root root 0000000 0000000 # Community Code of Conduct
Please see the official
[Ansible Community Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
ansible-ansible-lint-c16f018/.github/ISSUE_TEMPLATE.md 0000664 0000000 0000000 00000001467 14773473560 0022135 0 ustar 00root root 0000000 0000000 # Issue Type
- Bug report
- Feature request
# Ansible and Ansible Lint details
```
ansible --version
ansible-lint --version
```
- ansible installation method: one of source, pip, OS package
- ansible-lint installation method: one of source, pip, OS package
# Desired Behavior
Please give some details of the feature being requested
or what should happen if providing a bug report
Possible security bugs should be reported via email to `security@ansible.com`
# Actual Behavior (Bug report only)
Please give some details of what is actually happening.
Include a [minimum complete verifiable example] with:
- playbook
- output of running ansible-lint
- if you're getting a stack trace, output of
`ansible-playbook --syntax-check playbook`
[minimum complete verifiable example]: http://stackoverflow.com/help/mcve
ansible-ansible-lint-c16f018/.github/ISSUE_TEMPLATE/ 0000775 0000000 0000000 00000000000 14773473560 0021603 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/.github/ISSUE_TEMPLATE/bug_report.md 0000664 0000000 0000000 00000003511 14773473560 0024275 0 ustar 00root root 0000000 0000000 ---
name: Bug report
about: >
Create a bug report. Ensure that it does reproduce on the main branch with
python >=3.10. For anything else, please use the discussion link below.
labels: bug, new
---
##### Summary
##### Issue Type
- Bug Report
##### OS / ENVIRONMENT
```console (paste below)
ansible-lint --version
```
- ansible installation method: one of source, pip, OS package
- ansible-lint installation method: one of source, pip, OS package
##### STEPS TO REPRODUCE
```console (paste below)
```
##### Desired Behavior
Possible security bugs should be reported via email to `security@ansible.com`
##### Actual Behavior
Please give some details of what is happening. Include a [minimum complete
verifiable example] with:
- minimized playbook to reproduce the error
- the output of running ansible-lint including the command line used
- if you're getting a stack trace, also the output of
`ansible-playbook --syntax-check playbook`
```paste below
```
[minimum complete verifiable example]: http://stackoverflow.com/help/mcve
ansible-ansible-lint-c16f018/.github/ISSUE_TEMPLATE/config.yml 0000664 0000000 0000000 00000002175 14773473560 0023600 0 ustar 00root root 0000000 0000000 ---
# Ref: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser
blank_issues_enabled: false # default is true
contact_links:
- name: Feature requests
url: https://github.com/ansible/ansible-lint/discussions/categories/ideas
about: Suggest an idea for this project
- name: Discussions
url: https://github.com/ansible/ansible-lint/discussions/
about: Any kind of questions should go on the forum.
- name: Security bug report
url: https://docs.ansible.com/ansible/latest/community/reporting_bugs_and_features.html
about: |
Please learn how to report security vulnerabilities here.
For all security related bugs, email security@ansible.com
instead of using this issue tracker and you will receive
a prompt response.
For more information, see https://docs.ansible.com/ansible/latest/community/reporting_bugs_and_features.html
- name: Ansible Code of Conduct
url: https://docs.ansible.com/ansible/latest/community/code_of_conduct.html
about: Be nice to other members of the community. Behave.
ansible-ansible-lint-c16f018/.github/SECURITY.md 0000664 0000000 0000000 00000001152 14773473560 0021210 0 ustar 00root root 0000000 0000000 # Security Policy
## Supported Versions
Ansible applies security fixes according to the 3-versions-back support
policy. Please find more information in [our docs].
## Reporting a Vulnerability
We encourage responsible disclosure practices for security
vulnerabilities. Please read our [policies for reporting bugs](https://docs.ansible.com/ansible/devel/community/reporting_bugs_and_features.html#reporting-a-bug)
if you want to report a security issue that might affect Ansible.
[our docs]: https://docs.ansible.com/ansible-core/devel/reference_appendices/release_and_maintenance.html#ansible-core-release-cycle
ansible-ansible-lint-c16f018/.github/dependabot.yml 0000664 0000000 0000000 00000000775 14773473560 0022261 0 ustar 00root root 0000000 0000000 ---
version: 2
updates:
- package-ecosystem: pip
directory: /.config/
schedule:
day: sunday
interval: weekly
labels:
- dependabot-deps-updates
- skip-changelog
groups:
dependencies:
patterns:
- "*"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
labels:
- "dependencies"
- "skip-changelog"
ignore:
- dependency-name: "codecov/codecov-action"
versions: ["4.6.0"]
ansible-ansible-lint-c16f018/.github/lower-constraints.txt 0000664 0000000 0000000 00000001420 14773473560 0023653 0 ustar 00root root 0000000 0000000 # This file is kept in a different directory than .config in order to not be
# automatically updated by dependabot. This should be kept in sync with
# minimal requirements configured inside .config/requirements.in
ansible-core==2.16.11
ansible-compat==25.1.5 # GPLv3
black==24.3.0 # MIT (security)
filelock==3.16.1 # The Unlicense # due to tox-uv
jsonschema==4.10.0 # MIT, version needed for improved errors
packaging==24.2 # Due to tox-uv
pathspec==0.10.3
pyyaml==6.0.2
ruamel.yaml==0.18.5 # MIT
subprocess-tee==0.4.1 # MIT, used by ansible-compat
# https://packages.ubuntu.com/noble/python3-wcmatch
# https://packages.fedoraproject.org/pkgs/python-wcmatch/python3-wcmatch/
wcmatch==8.1.2; python_version < '3.12' # EPEL 8
wcmatch==8.5.0; python_version >= '3.12'
yamllint == 1.34.0
ansible-ansible-lint-c16f018/.github/release-drafter.yml 0000664 0000000 0000000 00000000123 14773473560 0023204 0 ustar 00root root 0000000 0000000 ---
# see https://github.com/ansible/team-devtools
_extends: ansible/team-devtools
ansible-ansible-lint-c16f018/.github/workflows/ 0000775 0000000 0000000 00000000000 14773473560 0021455 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/.github/workflows/ack.yml 0000664 0000000 0000000 00000000420 14773473560 0022732 0 ustar 00root root 0000000 0000000 ---
# See https://github.com/ansible/devtools/blob/main/.github/workflows/ack.yml
name: ack
"on":
pull_request_target:
types: [opened, labeled, unlabeled, synchronize]
jobs:
ack:
uses: ansible/team-devtools/.github/workflows/ack.yml@main
secrets: inherit
ansible-ansible-lint-c16f018/.github/workflows/push.yml 0000664 0000000 0000000 00000000377 14773473560 0023166 0 ustar 00root root 0000000 0000000 ---
# See https://github.com/ansible/devtools/blob/main/.github/workflows/push.yml
name: push
"on":
push:
branches:
- main
- "releases/**"
- "stable/**"
jobs:
ack:
uses: ansible/team-devtools/.github/workflows/push.yml@main
ansible-ansible-lint-c16f018/.github/workflows/redirects.yml 0000664 0000000 0000000 00000001352 14773473560 0024165 0 ustar 00root root 0000000 0000000 ---
# Sync RTD redirects
name: redirects
"on":
push:
branches:
- main
paths:
- docs/redirects.yml
- .github/workflows/redirects.yml
# Manually triggered using GitHub's UI
workflow_dispatch:
jobs:
docs:
environment: release
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- name: Upgrade Python toolchain
run: python3 -m pip install --upgrade pip setuptools wheel
- name: Install readthedocs-cli
run: python3 -m pip install readthedocs-cli
- name: Sync redirects
run: rtd projects ansible-lint redirects sync -f docs/redirects.yml --wet-run
env:
RTD_TOKEN: ${{ secrets.RTD_TOKEN }}
ansible-ansible-lint-c16f018/.github/workflows/release.yml 0000664 0000000 0000000 00000003032 14773473560 0023616 0 ustar 00root root 0000000 0000000 ---
name: release
"on":
release:
types: [published]
workflow_dispatch:
jobs:
# https://github.com/marketplace/actions/actions-tagger
actions-tagger:
needs: pypi # do not move the mobile tag until we publish
runs-on: windows-latest
permissions:
# Give the default GITHUB_TOKEN write permission.
# https://github.blog/changelog/2023-02-02-github-actions-updating-the-default-github_token-permissions-to-read-only/
contents: write
steps:
- uses: Actions-R-Us/actions-tagger@latest
with:
token: "${{ github.token }}"
# Do not activate latest tag because it seems to affect RTD builds
# publish_latest_tag: true
pypi:
name: Publish to PyPI registry
environment: release
runs-on: ubuntu-24.04
permissions:
id-token: write
env:
FORCE_COLOR: 1
PY_COLORS: 1
TOXENV: pkg
steps:
- name: Switch to using Python 3.10 by default
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install tox
run: python3 -m pip install --user "tox>=4.0.0"
- name: Check out src from Git
uses: actions/checkout@v4
with:
fetch-depth: 0 # needed by setuptools-scm
submodules: true
- name: Build dists
run: python3 -m tox
- name: Publish to pypi.org
if: >- # "create" workflows run separately from "push" & "pull_request"
github.event_name == 'release'
uses: pypa/gh-action-pypi-publish@release/v1
ansible-ansible-lint-c16f018/.github/workflows/tox.yml 0000664 0000000 0000000 00000020707 14773473560 0023020 0 ustar 00root root 0000000 0000000 ---
name: tox
on:
push:
branches:
- "main"
pull_request:
branches:
- "main"
schedule:
- cron: "0 0 * * *"
workflow_call:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
env:
FORCE_COLOR: 1 # tox, pytest, ansible-lint
PY_COLORS: 1
jobs:
prepare:
name: prepare
runs-on: ubuntu-24.04
outputs:
matrix: ${{ steps.generate_matrix.outputs.matrix }}
steps:
- name: Determine matrix
id: generate_matrix
uses: coactions/dynamic-matrix@v4
with:
min_python: "3.10"
max_python: "3.13"
default_python: "3.10"
other_names: |
lint
pkg
hook
docs
schemas
eco
pre
py311-devel
py310-lower
py312-lower
py313-devel
platforms: linux,macos
test-action:
runs-on: ubuntu-24.04
env:
# This disables the github annotations in the output of ansible-lint action
# which might confuse users.
GITHUB_ACTIONS_TEST: "true"
steps:
- uses: actions/checkout@v4
- name: Self test 1
uses: ./
with:
# basically we only lint linter own configuration, which should be passing.
args: .ansible-lint
- name: Self test 2
uses: ./
with:
# basically we only lint linter own configuration, which should be passing.
args: .ansible-lint
working_directory: .
- name: Self test 3
uses: ./
with:
# basically we only lint linter own configuration, which should be passing.
args: .ansible-lint
working_directory: docs
expected_return_code: "2" # expected to fail because the given argument does not exist in this folder
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os || 'ubuntu-24.04' }}
needs:
- prepare
defaults:
run:
shell: ${{ matrix.shell || 'bash'}}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}
# max-parallel: 5
# The matrix testing goal is to cover the *most likely* environments
# which are expected to be used by users in production. Avoid adding a
# combination unless there are good reasons to test it, like having
# proof that we failed to catch a bug by not running it. Using
# distribution should be preferred instead of custom builds.
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # needed by setuptools-scm
submodules: true
- name: Set pre-commit cache
uses: actions/cache@v4
if: ${{ matrix.name == 'lint' }}
with:
path: |
~/.cache/pre-commit
key: pre-commit-${{ matrix.name }}-${{ hashFiles('.pre-commit-config.yaml') }}
- name: Set ansible cache(s)
uses: actions/cache@v4
with:
path: |
.cache/eco
examples/playbooks/collections/ansible_collections
~/.cache/ansible-compat
~/.ansible/collections
~/.ansible/roles
.tox
key: ${{ matrix.name }}-${{ matrix.os }}--${{ hashFiles('tools/test-eco.sh', 'requirements.yml', 'examples/playbooks/collections/requirements.yml') }}
- name: Set up Python ${{ matrix.python_version || '3.10' }}
if: "!contains(matrix.shell, 'wsl')"
uses: actions/setup-python@v5
with:
cache: pip
python-version: ${{ matrix.python_version || '3.10' }}
- uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
cache-dependency-path: test/schemas/package-lock.json
- name: Run ./tools/test-setup.sh
run: ./tools/test-setup.sh
- name: Install tox
run: |
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade "tox>=4.0.0" "tox-uv>=1.25.0" "uv>=0.6.6"
- name: Log installed dists
run: python3 -m pip freeze --all
- run: ${{ matrix.command }}
- run: ${{ matrix.command2 }}
if: ${{ matrix.command2 }}
- run: ${{ matrix.command3 }}
if: ${{ matrix.command3 }}
- run: ${{ matrix.command4 }}
if: ${{ matrix.command4 }}
- run: ${{ matrix.command5 }}
if: ${{ matrix.command5 }}
- name: Archive logs
uses: actions/upload-artifact@v4
with:
name: logs-${{ matrix.name }}.zip
include-hidden-files: true
path: |
.tox/**/log/
.tox/**/.coverage*
.tox/**/coverage.xml
- name: Report failure if git reports dirty status
run: |
git checkout HEAD -- src/ansiblelint/schemas/__store__.json
if [[ -n $(git status -s) ]]; then
# shellcheck disable=SC2016
echo -n '::error file=git-status::'
printf '### Failed as git reported modified and/or untracked files\n```\n%s\n```\n' "$(git status -s)" | tee -a "$GITHUB_STEP_SUMMARY"
exit 99
fi
# https://github.com/actions/toolkit/issues/193
codeql:
name: codeql
runs-on: ubuntu-24.04
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: ["python"]
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
check:
if: always()
permissions:
id-token: write
checks: read
needs:
- build
- test-action
runs-on: ubuntu-24.04
steps:
# checkout needed for codecov action which needs codecov.yml file
- uses: actions/checkout@v4
- name: Set up Python # likely needed for coverage
uses: actions/setup-python@v5
with:
python-version: "3.13"
- run: pip3 install 'coverage>=7.5.1'
- name: Merge logs into a single archive
uses: actions/upload-artifact/merge@v4
with:
name: logs.zip
include-hidden-files: true
pattern: logs-*.zip
# artifacts like py312.zip and py312-macos do have overlapping files
separate-directories: true
- name: Download artifacts
uses: actions/download-artifact@v4
continue-on-error: true # to allow rerunning this job
with:
name: logs.zip
path: .
- name: Check for expected number of coverage.xml reports
run: |
JOBS_PRODUCING_COVERAGE=10
if [ "$(find . -name coverage.xml | wc -l | bc)" -ne "${JOBS_PRODUCING_COVERAGE}" ]; then
echo "::error::Number of coverage.xml files was not the expected one (${JOBS_PRODUCING_COVERAGE}): $(find . -name coverage.xml |xargs echo)"
exit 1
fi
- name: Upload coverage data
uses: codecov/codecov-action@v5.4.0
with:
name: ${{ matrix.name }}
# verbose: true # optional (default = false)
fail_ci_if_error: true
use_oidc: ${{ !(github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork) }} # cspell:ignore oidc
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}
- name: Delete Merged Artifacts
uses: actions/upload-artifact/merge@v4
with:
include-hidden-files: true
delete-merged: true
pattern: logs-*.zip
ansible-ansible-lint-c16f018/.gitignore 0000664 0000000 0000000 00000002321 14773473560 0020046 0 ustar 00root root 0000000 0000000 # Byte-compiled / optimized / DLL files
__pycache__
*.py[co]
*$py.class
# Temporary ruff file
*.isorted
# Packages
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib64/
parts/
pip-wheel-metadata
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# Installer logs
pip-log.txt
# Unit test / coverage reports
.tox
# Needed for CLI tests
.sandbox
# pyenv
.python-version
# Environments
.env
.venv
env/
venv/
# Coverage artifacts
.coverage*
coverage*.xml
pip-wheel-metadata
.test-results/
# mypy
.mypy_cache
# Generated by setuptools-scm
src/ansiblelint/_version.py
# Unformatted fixtures, need to be added with force as we need to exclude
# them from being reformatted (.prettierignore is a symlink to .gitignore)
test/fixtures/formatting-before/
# prettier should not edit this due to forcibly extra-long lines
examples/playbooks/vars/strings.transformed.yml
# prettier should not edit this due to intentionally spaced nesting
examples/playbooks/vars/transform_nested_data.yml
# other
*.tar.gz
*.tmp.*
.DS_Store
.cache
.envrc
.idea
.pytest_cache
.vscode/launch.json
_readthedocs
coverage.lcov
site
src/ansiblelint/_version.py
test/eco
test/local-content
test/schemas/node_modules
node_modules
.direnv
uv.lock
.ansible
ansible-ansible-lint-c16f018/.gitmodules 0000664 0000000 0000000 00000000000 14773473560 0020223 0 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/.packit.yaml 0000664 0000000 0000000 00000002441 14773473560 0020276 0 ustar 00root root 0000000 0000000 ---
# spell-checker:ignore packit specfile copr epel
specfile_path: dist/ansible-lint.spec
actions:
create-archive:
# packit.dev service does have these module pre-installed:
- python3 -m build --sdist --outdir dist
- sh -c "ls dist/ansible_lint-*.tar.gz"
get-current-version:
- ./tools/get-version.sh
post-upstream-clone:
- "git submodule init"
- "git submodule update"
- ./tools/update-version.sh
srpm_build_deps:
- python3-build
- python3-setuptools_scm
jobs:
# - job: copr_build
# targets:
# - fedora-rawhide-aarch64 # one on PR should be enough
# trigger: pull_request
- job: copr_build
trigger: commit
branch: main
targets:
# See https://packit.dev/docs/configuration/#aliases
# API to get available targets: https://api.dev.testing-farm.io/v0.1/composes/public
- fedora-rawhide-x86_64
- fedora-rawhide-aarch64
- fedora-37-x86_64
- fedora-37-aarch64
# Missing python3-build see https://bugzilla.redhat.com/show_bug.cgi?id=2129071
# - centos-stream-9-aarch64
# - centos-stream-9-x86_64
# - job: tests
# trigger: pull_request
# metadata:
# targets:
# - fedora-all
# - job: propose_downstream
# trigger: release
# metadata:
# dist-git-branch: master
ansible-ansible-lint-c16f018/.pre-commit-config.yaml 0000664 0000000 0000000 00000016773 14773473560 0022357 0 ustar 00root root 0000000 0000000 ---
ci:
# format compatible with commitlint
autoupdate_commit_msg: "chore: pre-commit autoupdate"
autoupdate_schedule: monthly
autofix_commit_msg: "chore: auto fixes from pre-commit.com hooks"
skip:
# https://github.com/pre-commit-ci/issues/issues/55
- pip-compile
- pyright
- schemas
submodules: true
exclude: >
(?x)^(
.config/constraints.txt|
.config/.*requirements.*|
examples/broken/encoding.yml|
examples/broken/encoding.j2|
examples/broken/yaml-with-tabs/invalid-due-tabs.yaml|
examples/playbooks/collections/.*|
examples/playbooks/vars/empty.transformed.yml|
examples/playbooks/vars/empty.yml|
src/ansiblelint/schemas/rulebook.json|
test/schemas/data/licenses.json|
test/schemas/negative_test|
test/schemas/package-lock.json
)$
repos:
- repo: meta
hooks:
- id: check-useless-excludes
- repo: https://github.com/rbubley/mirrors-prettier
# keep it before yamllint
rev: v3.5.3
hooks:
- id: prettier
# Temporary excludes so we can gradually normalize the formatting
exclude: >
(?x)^(
.*\.md$|
examples/other/some.j2.yaml|
examples/playbooks/collections/.*|
examples/playbooks/example.yml|
examples/playbooks/invalid-transform.yml|
examples/playbooks/multiline-brackets.*|
examples/playbooks/templates/not-valid.yaml|
examples/playbooks/vars/empty.transformed.yml|
examples/playbooks/vars/empty.yml|
examples/playbooks/with-skip-tag-id.yml|
examples/playbooks/with-umlaut-.*|
examples/yamllint/.*|
src/ansiblelint/schemas/(molecule|tasks|playbook|rulebook).json|
test/fixtures/formatting-before/.*|
test/schemas/(negative_test|test)/.*\.md|
test/schemas/data/.*|
src/ansiblelint/schemas/ansible-navigator-config.json
)$
always_run: true
additional_dependencies:
- prettier@3.2.4
- prettier-plugin-sort-json@3.1.0
- repo: https://github.com/streetsidesoftware/cspell-cli
rev: v8.17.3
hooks:
- id: cspell
# entry: codespell --relative
args: [--relative, --no-progress, --no-summary]
name: Spell check with cspell
- repo: https://github.com/python-jsonschema/check-jsonschema
rev: 0.31.3
hooks:
- id: check-github-workflows
- repo: https://github.com/pre-commit/pre-commit-hooks.git
rev: v5.0.0
hooks:
- id: check-added-large-files
- id: check-merge-conflict
- id: check-symlinks
- id: debug-statements
- id: detect-private-key
- id: end-of-file-fixer
# ignore formatting-prettier to have an accurate prettier comparison
exclude: >
(?x)^(
test/eco/.*.result|
examples/yamllint/.*|
test/fixtures/formatting-before/.*|
test/fixtures/formatting-prettier/.*
)$
- id: trailing-whitespace
exclude: >
(?x)^(
examples/playbooks/(with-skip-tag-id|unicode).yml|
examples/playbooks/example.yml|
examples/yamllint/.*|
test/eco/.*.result|
test/fixtures/formatting-before/.*
)$
- id: mixed-line-ending
- id: fix-byte-order-marker
- id: check-executables-have-shebangs
- id: check-merge-conflict
- id: debug-statements
language_version: python3
- repo: https://github.com/codespell-project/codespell
rev: v2.4.1
hooks:
- id: codespell
exclude: >
(?x)^(
.config/dictionary.txt|
examples/broken/encoding.j2|
test/schemas/negative_test/.*|
test/schemas/test/.*|
src/ansiblelint/schemas/.*\.json
)$
additional_dependencies:
- tomli
- repo: https://github.com/adrienverge/yamllint.git
rev: v1.36.2
hooks:
- id: yamllint
exclude: >
(?x)^(
examples/playbooks/templates/.*|
examples/yamllint/.*|
examples/other/some.j2.yaml|
examples/playbooks/collections/.*|
test/fixtures/formatting-before/.*
)$
files: \.(yaml|yml)$
types: [file, yaml]
entry: yamllint --strict
- repo: https://github.com/pappasam/toml-sort
rev: v0.24.2
hooks:
- id: toml-sort-fix
alias: toml
- repo: https://github.com/tox-dev/tox-ini-fmt
rev: 1.5.0
hooks:
- id: tox-ini-fmt
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.11.0
hooks:
- id: ruff
args:
- --fix
- --exit-non-zero-on-fix
types_or: [python, pyi]
# - id: ruff-format # must be after ruff
# types_or: [python, pyi]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.15.0
hooks:
- id: mypy
# "." and pass_files are used to make pre-commit mypy behave the same as standalone mypy
args: ["."]
pass_filenames: false
additional_dependencies: &deps
- ansible-compat>=25.1.5
- black>=22.10.0
- cryptography>=39.0.1
- filelock>=3.12.2
- importlib_metadata
- jinja2
- license-expression >= 30.3.0
- pip>=22.3.1
- pytest-mock
- pytest>=7.2.2
- pyyaml>=6.0.2 # types-PyYAML is not enough
- ruamel-yaml-clib>=0.2.8
- ruamel-yaml>=0.18.6
- subprocess-tee
- types-jsonschema>=4.20.0.0
- types-setuptools
- wcmatch
- yamllint>=1.34.0
- repo: https://github.com/RobertCraigie/pyright-python
rev: v1.1.398
hooks:
- id: pyright
additional_dependencies: *deps
- repo: https://github.com/pycqa/pylint
rev: v3.3.6
hooks:
- id: pylint
args:
- --output-format=colorized
additional_dependencies: *deps
- repo: https://github.com/jendrikseipp/vulture
rev: v2.14
hooks:
- id: vulture
- # keep at bottom as these are slower
repo: local
hooks:
- id: schemas
name: update json schemas
entry: python3 src/ansiblelint/schemas/__main__.py
language: python
pass_filenames: false
always_run: true
# stages: [manual]
- id: deps
name: Upgrade constraints files and requirements
files: ^(pyproject\.toml|.config/.*)$
always_run: true
language: python
entry: python3 -m uv pip compile -q --all-extras --python-version=3.10 --output-file=.config/constraints.txt pyproject.toml --upgrade
pass_filenames: false
stages:
- manual
additional_dependencies:
- uv>=0.6.6
- id: pip-compile
name: Check constraints files and requirements
files: ^(pyproject\.toml|\.config/.*)$
language: python
entry: uv pip compile -q --all-extras --python-version=3.10 --output-file=.config/constraints.txt pyproject.toml
pass_filenames: false
additional_dependencies:
- uv>=0.6.6
- id: lock
name: Update requirements-lock.txt
alias: lock
always_run: true
entry: python3 -m uv pip compile -q --python-version=3.10 --upgrade --output-file=.config/requirements-lock.txt pyproject.toml --strip-extras
files: ^(pyproject\.toml|\.config/.*)$
language: python
pass_filenames: false
stages: [manual]
additional_dependencies:
- uv>=0.6.6
ansible-ansible-lint-c16f018/.pre-commit-hooks.yaml 0000664 0000000 0000000 00000001211 14773473560 0022212 0 ustar 00root root 0000000 0000000 ---
# For use with pre-commit.
# See usage instructions at http://pre-commit.com
- id: ansible-lint
name: Ansible-lint
description: This hook runs ansible-lint.
entry: python3 -m ansiblelint -v --force-color
language: python
# do not pass files to ansible-lint, see:
# https://github.com/ansible/ansible-lint/issues/611
pass_filenames: false
always_run: true
additional_dependencies:
# https://github.com/pre-commit/pre-commit/issues/1526
# If you want to use specific version of ansible-core or ansible, feel
# free to override `additional_dependencies` in your own hook config
# file.
- ansible-core>=2.16.0
ansible-ansible-lint-c16f018/.prettierignore 0000777 0000000 0000000 00000000000 14773473560 0023106 2.gitignore ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/.prettierrc.yaml 0000664 0000000 0000000 00000000543 14773473560 0021207 0 ustar 00root root 0000000 0000000 ---
proseWrap: always
jsonRecursiveSort: true # prettier-plugin-sort-json
tabWidth: 2
useTabs: false
overrides:
- files:
- "*.md"
options:
# compatibility with markdownlint
proseWrap: always
printWidth: 80
- files:
- "*.yaml"
- "*.yml"
options:
# compatibility with yamllint
proseWrap: preserve
ansible-ansible-lint-c16f018/.readthedocs.yml 0000664 0000000 0000000 00000000564 14773473560 0021153 0 ustar 00root root 0000000 0000000 ---
version: 2
mkdocs:
fail_on_warning: true
configuration: mkdocs.yml
build:
os: ubuntu-24.04
tools:
python: "3.11"
commands:
- pip install --user tox
- python3 -m tox -e docs
python:
install:
- method: pip
path: tox
- method: pip
path: .
extra_requirements:
- docs
submodules:
include: all
recursive: true
ansible-ansible-lint-c16f018/.sonarcloud.properties 0000664 0000000 0000000 00000000121 14773473560 0022417 0 ustar 00root root 0000000 0000000 sonar.python.version=3.10, 3.11, 3.12, 3.13
sonar.sources=src/
sonar.tests=test/
ansible-ansible-lint-c16f018/.sonarlint/ 0000775 0000000 0000000 00000000000 14773473560 0020147 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/.sonarlint/connectedMode.json 0000664 0000000 0000000 00000000122 14773473560 0023604 0 ustar 00root root 0000000 0000000 {
"sonarCloudOrganization": "ansible",
"projectKey": "ansible_ansible-lint"
}
ansible-ansible-lint-c16f018/.taplo.toml 0000664 0000000 0000000 00000000466 14773473560 0020160 0 ustar 00root root 0000000 0000000 [formatting]
# cspell: disable-next-line
# compatibility between toml-sort-fix pre-commit hook and panekj.even-betterer-toml extension
align_comments = false
array_trailing_comma = false
compact_arrays = true
compact_entries = false
compact_inline_tables = true
inline_table_expand = false
reorder_keys = true
ansible-ansible-lint-c16f018/.vault_pass 0000664 0000000 0000000 00000000012 14773473560 0020233 0 ustar 00root root 0000000 0000000 secret123
ansible-ansible-lint-c16f018/.vscode/ 0000775 0000000 0000000 00000000000 14773473560 0017421 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/.vscode/extensions.json 0000664 0000000 0000000 00000000756 14773473560 0022523 0 ustar 00root root 0000000 0000000 {
"recommendations": [
"Tyriar.sort-lines",
"charliermarsh.ruff",
"esbenp.prettier-vscode",
"hbenl.vscode-test-explorer",
"ms-python.mypy-type-checker",
"ms-python.pylint",
"ms-python.python",
"ms-python.vscode-pylance",
"ms-vscode.live-server",
"redhat.ansible",
"redhat.vscode-yaml",
"ryanluker.vscode-coverage-gutters",
"shardulm94.trailing-spaces",
"tamasfe.even-better-toml",
"timonwong.shellcheck",
"znck.grammarly"
]
}
ansible-ansible-lint-c16f018/.vscode/settings.json 0000664 0000000 0000000 00000002511 14773473560 0022153 0 ustar 00root root 0000000 0000000 {
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[python]": {
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit"
},
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true
},
"[toml]": {
"editor.defaultFormatter": "panekj.even-betterer-toml"
},
"editor.formatOnSave": true,
"evenBetterToml.formatter.alignComments": false,
"evenBetterToml.formatter.arrayTrailingComma": true,
"files.exclude": {
"*.egg-info": true,
".pytest_cache": true,
".tox": true,
"__pycache__": true,
"build": true
},
"git.ignoreLimitWarning": true,
"grammarly.config.documentDomain": "academic",
"grammarly.files.include": ["**/*.txt", "**/*.md"],
"mypy-type-checker.severity": {
"error": "Warning"
},
"python.experiments.optInto": ["pythonTestAdapter"],
"python.terminal.activateEnvironment": true,
"python.testing.pytestEnabled": true,
"python.testing.unittestEnabled": false,
"sonarlint.connectedMode.project": {
"connectionId": "ansible",
"projectKey": "ansible_ansible-lint"
},
"sortLines.filterBlankLines": true,
"yaml.completion": true,
"yaml.customTags": ["!encrypted/pkcs1-oaep scalar", "!vault scalar"],
"yaml.format.enable": false,
"yaml.validate": true
}
ansible-ansible-lint-c16f018/.yamllint 0000664 0000000 0000000 00000001366 14773473560 0017720 0 ustar 00root root 0000000 0000000 ---
rules:
braces:
min-spaces-inside: 0
max-spaces-inside: 1
comments:
# prettier compatibility
min-spaces-from-content: 1
comments-indentation: false
document-start:
present: true
key-duplicates:
forbid-duplicated-merge-keys: true
indentation:
level: error
indent-sequences: consistent
octal-values:
forbid-implicit-octal: true
forbid-explicit-octal: true
# quoted-strings:
# quote-type: double
# required: only-when-needed
ignore: |
.tox
examples/playbooks/example.yml
examples/playbooks/syntax-error-string.yml
examples/playbooks/vars/not_decryptable.yml
test/schemas/negative_test/**/*.yml
test/schemas/test/**/*.yml
# ignore added because this file includes on-purpose errors
ansible-ansible-lint-c16f018/COPYING 0000664 0000000 0000000 00000104515 14773473560 0017121 0 ustar 00root root 0000000 0000000 GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
Copyright (C)
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
.
ansible-ansible-lint-c16f018/DCO_1_1.md 0000664 0000000 0000000 00000003122 14773473560 0017445 0 ustar 00root root 0000000 0000000 # DCO
All contributors must use `git commit --signoff` for any
commit to be merged, and agree that usage of --signoff constitutes
agreement with the terms of DCO 1.1, which appears below:
```
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
```
ansible-ansible-lint-c16f018/README.md 0000664 0000000 0000000 00000006622 14773473560 0017345 0 ustar 00root root 0000000 0000000 [](https://pypi.org/project/ansible-lint)
[](https://ansible.readthedocs.io/projects/lint/rules/)
[](https://forum.ansible.com/tag/ansible-lint)
[](https://github.com/pre-commit/pre-commit)
# Ansible-lint
`ansible-lint` checks playbooks for practices and behavior that could
potentially be improved. As a community-backed project ansible-lint supports
only the last two major versions of Ansible.
[Visit the Ansible Lint docs site](https://ansible.readthedocs.io/projects/lint/)
# Using ansible-lint as a GitHub Action
This action allows you to run `ansible-lint` on your codebase without having to
install it yourself.
```yaml
# .github/workflows/ansible-lint.yml
name: ansible-lint
on:
pull_request:
branches: ["main", "stable", "release/v*"]
jobs:
build:
name: Ansible Lint # Naming the build is important to use it as a status check
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Run ansible-lint
uses: ansible/ansible-lint@main
# optional (see below):
with:
args: ""
setup_python: "true"
working_directory: ""
requirements_file: ""
```
All the arguments are optional and most users should not need them:
- `args`: Arguments to be passed to ansible-lint command.
- `setup_python`: If python should be installed. Default is `true`.
- `working_directory`: The directory where to run ansible-lint from. Default is
`github.workspace`. That might be needed if you want to lint only a subset of
your repository.
- `requirements_file`: Path to the requirements.yml file to install role and
collection dependencies.
For more details, see [ansible-lint-action].
# Communication
Refer to the
[Talk to us](https://ansible.readthedocs.io/projects/lint/contributing/#talk-to-us)
section of the Contributing guide to find out how to get in touch with us.
You can also find more information in the
[Ansible communication guide](https://docs.ansible.com/ansible/devel/community/communication.html).
# Contributing
Please read [Contribution guidelines] if you wish to contribute.
# Code of Conduct
Please see the
[Ansible Community Code of Conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
# Licensing
The ansible-lint project is distributed as [GPLv3] due to use of [GPLv3] runtime
dependencies, like `ansible` and `yamllint`.
For historical reasons, its own code-base remains licensed under a more liberal
[MIT] license and any contributions made are accepted as being made under
original [MIT] license.
# Authors
ansible-lint was created by [Will Thames] and is now maintained as part of the [Ansible]
by [Red Hat] project.
[ansible]: https://ansible.com
[contribution guidelines]:
https://ansible.readthedocs.io/projects/lint/contributing
[gplv3]: https://github.com/ansible/ansible-lint/blob/main/COPYING
[mit]:
https://github.com/ansible/ansible-lint/blob/main/docs/licenses/LICENSE.mit.txt
[red hat]: https://redhat.com
[will thames]: https://github.com/willthames
[ansible-lint-action]:
https://ansible.readthedocs.io/projects/lint/installing/#installing-from-source-code
ansible-ansible-lint-c16f018/action.yml 0000664 0000000 0000000 00000010255 14773473560 0020063 0 ustar 00root root 0000000 0000000 ---
name: run-ansible-lint
description: Run Ansible Lint
author: Ansible by Red Hat
branding:
icon: shield
color: red
inputs:
args:
description: Arguments to be passed to ansible-lint command.
required: false
default: ""
setup_python:
description: If false, this action will not setup python and will instead rely on the already installed python.
required: false
default: true
working_directory:
description: The directory where to run ansible-lint from. Default is `github.workspace`.
required: false
default: ""
requirements_file:
description: Path to the requirements YAML file to install role and collection dependencies.
required: false
default: ""
expected_return_code:
description: Expected return code from ansible-lint. Default is 0. Used for self-testing purposes.
required: false
default: "0"
gh_action_ref:
description: The branch, tag, or commit to use for ansible-lint.
default: ""
required: false
runs:
using: composite
steps:
- name: Process inputs
id: inputs
shell: bash
run: |
if [[ -n "${{ inputs.working_directory }}" ]]; then
echo "working_directory=${{ inputs.working_directory }}" >> $GITHUB_OUTPUT
else
echo "working_directory=${{ github.workspace }}" >> $GITHUB_OUTPUT
fi
# If this action is imported as part of another composite action, the value of github.action_ref is the branch/commit/tag of the source action, not this one.
# This allows a user to override it using the input variable
- name: Determine github action ref
shell: bash
run: |
action_ref="${{ inputs.gh_action_ref }}"
if [[ -z "${{ inputs.gh_action_ref }}" ]]; then
action_ref="${{ github.action_ref || 'main' }}"
fi
echo "ACTION_REF=${action_ref}" >> "$GITHUB_ENV"
# Due to GHA limitation, caching works only for files within GITHUB_WORKSPACE
# folder, so we are forced to stick this temporary file inside .git, so it
# will not affect the linted repository.
# https://github.com/actions/toolkit/issues/1035
# https://github.com/actions/setup-python/issues/361
- name: Generate .git/ansible-lint-requirements.txt
id: get_reqs
shell: bash
env:
GH_ACTION_REF: ${{ env.ACTION_REF }}
working-directory: ${{ steps.inputs.outputs.working_directory }}
run: |
reqs_file=$(git rev-parse --show-toplevel)/.git/ansible-lint-requirements.txt
echo "reqs_file=$reqs_file" >> $GITHUB_OUTPUT
wget --output-document=$reqs_file https://raw.githubusercontent.com/ansible/ansible-lint/$GH_ACTION_REF/.config/requirements-lock.txt
- name: Set up Python
if: inputs.setup_python == 'true'
uses: actions/setup-python@v5
with:
cache: pip
cache-dependency-path: ${{ steps.get_reqs.outputs.reqs_file }}
python-version: "3.11"
- name: Install ansible-lint
shell: bash
env:
GH_ACTION_REF: ${{ env.ACTION_REF }}
# We need to set the version manually because $GITHUB_ACTION_PATH is not
# a git clone and setuptools-scm would not be able to determine the version.
# git+https://github.com/ansible/ansible-lint@${{ github.action_ref || 'main' }}
# SETUPTOOLS_SCM_PRETEND_VERSION=${{ github.action_ref || 'main' }}
run: |
cd $GITHUB_ACTION_PATH
pip install "ansible-lint[lock] @ git+https://github.com/ansible/ansible-lint@$GH_ACTION_REF"
ansible-lint --version
- name: Install role and collection dependencies from requirements file
if: inputs.requirements_file != ''
shell: bash
working-directory: ${{ steps.inputs.outputs.working_directory }}
run: ansible-galaxy install -r ${{ inputs.requirements_file }}
- name: Run ansible-lint
shell: bash
working-directory: ${{ steps.inputs.outputs.working_directory }}
run: |
exit_code=0
expected_exit_code=${{ inputs.expected_return_code }}
ansible-lint ${{ inputs.args }} || exit_code=$?
if [ "$exit_code" != "$expected_exit_code" ]; then echo "Command failed: got '$exit_code', expected '$expected_exit_code'"; exit 1; fi
ansible-ansible-lint-c16f018/ansible.cfg 0000664 0000000 0000000 00000000245 14773473560 0020157 0 ustar 00root root 0000000 0000000 [defaults]
collections_path = collections:examples/playbooks/collections
# to avoid accidental use of vault from user environment:
vault_password_file = .vault_pass
ansible-ansible-lint-c16f018/codecov.yml 0000664 0000000 0000000 00000000153 14773473560 0020224 0 ustar 00root root 0000000 0000000 ---
comment: false
coverage:
status:
patch: true
project:
default:
threshold: 0.5%
ansible-ansible-lint-c16f018/collections/ 0000775 0000000 0000000 00000000000 14773473560 0020376 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/ 0000775 0000000 0000000 00000000000 14773473560 0024411 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/ 0000775 0000000 0000000 00000000000 14773473560 0025503 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/ 0000775 0000000 0000000 00000000000 14773473560 0030536 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/README.md 0000664 0000000 0000000 00000000117 14773473560 0032014 0 ustar 00root root 0000000 0000000 # Ansible Collection - local.testcollection
Documentation for the collection.
ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/galaxy.yml 0000664 0000000 0000000 00000000167 14773473560 0032552 0 ustar 00root root 0000000 0000000 ---
namespace: local
name: testcollection
version: 1.0.0
readme: README.md
authors:
- your name
ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/playbooks/ 0000775 0000000 0000000 00000000000 14773473560 0032541 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/playbooks/foo.yml 0000664 0000000 0000000 00000000253 14773473560 0034047 0 ustar 00root root 0000000 0000000 ---
- name: Fixture
hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Another task
ansible.builtin.debug:
msg: debug message
ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/playbooks/test/ 0000775 0000000 0000000 00000000000 14773473560 0033520 5 ustar 00root root 0000000 0000000 bar/ 0000775 0000000 0000000 00000000000 14773473560 0034205 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/playbooks/test foo.yml 0000664 0000000 0000000 00000000253 14773473560 0035513 0 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/playbooks/test/bar ---
- name: Fixture
hosts: localhost
connection: local
gather_facts: false
tasks:
- name: Another task
ansible.builtin.debug:
msg: debug message
ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/plugins/ 0000775 0000000 0000000 00000000000 14773473560 0032217 5 ustar 00root root 0000000 0000000 module_utils/ 0000775 0000000 0000000 00000000000 14773473560 0034645 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/plugins __init__.py 0000664 0000000 0000000 00000000144 14773473560 0036755 0 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/plugins/module_utils """module_utils package."""
# Some value that can be imported from a module
MY_STRING: str = "foo"
py.typed 0000664 0000000 0000000 00000000000 14773473560 0036332 0 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/plugins/module_utils ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/plugins/modules/ 0000775 0000000 0000000 00000000000 14773473560 0033667 5 ustar 00root root 0000000 0000000 __init__.py 0000664 0000000 0000000 00000000027 14773473560 0035720 0 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/plugins/modules """modules package."""
module_with_relative_import.py 0000664 0000000 0000000 00000000762 14773473560 0041774 0 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/plugins/modules """module_with_relative_import module."""
from ansible.module_utils.basic import AnsibleModule
# pylint: disable=E0402
from ..module_utils import MY_STRING # noqa: TID252 # type: ignore[import-untyped]
DOCUMENTATION = r"""
options:
name:
required: True
"""
def main() -> AnsibleModule:
"""The main function."""
return AnsibleModule(
argument_spec={
"name": {"required": True, "aliases": [MY_STRING]},
},
)
if __name__ == "__main__":
main()
ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/roles/ 0000775 0000000 0000000 00000000000 14773473560 0031662 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/roles/bug4095/ 0000775 0000000 0000000 00000000000 14773473560 0032761 5 ustar 00root root 0000000 0000000 tasks/ 0000775 0000000 0000000 00000000000 14773473560 0034027 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/roles/bug4095 main.yml 0000664 0000000 0000000 00000000000 14773473560 0035464 0 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/collections/ansible_collections/local/testcollection/roles/bug4095/tasks ansible-ansible-lint-c16f018/conftest.py 0000664 0000000 0000000 00000006154 14773473560 0020265 0 ustar 00root root 0000000 0000000 """PyTest Fixtures."""
import os
import platform
import subprocess
import sys
import warnings
from importlib.util import find_spec
from pathlib import Path
import pytest
# Ensure we always run from the root of the repository
if Path.cwd() != Path(__file__).parent:
os.chdir(Path(__file__).parent)
# checking if user is running pytest without installing test dependencies:
missing = [
module for module in ["ansible", "black", "mypy", "pylint"] if not find_spec(module)
]
if missing:
pytest.exit(
reason=f"FATAL: Missing modules: {', '.join(missing)} -- probably you missed installing test requirements with: pip install -e '.[test]'",
returncode=1,
)
# See: https://github.com/pytest-dev/pytest/issues/1402#issuecomment-186299177
def pytest_configure(config: pytest.Config) -> None:
"""Ensure we run preparation only on master thread when running in parallel."""
if is_help_option_present(config):
return
if is_master(config):
# linter should be able de detect and convert some deprecation warnings
# into validation errors but during testing we disable this to avoid
# unnecessary noise. Still, we might want to enable it for particular
# tests, for testing our ability to detect deprecations.
os.environ["ANSIBLE_DEPRECATION_WARNINGS"] = "False"
# we need to be sure that we have the requirements installed as some tests
# might depend on these. This approach is compatible with GHA caching.
try:
subprocess.check_output( # noqa: S603
["./tools/install-reqs.sh"],
stderr=subprocess.PIPE,
text=True,
)
except subprocess.CalledProcessError as exc:
print(f"{exc}\n{exc.stderr}\n{exc.stdout}", file=sys.stderr) # noqa: T201
sys.exit(1)
def is_help_option_present(config: pytest.Config) -> bool:
"""Return true if pytest invocation was not about running tests."""
return any(config.getoption(x) for x in ["--fixtures", "--help", "--collect-only"])
def is_master(config: pytest.Config) -> bool:
"""Return true if is run on master thread."""
return not hasattr(config, "workerinput")
# ruff: noqa: E402
from ansible.module_utils.common.yaml import ( # pylint: disable=wrong-import-position
HAS_LIBYAML,
)
if not HAS_LIBYAML:
# While presence of libyaml is not required for runtime, we keep this error
# fatal here in order to be sure that we spot libyaml errors during testing.
arch = platform.machine()
if arch not in ("arm64", "x86_64"):
warnings.warn(
f"This architecture ({arch}) is not supported by libyaml, performance will be degraded.",
category=pytest.PytestWarning,
stacklevel=1,
)
else:
pytest.fail(
"FATAL: For testing, we require pyyaml to be installed with its native extension, missing it would make testing 3x slower and risk missing essential bugs.",
)
@pytest.fixture(name="project_path")
def fixture_project_path() -> Path:
"""Fixture to linter root folder."""
return Path(__file__).resolve().parent
ansible-ansible-lint-c16f018/cspell.config.yaml 0000664 0000000 0000000 00000001013 14773473560 0021465 0 ustar 00root root 0000000 0000000 ---
dictionaryDefinitions:
- name: words
path: .config/dictionary.txt
addWords: true
dictionaries:
# Use `cspell-cli trace word` to check where a work is defined
- en_US
- bash
- words
- python
- python-common
enabled: true
ignorePaths:
- cspell.config.yaml
# The requirements file
- .config/constraints.txt
- docs/requirements.txt
- docs/requirements.in
# Test fixtures generated from outside
- test/**/*.result
- src/ansiblelint/schemas/*.json
# Other
- "*.svg"
- ".vscode/**"
ansible-ansible-lint-c16f018/docs/ 0000775 0000000 0000000 00000000000 14773473560 0017010 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/docs/.gitignore 0000664 0000000 0000000 00000000321 14773473560 0020774 0 ustar 00root root 0000000 0000000 # Old compiled python stuff
*.py[co]
# package building stuff
build
# Emacs backup files...
*~
.\#*
.doctrees
# Generated docs stuff
ansible*.xml
.buildinfo
objects.inv
.doctrees
*.min.css
_build
rst_warnings
ansible-ansible-lint-c16f018/docs/.nojekyll 0000664 0000000 0000000 00000000000 14773473560 0020626 0 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/docs/_autofix_rules.md 0000664 0000000 0000000 00000000656 14773473560 0022371 0 ustar 00root root 0000000 0000000 - [command-instead-of-shell](rules/command-instead-of-shell.md)
- [deprecated-local-action](rules/deprecated-local-action.md)
- [fqcn](rules/fqcn.md)
- [jinja](rules/jinja.md)
- [key-order](rules/key-order.md)
- [name](rules/name.md)
- [no-free-form](rules/no-free-form.md)
- [no-jinja-when](rules/no-jinja-when.md)
- [no-log-password](rules/no-log-password.md)
- [partial-become](rules/partial-become.md)
- [yaml](rules/yaml.md)
ansible-ansible-lint-c16f018/docs/_static/ 0000775 0000000 0000000 00000000000 14773473560 0020436 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/docs/_static/ansible-lint.svg 0000664 0000000 0000000 00000006726 14773473560 0023553 0 ustar 00root root 0000000 0000000
ansible-ansible-lint-c16f018/docs/_static/images/ 0000775 0000000 0000000 00000000000 14773473560 0021703 5 ustar 00root root 0000000 0000000 ansible-ansible-lint-c16f018/docs/_static/images/ansible-lint-512.png 0000664 0000000 0000000 00000032010 14773473560 0025273 0 ustar 00root root 0000000 0000000 PNG
IHDR x iTXtXML:com.adobe.xmp
H iCCPsRGB IEC61966-2.1 (uKBA?0E-2 jb6z}j{A۠ jkQAmAPAEmJnjD0s93gN+~2ٜ{pQtu"Ps|c1U
Xl㊪儧k9% kRGjr&kmdGXIiay9L:c͊ՅN?^L3}7DRȮR@c$)rq 2۽l=и
-:21=ezoU486Ewb:Ո)IuB@Rg<@x]W?7{g]jj pHYs IDATxy%U}/32
(-")D}I4Fq9Ohp 81C?{ϽUZgu;~zڵ$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$i:V V{;; l8l7^$ |[~|$-V5H"ɦ>}.̥֨AXg|%$p1p60sO*z-ɆtG̕I7۴p0"$Μ|Jr}]Di, $[O vǟSauϋ|H+IKĪ^H>pphԲ&| In(M&aP$M