From fc0b026ce5d1d73bdbd8d120b9b715007f5174c5 Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Fri, 26 Jan 2024 15:48:02 +0100 Subject: [PATCH 1/2] clang-format.yml: De-couple clang-format from Clang .. so that we can bump their versions independently --- .ci.sh | 3 -- .github/workflows/clang-format.yml | 67 ++++++++++++++++++++++++++++++ .github/workflows/linux.yml | 2 - 3 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/clang-format.yml diff --git a/.ci.sh b/.ci.sh index d88f5943..083f2930 100755 --- a/.ci.sh +++ b/.ci.sh @@ -65,9 +65,6 @@ elif [[ ${MODE} = cmake-oos ]]; then 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 00000000..776024c5 --- /dev/null +++ b/.github/workflows/clang-format.yml @@ -0,0 +1,67 @@ +# __ __ _ +# ___\ \/ /_ __ __ _| |_ +# / _ \\ /| '_ \ / _` | __| +# | __// \| |_) | (_| | |_ +# \___/_/\_\ .__/ \__,_|\__| +# |_| XML parser +# +# Copyright (c) 2024 Sebastian Pipping +# 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 88e7fb0b..ee060ffd 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -50,7 +50,6 @@ jobs: - 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 @@ jobs: # 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: |- From 6880fe4948121ad121ea3341f4c0f8ab082139d0 Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Fri, 26 Jan 2024 15:24:28 +0100 Subject: [PATCH 2/2] CI: Upgrade to Clang 18 (except clang-tidy and clang-format) --- .ci.sh | 2 +- .github/workflows/fuzzing.yml | 12 ++++++------ .github/workflows/linux.yml | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.ci.sh b/.ci.sh index 083f2930..64b680cc 100755 --- a/.ci.sh +++ b/.ci.sh @@ -39,7 +39,7 @@ if [[ ${RUNNER_OS} = macOS ]]; then export PATH="/usr/local/opt/coreutils/libexec/gnubin${PATH:+:}${PATH}" export PATH="/usr/local/opt/findutils/libexec/gnubin${PATH:+:}${PATH}" elif [[ ${RUNNER_OS} = Linux ]]; then - export PATH="/usr/lib/llvm-17/bin:${PATH}" + export PATH="/usr/lib/llvm-18/bin:${PATH}" else echo "Unsupported RUNNER_OS \"${RUNNER_OS}\"." >&2 exit 1 diff --git a/.github/workflows/fuzzing.yml b/.github/workflows/fuzzing.yml index 236bdadc..85e41f8f 100644 --- a/.github/workflows/fuzzing.yml +++ b/.github/workflows/fuzzing.yml @@ -46,18 +46,18 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - name: Install Clang 17 + - name: Install Clang 18 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 add-apt-repository "deb https://apt.llvm.org/${UBUNTU_CODENAME}/ llvm-toolchain-${UBUNTU_CODENAME}-18 main" sudo apt-get update # due to new repository sudo apt-get install --yes --no-install-recommends -V \ - clang-17 \ - libclang-rt-17-dev \ - llvm-17 - echo /usr/lib/llvm-17/bin >>"${GITHUB_PATH}" + clang-18 \ + libclang-rt-18-dev \ + llvm-18 + echo /usr/lib/llvm-18/bin >>"${GITHUB_PATH}" - name: Build Expat fuzzers run: | diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index ee060ffd..f71ccc5b 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -118,12 +118,12 @@ jobs: 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 add-apt-repository "deb https://apt.llvm.org/${UBUNTU_CODENAME}/ llvm-toolchain-${UBUNTU_CODENAME}-18 main" sudo apt-get update # due to new repository - # NOTE: Please note the version-specific ${PATH} extension for Clang adding /usr/lib/llvm-17/bin in .ci.sh + # NOTE: Please note the version-specific ${PATH} extension for Clang adding /usr/lib/llvm-18/bin in .ci.sh sudo apt-get install --yes --no-install-recommends -V \ - clang-17 \ - libclang-rt-17-dev + clang-18 \ + libclang-rt-18-dev - name: Install build dependencies (common) run: |- sudo apt-get install --yes --no-install-recommends -V \