name: code-format

on: [push, pull_request]

concurrency:
  group: code-format-${{ github.ref }}
  cancel-in-progress: true

permissions:
  contents: write

jobs:
  code-format:
    runs-on: ubuntu-latest
    container: ubuntu:20.04
    steps:
    - name: astyle
      run: |
        export DEBIAN_FRONTEND=noninteractive
        apt-get update -y
        apt-get install -y astyle git

    - uses: actions/checkout@v4

    - name: cache-clang-format
      id: cache-clang-format
      uses: actions/cache@v4
      with:
        path: clang-format-install
        key: clang-format-install-5
    - name: clang-format
      if: steps.cache-clang-format.outputs.cache-hit != 'true'
      run: |
        export DEBIAN_FRONTEND=noninteractive
        apt-get update -y
        apt-get install -y build-essential wget curl cmake unzip zip python3-pip
        wget https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.1/llvm-project-10.0.1.tar.xz
        tar -xf llvm-project-10.0.1.tar.xz
        cd llvm-project-10.0.1
        mkdir build
        cd build
        cmake -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TARGETS_TO_BUILD="" -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_DOCS=OFF ../llvm/
        make -j2 clang-format
        mkdir $GITHUB_WORKSPACE/clang-format-install
        cp -r bin/clang-format $GITHUB_WORKSPACE/clang-format-install
        cd ../../
        rm -rf llvm-project-10.0.1
        rm llvm-project-10.0.1.tar.xz

    - name: code-format
      run: |
        mv $GITHUB_WORKSPACE/clang-format-install/clang-format /usr/local/bin/clang-format
        rm -rf $GITHUB_WORKSPACE/clang-format-install
        sh codeformat.sh

    - name: configure-git-safe-directory
      run: git config --global --add safe.directory /__w/ncnn/ncnn

    - uses: stefanzweifel/git-auto-commit-action@v6
      with:
        commit_message: apply code-format changes

    - name: restore-clang-format-cache
      run: |
        mkdir $GITHUB_WORKSPACE/clang-format-install
        cp -r /usr/local/bin/clang-format $GITHUB_WORKSPACE/clang-format-install
