diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index ea81d751500..715c2a9dfc5 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -27,6 +27,7 @@ jobs: matrix: docs-output: - linkcheck + - spellcheck - html - epub # - pdf @@ -141,3 +142,13 @@ jobs: SALT_ON_SALTSTACK: "1" run: | tools docs linkcheck + + - name: Check Documentation Spelling + if: ${{ matrix.docs-output == 'spellcheck' }} + shell: bash + continue-on-error: true + env: + LATEST_RELEASE: "${{ inputs.salt-version }}" + SALT_ON_SALTSTACK: "1" + run: | + tools docs spellcheck diff --git a/doc/conf.py b/doc/conf.py index fc2e9d258e3..fd611915db5 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -131,6 +131,7 @@ else: # latest or something else needs_sphinx = "1.3" spelling_lang = "en_US" +spelling_show_suggestions = True language = "en" locale_dirs = [ "_locale", @@ -151,17 +152,11 @@ extensions = [ "sphinxcontrib.httpdomain", "saltrepo", "myst_parser", + "sphinxcontrib.spelling", #'saltautodoc', # Must be AFTER autodoc #'shorturls', ] -try: - import sphinxcontrib.spelling # false positive, pylint: disable=unused-import -except ImportError: - pass -else: - extensions += ["sphinxcontrib.spelling"] - modindex_common_prefix = ["salt."] autosummary_generate = True diff --git a/doc/spelling_wordlist.txt b/doc/spelling_wordlist.txt index 865575add42..265dfaca0a0 100644 --- a/doc/spelling_wordlist.txt +++ b/doc/spelling_wordlist.txt @@ -1,21 +1,20 @@ -ackup acl addr addrs admin -Admin adminfile aggr aix aliyun -Aliyun +allusers amazonaws amd ami amiga +apache apachectl api -apiKey +apikey apikeys apis app @@ -26,10 +25,9 @@ args arn arp asg -askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs +askdjghsdfjkghwupujasdflkdfklgjsdfjajkghs atime augeas -Augeas auth authid autodeployed @@ -38,38 +36,32 @@ autoload autoloaded autoruns autoscale -Autoscale autosign awk aws backend -Backend backends -Backends backreferences -Backrefs +backrefs basedir basedn basename basepath baseurl -Baumgartner +baumgartner bdist -Benke -Binlog +benke +binlog blockdev blockdevice blockdevices bluetooth -Bluetooth bluetoothd bluez -Bluez -BlueZ -Borgstrom +borgstrom boto botocore -Boucha +boucha br brtfs bsd @@ -81,7 +73,7 @@ cachedir cachefile cassandra catalina -Centerville +centerville centos cer cfg @@ -92,9 +84,7 @@ chage charset cherrypy chocolatey -Chocolatey chown -Chown chroot cidr cidrs @@ -108,7 +98,6 @@ collatz compactionstats conf config -Config configfile configs confs @@ -126,12 +115,11 @@ cputime cron crontab crpytographic -Crpytographic crt csr ctl cwd -Cygwin +cygwin daemonize daemontools darwin @@ -140,7 +128,7 @@ datastores dbuser dd ddns -Debconf +debconf debconfmod debian deinstall @@ -148,12 +136,10 @@ delim delvol depclean deps -Deregister +deregister desc deserialize -Deserialize deserialized -Deserialized deserializes deserializing dest @@ -178,9 +164,9 @@ distro distros dists django -Django djangoembed djangomod +dmg dmidecode dns dnsmasq @@ -191,22 +177,20 @@ dockerfile docstring docstrings dpkg -DRS +drs dryrun dst dumpe dvh eauth -EAuth ebuild ec eclean eix -Eix elasticache -Elasticache elb -emailAddress +emacs +emailaddress enablerepo endload enmod @@ -214,7 +198,6 @@ ensite env eselect esky -Esky etcd eventbus expr @@ -229,9 +212,7 @@ fileclient filedate filepath fileserver -Fileserver filesystem -Filesystem filesystems fmt foo @@ -239,7 +220,6 @@ forcestop formulae fqdn freebsd -FreeBSD freebsdjail freebsdkmod freebsdpkg @@ -257,22 +237,21 @@ ftp fw fwmark fwrule -Gb +gb gce gemset gemsets gentoo -Gentoo -Gentoolkit +gentoolkit gentoolkitmod getfacl gid gids gitfs github -GitHub +gitrepos glanceclient -Glazner +glazner glibc globbing globexpression @@ -287,7 +266,6 @@ gpg gpgowner gpt grep -Grep groupadd groupou guestfs @@ -296,17 +274,15 @@ hadoop haproxy haproxyconn hardcoded -Hausler +hausler hc hg hgfs hglib hiera -Highdata +highdata highstate -Highstate homebrew -Homebrew hostname hostnames htpasswd @@ -333,7 +309,6 @@ init initctl initscript inline -Inline inode inotify internet @@ -348,23 +323,18 @@ ipset ipsets iptables ipv -IPv -IPy +ipy irb irq jid jinja -Jinja jod -Jouanin +jouanin joyent -Joyent -jQuery +jquery json -Json jsonify junos -Junos keycontent keyfile keyid @@ -373,13 +343,12 @@ keypair keypairs keysize keyspace -Keyspace keyspaces keystoneclient kiorky -Klaassen +klaassen kmod -Kuan +kuan kvm kwarg kwargs @@ -395,20 +364,20 @@ libcloudfuncs libgit libguestfs libreiserfs +libssh libvirt lifecycle lightdm linode -Linode linux loadbalancer localemod localfiles localhost localtime -Logfile +logfile logrotate -Logstash +logstash loopback lowdata lowstate @@ -424,26 +393,24 @@ lvs lxc lxcbr lxcutils +macos macports mailq makeconf makedirs mako -Mako manpage manpages -Masterless +masterless maxproc md mdadm mem memcache memcached -Memcached metadata -Metadata -minionfs minion +minionfs mirrorlist mkfile mkfs @@ -453,14 +420,10 @@ mkpart mkpartfs mnt modjk -Modjk modprobe mongo -Mongo mongodb -Mongodb monit -Monit moosefs mountpoint msazure @@ -474,7 +437,7 @@ multicore multiline multipart munin -Mutex +mutex mydisk myinstance myminion @@ -487,6 +450,7 @@ nameserver nameservers namespace namespacing +nano nbd netaddr netapi @@ -500,26 +464,24 @@ nfs nftables ng nginx -Nginx nic nitty nocache nocerts nodegroup nodegroups -Nodegroups nodetool nolimit noop notasecret novaclient -Novaclient +nox npm ntp num offline ohai -Ok +ok omapi online onlyif @@ -528,8 +490,7 @@ openbsdservice opennebula openssl openstack -Openstack -openSUSE +opensuse org originalfile orm @@ -538,7 +499,6 @@ osxdesktop ou outlier outputter -Outputter outputters overlayfs overstatestage @@ -550,12 +510,10 @@ pam param paramiko params -Params partprobe passin passphrase passthrough -Passthrough passwd passwordless patchfile @@ -579,44 +537,37 @@ pkgrepo pkgrm pkgs pkgutil -Pkgutil pki plaintext -Plaintext plist plugin plugins -Plugins portfetch postgis postgres -Postgres postgresql poudriere -Poweroff +poweroff powerpath -Powerpath powershell -Powershell ppa pprint pre prepend -Prepend prepended preseed preseeded preseeding priv -PRIVKEY +privkey proc processlist programmatically proxmox -Proxmox proxying ps psycopg +pubkey pw py pybluez @@ -627,60 +578,53 @@ pygerduty pygit pymongo pyobjects -Pyobjects -pyOpenSSL +pyopenssl pypureomapi pysqlite pysvn +pytest pythoncom -Pythonic +pythonic pyvenv pywintypes pyyaml +qa qcow qemu -Qemu queueinfoitem -Quickstart +quickstart quotastats qux rabbitmq -rabbitMQ rabbitmqctl rackconnect rackspace -Rackspace -Rada -Radek +rada +radek rar rbenv -Rbenv rc rdma rdoc -RDoc rdp readme realserver rebase -Rebase receipthandle reclass redhat -Redhat redis -Redis redismod refactored +refspecs regen regex reinstallation reiserfs +renderer renderers -Renderers repl repo -Repo repos repr req'd @@ -695,9 +639,9 @@ retcode returncode reusability rh +rhel ri riak -Riak rolconnlimit rolename rolname @@ -706,7 +650,6 @@ rootswinrepo rootswinrepowinrepo rsa rsync -Rsync rsyslogd rubygems runas @@ -717,12 +660,9 @@ saltcloudmod saltenv saltfile saltify -Saltify saltnado saltstack -Saltstack saltutil -Saltutil sbin schemas screensaver @@ -745,7 +685,7 @@ setquota sfdisk sfn sha -SHAs +shas sid simplejson sleekxmpp @@ -759,30 +699,27 @@ softirq softlayer softwareupdate solaris -Solaris solarispkg solr -Solr someuser sql -SQL sqlalchemy sqlite -Sqlite sqs src +srv ssl stateconf -Stateconf stderr stdin stdout str strftime subfolder -subjectAltName -subjectAltNames +subjectaltname +subjectaltnames subkeys +subnet subqueries sudo sudoers @@ -795,10 +732,10 @@ svnfs swiftclient symlink symlinks -Symlinks syncdb +syndic sysadmin -Sysadmins +sysadmins sysbench sysctl syslog @@ -807,9 +744,9 @@ systemctl systemd systemwide sysupgrade -sysV +sysv sysvinit -Syu +syu tablespace tarball tbz @@ -818,20 +755,19 @@ templating testrb tgt tgz -Tibor +tibor timeframe timespec tls tmp tmpfs tmux -Todo +todo topfiles tpstats traceroute trunc twilio -Twilio txt ubuntu udp @@ -839,19 +775,17 @@ ui uid uids un -Undeploy +undeploy unhold uninstall -Uninstall uninstallation uninstalled uninstalling -Uninstalls +uninstalls unix unmerge -Unmonitor +unmonitor unpair -Unpair unpriv unrar unserialize @@ -863,27 +797,27 @@ url urlencoded useradd username -Username usr util utils utmp uuids uwsgi -uWSGI uzip +vagrantfile varnishd vcpus vdev +venafi venv ver vg vgname vhost vhosts +vim vimrc virt -Virt virtkey virtualenv virtualhost @@ -891,12 +825,11 @@ virtualization vm vmadm vms -VMware +vmware vnc voltype vpc vsphere -vSphere vt vtype vvvvv @@ -905,11 +838,9 @@ warnquota webapp webapps webhook -Webhook webserv webserver websockets -Websockets webutil wempy whitelist @@ -923,19 +854,20 @@ ws wsgi www xapi -Xen +xcode +xen xml xmpp yaml -Yaml yamlex yamlify -Yann +yann yumpkg yy -Zabbix +zabbix zc zcbuildout +zeromq zfs znc zpool diff --git a/requirements/static/ci/docs.in b/requirements/static/ci/docs.in index 0416c0247c0..379223dfb95 100644 --- a/requirements/static/ci/docs.in +++ b/requirements/static/ci/docs.in @@ -4,4 +4,5 @@ sphinx>=3.5.1; python_version < '3.9' sphinx>=6.1.0; python_version >= '3.9' myst-docutils[linkify] sphinxcontrib.httpdomain +sphinxcontrib-spelling cherrypy diff --git a/requirements/static/ci/py3.10/docs.txt b/requirements/static/ci/py3.10/docs.txt index 95280dda7b1..d6048ae94a9 100644 --- a/requirements/static/ci/py3.10/docs.txt +++ b/requirements/static/ci/py3.10/docs.txt @@ -121,6 +121,8 @@ pycryptodomex==3.9.8 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/crypto.txt +pyenchant==3.2.2 + # via sphinxcontrib-spelling pygments==2.14.0 # via sphinx pytz==2022.1 @@ -153,6 +155,7 @@ snowballstemmer==2.1.0 sphinx==6.1.3 ; python_version >= "3.9" # via # -r requirements/static/ci/docs.in + # sphinxcontrib-spelling # sphinxcontrib.httpdomain sphinxcontrib-applehelp==1.0.2 # via sphinx @@ -166,6 +169,8 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx +sphinxcontrib-spelling==7.7.0 + # via -r requirements/static/ci/docs.in sphinxcontrib.httpdomain==1.8.1 # via -r requirements/static/ci/docs.in tempora==4.1.1 diff --git a/requirements/static/ci/py3.6/docs.txt b/requirements/static/ci/py3.6/docs.txt index e1cdbf440b3..4fb3f18e717 100644 --- a/requirements/static/ci/py3.6/docs.txt +++ b/requirements/static/ci/py3.6/docs.txt @@ -52,6 +52,7 @@ importlib-metadata==4.6.4 # via # -c requirements/static/ci/py3.6/linux.txt # importlib-resources + # sphinxcontrib-spelling importlib-resources==1.5.0 # via # -c requirements/static/ci/py3.6/linux.txt @@ -133,6 +134,8 @@ pycryptodomex==3.9.8 # via # -c requirements/static/ci/py3.6/linux.txt # -r requirements/crypto.txt +pyenchant==3.2.2 + # via sphinxcontrib-spelling pygments==2.8.1 # via sphinx pyparsing==3.0.6 @@ -169,6 +172,7 @@ snowballstemmer==2.1.0 sphinx==3.5.2 ; python_version < "3.9" # via # -r requirements/static/ci/docs.in + # sphinxcontrib-spelling # sphinxcontrib.httpdomain sphinxcontrib-applehelp==1.0.2 # via sphinx @@ -182,6 +186,8 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.4 # via sphinx +sphinxcontrib-spelling==7.7.0 + # via -r requirements/static/ci/docs.in sphinxcontrib.httpdomain==1.8.1 # via -r requirements/static/ci/docs.in tempora==4.1.1 diff --git a/requirements/static/ci/py3.7/docs.txt b/requirements/static/ci/py3.7/docs.txt index 667bf2c3532..9eb1597228f 100644 --- a/requirements/static/ci/py3.7/docs.txt +++ b/requirements/static/ci/py3.7/docs.txt @@ -44,6 +44,10 @@ immutables==0.15 # via # -c requirements/static/ci/py3.7/linux.txt # contextvars +importlib-metadata==4.6.4 + # via + # -c requirements/static/ci/py3.7/linux.txt + # sphinxcontrib-spelling jaraco.classes==3.2.1 # via # -c requirements/static/ci/py3.7/linux.txt @@ -121,6 +125,8 @@ pycryptodomex==3.9.8 # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/crypto.txt +pyenchant==3.2.2 + # via sphinxcontrib-spelling pygments==2.8.1 # via sphinx pyparsing==3.0.9 @@ -157,6 +163,7 @@ snowballstemmer==2.1.0 sphinx==3.5.2 ; python_version < "3.9" # via # -r requirements/static/ci/docs.in + # sphinxcontrib-spelling # sphinxcontrib.httpdomain sphinxcontrib-applehelp==1.0.2 # via sphinx @@ -170,6 +177,8 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.4 # via sphinx +sphinxcontrib-spelling==7.7.0 + # via -r requirements/static/ci/docs.in sphinxcontrib.httpdomain==1.8.1 # via -r requirements/static/ci/docs.in tempora==4.1.1 @@ -179,6 +188,7 @@ tempora==4.1.1 typing-extensions==3.10.0.0 # via # -c requirements/static/ci/py3.7/linux.txt + # importlib-metadata # markdown-it-py # myst-docutils uc-micro-py==1.0.1 @@ -191,6 +201,10 @@ zc.lockfile==1.4 # via # -c requirements/static/ci/py3.7/linux.txt # cherrypy +zipp==3.5.0 + # via + # -c requirements/static/ci/py3.7/linux.txt + # importlib-metadata # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements/static/ci/py3.8/docs.txt b/requirements/static/ci/py3.8/docs.txt index fd0f22769d1..24787f2e921 100644 --- a/requirements/static/ci/py3.8/docs.txt +++ b/requirements/static/ci/py3.8/docs.txt @@ -121,6 +121,8 @@ pycryptodomex==3.9.8 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/crypto.txt +pyenchant==3.2.2 + # via sphinxcontrib-spelling pygments==2.8.1 # via sphinx pytz==2022.1 @@ -153,6 +155,7 @@ snowballstemmer==2.1.0 sphinx==3.5.2 ; python_version < "3.9" # via # -r requirements/static/ci/docs.in + # sphinxcontrib-spelling # sphinxcontrib.httpdomain sphinxcontrib-applehelp==1.0.2 # via sphinx @@ -166,6 +169,8 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.4 # via sphinx +sphinxcontrib-spelling==7.7.0 + # via -r requirements/static/ci/docs.in sphinxcontrib.httpdomain==1.8.1 # via -r requirements/static/ci/docs.in tempora==4.1.1 diff --git a/requirements/static/ci/py3.9/docs.txt b/requirements/static/ci/py3.9/docs.txt index 28fdf32bae3..ded970b9883 100644 --- a/requirements/static/ci/py3.9/docs.txt +++ b/requirements/static/ci/py3.9/docs.txt @@ -125,6 +125,8 @@ pycryptodomex==3.9.8 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/crypto.txt +pyenchant==3.2.2 + # via sphinxcontrib-spelling pygments==2.14.0 # via sphinx pytz==2022.1 @@ -157,6 +159,7 @@ snowballstemmer==2.1.0 sphinx==6.1.3 ; python_version >= "3.9" # via # -r requirements/static/ci/docs.in + # sphinxcontrib-spelling # sphinxcontrib.httpdomain sphinxcontrib-applehelp==1.0.2 # via sphinx @@ -170,6 +173,8 @@ sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx +sphinxcontrib-spelling==7.7.0 + # via -r requirements/static/ci/docs.in sphinxcontrib.httpdomain==1.8.1 # via -r requirements/static/ci/docs.in tempora==4.1.1 diff --git a/tools/docs.py b/tools/docs.py index b34f6214523..a0e3797fd61 100644 --- a/tools/docs.py +++ b/tools/docs.py @@ -120,3 +120,23 @@ def linkcheck(ctx: Context, no_clean: bool = False): cwd="doc/", check=True, ) + + +@docs.command( + name="spellcheck", + arguments={ + "no_clean": { + "help": "Don't cleanup prior to building", + } + }, +) +def spellcheck(ctx: Context, no_clean: bool = False): + if no_clean is False: + ctx.run("make", "clean", cwd="doc/", check=True) + ctx.run( + "make", + "spelling", + "SPHINXOPTS=-W -j auto --keep-going --color", + cwd="doc/", + check=True, + )