clang-format.yml: De-couple clang-format from Clang
.. so that we can bump their versions independently
diff --git a/.ci.sh b/.ci.sh
index d88f594..083f293 100755
--- a/.ci.sh
+++ b/.ci.sh
@@ -65,9 +65,6 @@
make VERBOSE=1 CTEST_OUTPUT_ON_FAILURE=1 all test
make DESTDIR="${PWD}"/ROOT install
find ROOT -printf "%P\n" | sort
-elif [[ ${MODE} = clang-format ]]; then
- ./apply-clang-format.sh
- git diff --exit-code
elif [[ ${MODE} = coverage-sh ]]; then
./coverage.sh
else
diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml
new file mode 100644
index 0000000..776024c
--- /dev/null
+++ b/.github/workflows/clang-format.yml
@@ -0,0 +1,67 @@
+# __ __ _
+# ___\ \/ /_ __ __ _| |_
+# / _ \\ /| '_ \ / _` | __|
+# | __// \| |_) | (_| | |_
+# \___/_/\_\ .__/ \__,_|\__|
+# |_| XML parser
+#
+# Copyright (c) 2024 Sebastian Pipping <sebastian@pipping.org>
+# Licensed under the MIT license:
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to permit
+# persons to whom the Software is furnished to do so, subject to the
+# following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+# NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+# USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+name: Enforce clang-format clean code
+
+on:
+ pull_request:
+ push:
+ schedule:
+ - cron: '0 2 * * 5' # Every Friday at 2am
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ clang_format:
+ name: Enforce clang-format clean code
+ runs-on: ubuntu-22.04
+ steps:
+ - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+
+ - name: Install clang-format 17
+ run: |-
+ set -x
+ source /etc/os-release
+ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
+ sudo add-apt-repository "deb https://apt.llvm.org/${UBUNTU_CODENAME}/ llvm-toolchain-${UBUNTU_CODENAME}-17 main"
+ sudo apt-get update # due to new repository
+ sudo apt-get install --yes --no-install-recommends -V \
+ clang-format-17 \
+ moreutils
+ echo /usr/lib/llvm-17/bin >>"${GITHUB_PATH}"
+
+ - name: Run clang-format
+ run: |
+ set -x
+ cd expat/
+ ./apply-clang-format.sh
+ git config color.diff always
+ git diff --exit-code # i.e. fail CI when there is a diff (and present it)
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
index 88e7fb0..ee060ff 100644
--- a/.github/workflows/linux.yml
+++ b/.github/workflows/linux.yml
@@ -50,7 +50,6 @@
- MODE: distcheck
- MODE: qa-sh
FLAT_ENV: CC=clang CXX=clang++ LD=clang++ QA_SANITIZER=address
- - MODE: clang-format
- MODE: cmake-oos
FLAT_ENV: CMAKE_ARGS="-DEXPAT_ATTR_INFO=ON -DEXPAT_BUILD_FUZZERS=ON -DCMAKE_C_FLAGS=-fsanitize=address -DCMAKE_CXX_FLAGS=-fsanitize=address -DCMAKE_EXE_LINKER_FLAGS=-fsanitize=address -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++"
- MODE: qa-sh
@@ -124,7 +123,6 @@
# NOTE: Please note the version-specific ${PATH} extension for Clang adding /usr/lib/llvm-17/bin in .ci.sh
sudo apt-get install --yes --no-install-recommends -V \
clang-17 \
- clang-format-17 \
libclang-rt-17-dev
- name: Install build dependencies (common)
run: |-