diff --git a/.github/workflows/Codestyle-Check.yml b/.github/workflows/Codestyle-Check.yml new file mode 100644 index 000000000..4faee377c --- /dev/null +++ b/.github/workflows/Codestyle-Check.yml @@ -0,0 +1,48 @@ +name: Codestyle-Check + +on: + pull_request: + branches: ["develop"] + +jobs: + pre-commit: + name: Pre Commit + if: ${{ github.repository_owner == 'PaddlePaddle' }} + runs-on: ubuntu-latest + env: + PR_ID: ${{ github.event.pull_request.number }} + BRANCH: develop + + steps: + - name: Cleanup + run: | + rm -rf * .[^.]* + + - name: Checkout base repo + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.base.ref }} + fetch-depth: 1000 + + - name: Merge PR to test branch + run: | + git fetch origin pull/${PR_ID}/merge + git checkout -b test FETCH_HEAD + + - name: Setup python3.10 + uses: actions/setup-python@v5 + with: + python-version: '3.10' + cache: 'pip' + + - name: Install dependencies + run: | + pip install pre-commit==4.2.0 cpplint==1.6.0 clang-format==13.0.0 + + - name: Check pre-commit + env: + SKIP_CLANG_TIDY_CHECK: "ON" + run: | + set +e + bash -x tools/codestyle/pre_commit.sh;EXCODE=$? + exit $EXCODE diff --git a/tools/codestyle/pre_commit.sh b/tools/codestyle/pre_commit.sh new file mode 100644 index 000000000..2b3ca94c2 --- /dev/null +++ b/tools/codestyle/pre_commit.sh @@ -0,0 +1,68 @@ +# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set +x + +# use pre-commit 4.2.0 +if ! [[ $(pre-commit --version) == *"4.2.0"* ]]; then + pip install pre-commit==4.2.0 1>nul +fi + +# Install clang-format before git commit to avoid repeat installation due to +# pre-commit multi-thread running. +readonly VERSION="13.0.0" +version=$(clang-format -version) +if ! [[ $(python -V 2>&1 | awk '{print $2}' | awk -F '.' '{print $1$2}') -ge 36 ]]; then + echo "clang-format installation by pip need python version great equal 3.6, + please change the default python to higher version." + exit 1 +fi + +diff_files=$(git diff --name-only --diff-filter=ACMR ${BRANCH}) +num_diff_files=$(echo "$diff_files" | wc -l) +echo -e "diff files between pr and ${BRANCH}:\n${diff_files}" + +echo "Checking code style by pre-commit ..." +pre-commit run --files ${diff_files};check_error=$? + +if test ! -z "$(git diff)"; then + echo -e '\n************************************************************************************' + echo -e "These files have been formatted by code format hook. You should use pre-commit to \ +format them before git push." + echo -e '************************************************************************************\n' + git diff 2>&1 +fi + +echo -e '\n************************************************************************************' +if [ ${check_error} != 0 ];then + echo "Your PR code style check failed." + echo "Please install pre-commit locally and set up git hook scripts:" + echo "" + echo " pip install pre-commit==4.2.0" + echo " pre-commit install" + echo "" + if [[ $num_diff_files -le 100 ]];then + echo "Then, run pre-commit to check codestyle issues in your PR:" + echo "" + echo " pre-commit run --files" $(echo ${diff_files} | tr "\n" " ") + echo "" + fi + echo "For more information, please refer to our codestyle check guide:" + echo "https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/git_guides/codestyle_check_guide_cn.html" +else + echo "Your PR code style check passed." +fi +echo -e '************************************************************************************\n' + +exit ${check_error}