mirror of
https://github.com/searxng/searxng.git
synced 2025-07-31 14:33:50 -04:00
[enh] CI - add shell script formatter
Implement rules and functions to format shell scripts: $ make format.shell or alternatively to format all source code: $ make format The formatter `shfmt` reads the rules from the editorconfig[1] If any EditorConfig files are found, they will be used to apply formatting options. If any parser or printer flags are given to the tool, no EditorConfig files will be used. [1] https://github.com/patrickvane/shfmt?tab=readme-ov-file#description Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
parent
7ee3dc9d74
commit
67e423edb2
@ -14,6 +14,14 @@ charset = utf-8
|
|||||||
# code formatter accepts length of 120, but editor should prefer 80
|
# code formatter accepts length of 120, but editor should prefer 80
|
||||||
max_line_length = 80
|
max_line_length = 80
|
||||||
|
|
||||||
|
[{*.sh,manage}]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
# shfmt options
|
||||||
|
shell_variant = bash
|
||||||
|
switch_case_indent = true
|
||||||
|
|
||||||
[*.html]
|
[*.html]
|
||||||
# in the jinja templates we use indent size of 2 and we do not use tabs
|
# in the jinja templates we use indent size of 2 and we do not use tabs
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
10
Makefile
10
Makefile
@ -47,8 +47,8 @@ search.checker.%: install
|
|||||||
$(Q)./manage pyenv.cmd searxng-checker -v "$(subst _, ,$(patsubst search.checker.%,%,$@))"
|
$(Q)./manage pyenv.cmd searxng-checker -v "$(subst _, ,$(patsubst search.checker.%,%,$@))"
|
||||||
|
|
||||||
PHONY += test ci.test test.shell
|
PHONY += test ci.test test.shell
|
||||||
ci.test: test.yamllint test.black test.types.ci test.pylint test.unit test.robot test.rst test.shell test.pybabel
|
ci.test: test.yamllint test.black test.types.ci test.pylint test.unit test.robot test.rst test.shell test.shfmt test.pybabel
|
||||||
test: test.yamllint test.black test.types.dev test.pylint test.unit test.robot test.rst test.shell
|
test: test.yamllint test.black test.types.dev test.pylint test.unit test.robot test.rst test.shell test.shfmt
|
||||||
test.shell:
|
test.shell:
|
||||||
$(Q)shellcheck -x -s dash \
|
$(Q)shellcheck -x -s dash \
|
||||||
container/entrypoint.sh
|
container/entrypoint.sh
|
||||||
@ -64,6 +64,8 @@ test.shell:
|
|||||||
utils/searxng.sh
|
utils/searxng.sh
|
||||||
$(Q)$(MTOOLS) build_msg TEST "$@ OK"
|
$(Q)$(MTOOLS) build_msg TEST "$@ OK"
|
||||||
|
|
||||||
|
PHONY += format
|
||||||
|
format: format.python format.shell
|
||||||
|
|
||||||
# wrap ./manage script
|
# wrap ./manage script
|
||||||
|
|
||||||
@ -77,8 +79,8 @@ MANAGE += gecko.driver
|
|||||||
MANAGE += node.env node.env.dev node.clean
|
MANAGE += node.env node.env.dev node.clean
|
||||||
MANAGE += py.build py.clean
|
MANAGE += py.build py.clean
|
||||||
MANAGE += pyenv pyenv.install pyenv.uninstall
|
MANAGE += pyenv pyenv.install pyenv.uninstall
|
||||||
MANAGE += format.python
|
MANAGE += format.python format.shell
|
||||||
MANAGE += test.yamllint test.pylint test.black test.pybabel test.unit test.coverage test.robot test.rst test.clean test.themes test.types.dev test.types.ci
|
MANAGE += test.yamllint test.pylint test.black test.pybabel test.unit test.coverage test.robot test.rst test.clean test.themes test.types.dev test.types.ci test.shfmt
|
||||||
MANAGE += themes.all themes.simple themes.fix themes.lint themes.test
|
MANAGE += themes.all themes.simple themes.fix themes.lint themes.test
|
||||||
MANAGE += static.build.commit static.build.drop static.build.restore
|
MANAGE += static.build.commit static.build.drop static.build.restore
|
||||||
MANAGE += nvm.install nvm.clean nvm.status nvm.nodejs
|
MANAGE += nvm.install nvm.clean nvm.status nvm.nodejs
|
||||||
|
@ -188,24 +188,22 @@ sources of the theme need to be rebuild. You can do that by running::
|
|||||||
|
|
||||||
$ LIVE_THEME=simple make run
|
$ LIVE_THEME=simple make run
|
||||||
|
|
||||||
.. _make format.python:
|
.. _make format:
|
||||||
|
|
||||||
``make format.python``
|
``make format``
|
||||||
======================
|
======================
|
||||||
|
|
||||||
Format Python source code using `Black code style`_. See ``$BLACK_OPTIONS``
|
|
||||||
and ``$BLACK_TARGETS`` in :origin:`Makefile`.
|
|
||||||
|
|
||||||
.. attention::
|
|
||||||
|
|
||||||
We stuck at Black 22.12.0, please read comment in PR `Bump black from 22.12.0
|
|
||||||
to 23.1.0`_
|
|
||||||
|
|
||||||
.. _Bump black from 22.12.0 to 23.1.0:
|
|
||||||
https://github.com/searxng/searxng/pull/2159#pullrequestreview-1284094735
|
|
||||||
|
|
||||||
.. _Black code style:
|
.. _Black code style:
|
||||||
https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html
|
https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html
|
||||||
|
.. _shfmt: https://github.com/mvdan/sh?tab=readme-ov-file#shfmt
|
||||||
|
.. _EditorConfig: https://github.com/patrickvane/shfmt?tab=readme-ov-file#description
|
||||||
|
|
||||||
|
- Format Python source code using `Black code style`_. See ``$BLACK_OPTIONS``
|
||||||
|
and ``$BLACK_TARGETS`` in :origin:`Makefile`.
|
||||||
|
|
||||||
|
- Format Shell scripts using shfmt_. The formatter ``shfmt`` reads the rules
|
||||||
|
from the EditorConfig_ files.
|
||||||
|
|
||||||
|
|
||||||
.. _make clean:
|
.. _make clean:
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Here is how a minimal workflow looks like:
|
|||||||
|
|
||||||
1. *start* hacking
|
1. *start* hacking
|
||||||
2. *run* your code: :ref:`make run`
|
2. *run* your code: :ref:`make run`
|
||||||
3. *format & test* your code: :ref:`make format.python` and :ref:`make test`
|
3. *format & test* your code: :ref:`make format` and :ref:`make test`
|
||||||
|
|
||||||
If you think at some point something fails, go back to *start*. Otherwise,
|
If you think at some point something fails, go back to *start*. Otherwise,
|
||||||
choose a meaningful commit message and we are happy to receive your pull
|
choose a meaningful commit message and we are happy to receive your pull
|
||||||
|
15
manage
15
manage
@ -64,6 +64,12 @@ RST_FILES=(
|
|||||||
'README.rst'
|
'README.rst'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
SHFMT_SCRIPTS=(
|
||||||
|
"./manage"
|
||||||
|
"./container"
|
||||||
|
"./utils"
|
||||||
|
)
|
||||||
|
|
||||||
help() {
|
help() {
|
||||||
nvm.help
|
nvm.help
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
@ -90,6 +96,7 @@ pyenv.:
|
|||||||
OK : test if virtualenv is OK
|
OK : test if virtualenv is OK
|
||||||
format.:
|
format.:
|
||||||
python : format Python code source using black
|
python : format Python code source using black
|
||||||
|
shell : format Shell scripts using shfmt
|
||||||
EOF
|
EOF
|
||||||
go.help
|
go.help
|
||||||
node.help
|
node.help
|
||||||
@ -248,11 +255,17 @@ pyenv.uninstall() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
format.python() {
|
format.python() {
|
||||||
build_msg TEST "[format.python] black \$BLACK_TARGETS"
|
build_msg TEST "[format.python] black ${BLACK_TARGETS[*]}"
|
||||||
pyenv.cmd black "${BLACK_OPTIONS[@]}" "${BLACK_TARGETS[@]}"
|
pyenv.cmd black "${BLACK_OPTIONS[@]}" "${BLACK_TARGETS[@]}"
|
||||||
dump_return $?
|
dump_return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
format.shell() {
|
||||||
|
build_msg TEST "[shfmt] shfmt ${SHFMT_SCRIPTS[*]}"
|
||||||
|
go.tool shfmt --list --write "${SHFMT_SCRIPTS[@]}"
|
||||||
|
dump_return $?
|
||||||
|
}
|
||||||
|
|
||||||
docs.prebuild() {
|
docs.prebuild() {
|
||||||
build_msg DOCS "build ${DOCS_BUILD}/includes"
|
build_msg DOCS "build ${DOCS_BUILD}/includes"
|
||||||
(
|
(
|
||||||
|
@ -6,8 +6,9 @@ test.help(){
|
|||||||
test.:
|
test.:
|
||||||
yamllint : lint YAML files (YAMLLINT_FILES)
|
yamllint : lint YAML files (YAMLLINT_FILES)
|
||||||
pylint : lint ./searx, ./searxng_extra and ./tests
|
pylint : lint ./searx, ./searxng_extra and ./tests
|
||||||
pyright : static type check of python sources (.dev or .ci)
|
|
||||||
black : check black code format
|
black : check black code format
|
||||||
|
shfmt : check shfmt code format
|
||||||
|
shfmt : check Shell script code format
|
||||||
unit : run unit tests
|
unit : run unit tests
|
||||||
coverage : run unit tests with coverage
|
coverage : run unit tests with coverage
|
||||||
robot : run robot test
|
robot : run robot test
|
||||||
@ -105,6 +106,12 @@ test.black() {
|
|||||||
dump_return $?
|
dump_return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test.shfmt() {
|
||||||
|
build_msg TEST "[shfmt] ${SHFMT_SCRIPTS[*]}"
|
||||||
|
go.tool shfmt --list --diff "${SHFMT_SCRIPTS[@]}"
|
||||||
|
dump_return $?
|
||||||
|
}
|
||||||
|
|
||||||
test.unit() {
|
test.unit() {
|
||||||
build_msg TEST 'tests/unit'
|
build_msg TEST 'tests/unit'
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
|
Loading…
x
Reference in New Issue
Block a user