mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-17 17:02:43 +00:00
fafdb8f635bc157f55e23890264d12170ecd41ae ci: Allow running iwyu ci in worktree (MarcoFalke)
fab73e213dee1057e9e759133767b17ec5b1f6ab ci: Reject unsafe execution of shell scripts (MarcoFalke)
Pull request description:
Currently, the iwyu CI fails to run in a git-worktree, or git-archive. This is due to the use of `git diff`.
Fix this by force-initializing a dummy git repo with a single dummy commit.
It may be possible to detect when `git diff` is not available in the directory, and only apply the fallback when needed, but the git history is not needed and it is easier to unconditionally apply the git init.
ACKs for top commit:
willcl-ark:
reACK fafdb8f635bc157f55e23890264d12170ecd41ae
hebasto:
ACK fafdb8f635bc157f55e23890264d12170ecd41ae, I have reviewed the code and it looks OK. Tested on Fedora 43.
sedited:
ACK fafdb8f635bc157f55e23890264d12170ecd41ae
Tree-SHA512: 572f1e2b9e215c2804095382498abb5b8636e3a49d5ba2a736b975e06afa2881d815b854a8a593d0f187c7c6b55034688e11f46d6814edfe7c29505197e80b18
108 lines
4.2 KiB
Bash
Executable File
108 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Copyright (c) 2018-present The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
export LC_ALL=C.UTF-8
|
|
|
|
set -o errexit -o pipefail -o xtrace
|
|
|
|
if [ "${DANGER_RUN_CI_ON_HOST}" != "1" ]; then
|
|
echo "This script will make unsafe local and global modifications, so it can only be run inside a container and requires DANGER_RUN_CI_ON_HOST=1"
|
|
exit 1
|
|
fi
|
|
|
|
CFG_DONE="${BASE_ROOT_DIR}/ci.base-install-done" # Use a global setting to remember whether this script ran to avoid running it twice
|
|
|
|
if [ "$( cat "${CFG_DONE}" || true )" == "done" ]; then
|
|
echo "Skip base install"
|
|
exit 0
|
|
fi
|
|
|
|
MAKEJOBS="-j$( nproc )" # Use nproc, because MAKEJOBS is the default in docker image builds.
|
|
|
|
if [ -n "$DPKG_ADD_ARCH" ]; then
|
|
dpkg --add-architecture "$DPKG_ADD_ARCH"
|
|
fi
|
|
|
|
if [ -n "${APT_LLVM_V}" ]; then
|
|
${CI_RETRY_EXE} apt-get update
|
|
${CI_RETRY_EXE} apt-get install curl -y
|
|
curl "https://apt.llvm.org/llvm-snapshot.gpg.key" | tee "/etc/apt/trusted.gpg.d/apt.llvm.org.asc"
|
|
(
|
|
# shellcheck disable=SC2034
|
|
source /etc/os-release
|
|
echo "deb http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-${APT_LLVM_V} main" > "/etc/apt/sources.list.d/llvm-toolchain-${VERSION_CODENAME}-${APT_LLVM_V}.list"
|
|
)
|
|
fi
|
|
|
|
if command -v apk >/dev/null 2>&1; then
|
|
${CI_RETRY_EXE} apk update
|
|
# shellcheck disable=SC2086
|
|
${CI_RETRY_EXE} apk add --no-cache $CI_BASE_PACKAGES $PACKAGES
|
|
elif [ "$CI_OS_NAME" != "macos" ]; then
|
|
if [[ -n "${APPEND_APT_SOURCES_LIST}" ]]; then
|
|
echo "${APPEND_APT_SOURCES_LIST}" >> /etc/apt/sources.list
|
|
fi
|
|
${CI_RETRY_EXE} apt-get update
|
|
# shellcheck disable=SC2086
|
|
${CI_RETRY_EXE} apt-get install --no-install-recommends --no-upgrade -y $PACKAGES $CI_BASE_PACKAGES
|
|
fi
|
|
|
|
if [ -n "${APT_LLVM_V}" ]; then
|
|
update-alternatives --install /usr/bin/clang++ clang++ "/usr/bin/clang++-${APT_LLVM_V}" 100
|
|
update-alternatives --install /usr/bin/clang clang "/usr/bin/clang-${APT_LLVM_V}" 100
|
|
update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer "/usr/bin/llvm-symbolizer-${APT_LLVM_V}" 100
|
|
fi
|
|
|
|
if [ -n "$PIP_PACKAGES" ]; then
|
|
# shellcheck disable=SC2086
|
|
${CI_RETRY_EXE} pip3 install --user $PIP_PACKAGES
|
|
fi
|
|
|
|
if [[ -n "${USE_INSTRUMENTED_LIBCPP}" ]]; then
|
|
${CI_RETRY_EXE} git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-22.1.0" /llvm-project
|
|
|
|
cmake -G Ninja -B /cxx_build/ \
|
|
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DLLVM_USE_SANITIZER="${USE_INSTRUMENTED_LIBCPP}" \
|
|
-DCMAKE_C_COMPILER=clang \
|
|
-DCMAKE_CXX_COMPILER=clang++ \
|
|
-DLLVM_TARGETS_TO_BUILD=Native \
|
|
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
|
|
-DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
|
|
-DLIBCXX_ABI_DEFINES="_LIBCPP_ABI_BOUNDED_ITERATORS;_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STD_ARRAY;_LIBCPP_ABI_BOUNDED_ITERATORS_IN_STRING;_LIBCPP_ABI_BOUNDED_ITERATORS_IN_VECTOR;_LIBCPP_ABI_BOUNDED_UNIQUE_PTR" \
|
|
-DLIBCXX_HARDENING_MODE=debug \
|
|
-S /llvm-project/runtimes
|
|
|
|
ninja -C /cxx_build/ "$MAKEJOBS"
|
|
|
|
# Clear no longer needed source folder
|
|
du -sh /llvm-project
|
|
rm -rf /llvm-project
|
|
fi
|
|
|
|
if [[ "${RUN_IWYU}" == true ]]; then
|
|
${CI_RETRY_EXE} git clone --depth=1 https://github.com/include-what-you-use/include-what-you-use -b clang_"${TIDY_LLVM_V}" /include-what-you-use
|
|
(cd /include-what-you-use && patch -p1 < /ci_container_base/ci/test/01_iwyu.patch)
|
|
cmake -B /iwyu-build/ -G 'Unix Makefiles' -DCMAKE_PREFIX_PATH=/usr/lib/llvm-"${TIDY_LLVM_V}" -S /include-what-you-use
|
|
make -C /iwyu-build/ install "$MAKEJOBS"
|
|
fi
|
|
|
|
mkdir -p "${DEPENDS_DIR}/SDKs" "${DEPENDS_DIR}/sdk-sources"
|
|
|
|
OSX_SDK_BASENAME="Xcode-${XCODE_VERSION}-${XCODE_BUILD_ID}-extracted-SDK-with-libcxx-headers"
|
|
|
|
if [ -n "$XCODE_VERSION" ] && [ ! -d "${DEPENDS_DIR}/SDKs/${OSX_SDK_BASENAME}" ]; then
|
|
OSX_SDK_FILENAME="${OSX_SDK_BASENAME}.tar"
|
|
OSX_SDK_PATH="${DEPENDS_DIR}/sdk-sources/${OSX_SDK_FILENAME}"
|
|
if [ ! -f "$OSX_SDK_PATH" ]; then
|
|
${CI_RETRY_EXE} curl --location --fail "${SDK_URL}/${OSX_SDK_FILENAME}" -o "$OSX_SDK_PATH"
|
|
fi
|
|
tar -C "${DEPENDS_DIR}/SDKs" -xf "$OSX_SDK_PATH"
|
|
fi
|
|
|
|
echo -n "done" > "${CFG_DONE}"
|