зеркало из https://github.com/microsoft/CCF.git
133 строки
3.6 KiB
Bash
Executable File
133 строки
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the Apache 2.0 License.
|
|
|
|
set -e
|
|
|
|
if [ "$1" == "-f" ]; then
|
|
FIX=1
|
|
else
|
|
FIX=0
|
|
fi
|
|
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|
|
|
ROOT_DIR=$( dirname "$SCRIPT_DIR" )
|
|
pushd "$ROOT_DIR" > /dev/null
|
|
|
|
# GitHub actions workflow commands: https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions
|
|
function group(){
|
|
# Only do this in GitHub actions, where CI is defined according to
|
|
# https://docs.github.com/en/actions/learn-github-actions/environment-variables#default-environment-variables
|
|
if [[ ${CI} ]]; then
|
|
echo "::group::$1"
|
|
else
|
|
echo "-=[ $1 ]=-"
|
|
fi
|
|
}
|
|
function endgroup() {
|
|
if [[ ${CI} ]]; then
|
|
echo "::endgroup::"
|
|
fi
|
|
}
|
|
|
|
|
|
group "Shell scripts"
|
|
git ls-files | grep -e '\.sh$' | grep -E -v "^3rdparty" | xargs shellcheck -s bash -e SC2044,SC2002,SC1091,SC2181
|
|
endgroup
|
|
|
|
group "TODOs"
|
|
"$SCRIPT_DIR"/check-todo.sh include src
|
|
endgroup
|
|
|
|
group "Public includes"
|
|
# Enforce that no private headers are included from public header files
|
|
violations=$(find "$ROOT_DIR/include/ccf" -type f -print0 | xargs --null grep -e "#include \"" | grep -v "#include \"ccf" | sort)
|
|
if [[ -n "$violations" ]]; then
|
|
echo "Public headers include private implementation files:"
|
|
echo "$violations"
|
|
exit 1
|
|
else
|
|
echo "No public header violations"
|
|
fi
|
|
endgroup
|
|
|
|
group "Release notes"
|
|
if [ $FIX -ne 0 ]; then
|
|
python3 "$SCRIPT_DIR"/extract-release-notes.py -f
|
|
else
|
|
python3 "$SCRIPT_DIR"/extract-release-notes.py
|
|
fi
|
|
endgroup
|
|
|
|
group "C/C++/Proto format"
|
|
if [ $FIX -ne 0 ]; then
|
|
"$SCRIPT_DIR"/check-format.sh -f include src samples
|
|
else
|
|
"$SCRIPT_DIR"/check-format.sh include src samples
|
|
fi
|
|
endgroup
|
|
|
|
group "TypeScript, JavaScript, Markdown, TypeSpec, YAML and JSON format"
|
|
npm install --loglevel=error --no-save prettier @typespec/prettier-plugin-typespec 1>/dev/null
|
|
if [ $FIX -ne 0 ]; then
|
|
git ls-files | grep -e '\.ts$' -e '\.js$' -e '\.md$' -e '\.yaml$' -e '\.yml$' -e '\.json$' | grep -v -e 'tests/sandbox/' | xargs npx prettier --write
|
|
else
|
|
git ls-files | grep -e '\.ts$' -e '\.js$' -e '\.md$' -e '\.yaml$' -e '\.yml$' -e '\.json$' | grep -v -e 'tests/sandbox/' | xargs npx prettier --check
|
|
fi
|
|
endgroup
|
|
|
|
group "OpenAPI"
|
|
npm install --loglevel=error --no-save @apidevtools/swagger-cli 1>/dev/null
|
|
find doc/schemas/*.json -exec npx swagger-cli validate {} \;
|
|
endgroup
|
|
|
|
group "Copyright notice headers"
|
|
python3.8 "$SCRIPT_DIR"/notice-check.py
|
|
endgroup
|
|
|
|
group "CMake format"
|
|
if [ $FIX -ne 0 ]; then
|
|
"$SCRIPT_DIR"/check-cmake-format.sh -f cmake samples src tests CMakeLists.txt
|
|
else
|
|
"$SCRIPT_DIR"/check-cmake-format.sh cmake samples src tests CMakeLists.txt
|
|
fi
|
|
endgroup
|
|
|
|
group "Python dependencies"
|
|
# Virtual Environment w/ dependencies for Python steps
|
|
if [ ! -f "scripts/env/bin/activate" ]
|
|
then
|
|
python3.8 -m venv scripts/env
|
|
fi
|
|
|
|
source scripts/env/bin/activate
|
|
pip install -U pip
|
|
pip install -U wheel black mypy ruff 1>/dev/null
|
|
endgroup
|
|
|
|
group "Python format"
|
|
if [ $FIX -ne 0 ]; then
|
|
git ls-files tests/ python/ scripts/ .cmake-format.py | grep -e '\.py$' | xargs black
|
|
else
|
|
git ls-files tests/ python/ scripts/ .cmake-format.py | grep -e '\.py$' | xargs black --check
|
|
fi
|
|
endgroup
|
|
|
|
group "Python lint dependencies"
|
|
# Install test dependencies before linting
|
|
pip install -U -r tests/requirements.txt 1>/dev/null
|
|
pip install -U -r python/requirements.txt 1>/dev/null
|
|
endgroup
|
|
|
|
group "Python lint"
|
|
if [ $FIX -ne 0 ]; then
|
|
ruff check --fix python/ tests/
|
|
else
|
|
ruff check python/ tests/
|
|
fi
|
|
endgroup
|
|
|
|
group "Python types"
|
|
git ls-files python/ | grep -e '\.py$' | xargs mypy
|
|
endgroup |