mirror of
https://github.com/git-for-windows/git.git
synced 2026-02-03 18:59:59 -06:00
Historically, the macOS jobs have always been among the longest-running ones, and recently the `git p4` tests became another liability: They started to fail much more often (maybe as of the switch away from the `macos-13` pool?), requiring re-runs of the jobs that already were responsible for long CI build times. Of the 35 test scripts that exercise `git p4`, 32 are actually run on macOS (3 are skipped for reasons like case-sensitivee filesystem), and they take an accumulated runtime of over half an hour. Furthermore, the `git p4` command is not really affected by Git for Windows' patches, at least not as far as macOS is concerned, therefore it is not only causing developer friction to have these long-running, frequently failing tests, it is also quite wasteful: There has not been a single instance so far where any `git p4` test failure in Git for Windows had demonstrated an actionable bug. While upstream Git is confident to have addressed the flakiness of the `git p4` tests via ffff0bb0dac1 (Use Perforce arm64 binary on macOS CI jobs, 2025-11-16) (which got slipped in at the 11th hour into the v2.52.0 release, fast-tracked without ever hitting `seen` even after -rc2 was released), I am not quite so confident, and besides, the runtime penalty of running those tests in Git for Windows' CI runs is still a worrisome burden. So let's just disable those tests in the CI runs, at least on macOS. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
192 lines
5.7 KiB
Bash
Executable File
192 lines
5.7 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Install dependencies required to build and test Git on Linux and macOS
|
|
#
|
|
|
|
. ${0%/*}/lib.sh
|
|
|
|
begin_group "Install dependencies"
|
|
|
|
P4WHENCE=https://cdist2.perforce.com/perforce/r23.2
|
|
LFSWHENCE=https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION
|
|
JGITWHENCE=https://repo1.maven.org/maven2/org/eclipse/jgit/org.eclipse.jgit.pgm/6.8.0.202311291450-r/org.eclipse.jgit.pgm-6.8.0.202311291450-r.sh
|
|
CARGO_MSRV_VERSION=0.18.4
|
|
CARGO_MSRV_WHENCE=https://github.com/foresterre/cargo-msrv/releases/download/v$CARGO_MSRV_VERSION/cargo-msrv-x86_64-unknown-linux-musl-v$CARGO_MSRV_VERSION.tgz
|
|
|
|
# Make sudo a no-op and execute the command directly when running as root.
|
|
# While using sudo would be fine on most platforms when we are root already,
|
|
# some platforms like e.g. Alpine Linux do not have sudo available by default
|
|
# and would thus break.
|
|
if test "$(id -u)" -eq 0
|
|
then
|
|
sudo () {
|
|
"$@"
|
|
}
|
|
fi
|
|
|
|
case "$distro" in
|
|
alpine-*)
|
|
apk add --update shadow sudo meson ninja-build gcc libc-dev curl-dev openssl-dev expat-dev gettext \
|
|
zlib-ng-dev pcre2-dev python3 musl-libintl perl-utils ncurses \
|
|
apache2 apache2-http2 apache2-proxy apache2-ssl apache2-webdav apr-util-dbd_sqlite3 \
|
|
bash cvs gnupg perl-cgi perl-dbd-sqlite perl-io-tty >/dev/null
|
|
;;
|
|
fedora-*|almalinux-*)
|
|
case "$jobname" in
|
|
*-meson)
|
|
MESON_DEPS="meson ninja";;
|
|
esac
|
|
dnf -yq update >/dev/null &&
|
|
dnf -yq install shadow-utils sudo make pkg-config gcc findutils diffutils perl python3 gawk gettext zlib-devel expat-devel openssl-devel curl-devel pcre2-devel $MESON_DEPS cargo >/dev/null
|
|
;;
|
|
ubuntu-*|i386/ubuntu-*|debian-*)
|
|
# Required so that apt doesn't wait for user input on certain packages.
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
|
|
case "$distro" in
|
|
ubuntu-*)
|
|
SVN='libsvn-perl subversion'
|
|
LANGUAGES='language-pack-is'
|
|
;;
|
|
i386/ubuntu-*)
|
|
SVN=
|
|
LANGUAGES='language-pack-is'
|
|
;;
|
|
*)
|
|
SVN='libsvn-perl subversion'
|
|
LANGUAGES='locales-all'
|
|
;;
|
|
esac
|
|
|
|
sudo apt-get -q update
|
|
sudo apt-get -q -y install \
|
|
$LANGUAGES apache2 cvs cvsps git gnupg $SVN \
|
|
make libssl-dev libcurl4-openssl-dev libexpat-dev wget sudo default-jre \
|
|
tcl tk gettext zlib1g-dev perl-modules liberror-perl libauthen-sasl-perl \
|
|
libemail-valid-perl libio-pty-perl libio-socket-ssl-perl libnet-smtp-ssl-perl libdbd-sqlite3-perl libcgi-pm-perl \
|
|
libsecret-1-dev libpcre2-dev meson ninja-build pkg-config cargo \
|
|
${CC_PACKAGE:-${CC:-gcc}} $PYTHON_PACKAGE
|
|
|
|
# Starting with Ubuntu 25.10, sudo can now be provided via either
|
|
# sudo(1) or sudo-rs(1), with the latter being the default. The problem
|
|
# is that it does not support `--preserve-env` though, which we rely on
|
|
# in our CI. We thus revert back to the C implementation.
|
|
if test -f /etc/alternatives/sudo
|
|
then
|
|
sudo update-alternatives --set sudo /usr/bin/sudo.ws
|
|
fi
|
|
|
|
case "$distro" in
|
|
ubuntu-*)
|
|
mkdir --parents "$CUSTOM_PATH"
|
|
|
|
wget --quiet --directory-prefix="$CUSTOM_PATH" \
|
|
"$P4WHENCE/bin.linux26x86_64/p4d" \
|
|
"$P4WHENCE/bin.linux26x86_64/p4" &&
|
|
chmod a+x "$CUSTOM_PATH/p4d" "$CUSTOM_PATH/p4" || {
|
|
rm -f "$CUSTOM_PATH/p4"
|
|
rm -f "$CUSTOM_PATH/p4d"
|
|
}
|
|
|
|
wget --quiet \
|
|
"$LFSWHENCE/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz" &&
|
|
tar -xzf "git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz" \
|
|
-C "$CUSTOM_PATH" --strip-components=1 \
|
|
"git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs" &&
|
|
rm "git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz" ||
|
|
rm -f "$CUSTOM_PATH/git-lfs"
|
|
|
|
wget --quiet "$JGITWHENCE" --output-document="$CUSTOM_PATH/jgit" &&
|
|
chmod a+x "$CUSTOM_PATH/jgit" ||
|
|
rm -f "$CUSTOM_PATH/jgit"
|
|
;;
|
|
esac
|
|
;;
|
|
macos-*)
|
|
export HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1
|
|
# Uncomment this if you want to run perf tests:
|
|
# brew install gnu-time
|
|
brew link --force gettext
|
|
|
|
# Uncomment this block if you want to run `git p4` tests:
|
|
# mkdir -p "$CUSTOM_PATH"
|
|
# wget -q "$P4WHENCE/bin.macosx12arm64/helix-core-server.tgz" &&
|
|
# tar -xf helix-core-server.tgz -C "$CUSTOM_PATH" p4 p4d &&
|
|
# sudo xattr -d com.apple.quarantine "$CUSTOM_PATH/p4" "$CUSTOM_PATH/p4d" 2>/dev/null || true
|
|
# rm helix-core-server.tgz
|
|
|
|
case "$jobname" in
|
|
osx-meson)
|
|
brew install meson ninja pcre2
|
|
;;
|
|
esac
|
|
|
|
if test -n "$CC_PACKAGE"
|
|
then
|
|
BREW_PACKAGE=${CC_PACKAGE/-/@}
|
|
brew install "$BREW_PACKAGE"
|
|
brew link "$BREW_PACKAGE"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
case "$jobname" in
|
|
ClangFormat)
|
|
sudo apt-get -q -y install clang-format
|
|
;;
|
|
StaticAnalysis)
|
|
sudo apt-get -q -y install coccinelle libcurl4-openssl-dev libssl-dev \
|
|
libexpat-dev gettext make
|
|
;;
|
|
RustAnalysis)
|
|
sudo apt-get -q -y install rustup
|
|
rustup default stable
|
|
rustup component add clippy rustfmt
|
|
|
|
wget -q "$CARGO_MSRV_WHENCE" -O "cargo-msvc.tgz"
|
|
sudo mkdir -p "$CUSTOM_PATH"
|
|
sudo tar -xf "cargo-msvc.tgz" --strip-components=1 \
|
|
--directory "$CUSTOM_PATH" --wildcards "*/cargo-msrv"
|
|
sudo chmod a+x "$CUSTOM_PATH/cargo-msrv"
|
|
;;
|
|
sparse)
|
|
sudo apt-get -q -y install libssl-dev libcurl4-openssl-dev \
|
|
libexpat-dev gettext zlib1g-dev sparse
|
|
;;
|
|
Documentation)
|
|
sudo apt-get -q -y install asciidoc xmlto docbook-xsl-ns make
|
|
|
|
test -n "$ALREADY_HAVE_ASCIIDOCTOR" ||
|
|
sudo gem install --version 1.5.8 asciidoctor
|
|
sudo gem install concurrent-ruby
|
|
;;
|
|
esac
|
|
|
|
if type p4d >/dev/null 2>&1 && type p4 >/dev/null 2>&1
|
|
then
|
|
echo "$(tput setaf 6)Perforce Server Version$(tput sgr0)"
|
|
p4d -V
|
|
echo "$(tput setaf 6)Perforce Client Version$(tput sgr0)"
|
|
p4 -V
|
|
else
|
|
echo >&2 "::warning:: perforce wasn't installed, see above for clues why"
|
|
fi
|
|
|
|
if type git-lfs >/dev/null 2>&1
|
|
then
|
|
echo "$(tput setaf 6)Git-LFS Version$(tput sgr0)"
|
|
git-lfs version
|
|
else
|
|
echo >&2 "::warning:: git-lfs wasn't installed, see above for clues why"
|
|
fi
|
|
|
|
if type jgit >/dev/null 2>&1
|
|
then
|
|
echo "$(tput setaf 6)JGit Version$(tput sgr0)"
|
|
jgit version
|
|
else
|
|
echo >&2 "::warning:: JGit wasn't installed, see above for clues why"
|
|
fi
|
|
|
|
end_group "Install dependencies"
|