From d4089c7b7d9ea321532062b05e91d76840031daa Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 9 Oct 2026 08:48:14 +0200 Subject: [PATCH 1/6] fixup! README.md: Add a Windows-specific preamble We haven't been on Gitter in quite a while. Let's remove the misleading badge. Signed-off-by: Johannes Schindelin --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 026d5d85caef09..7b21b7814e9724 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ Git for Windows [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md) [![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/git-for-windows/git) [![Build status](https://github.com/git-for-windows/git/workflows/CI/badge.svg)](https://github.com/git-for-windows/git/actions?query=branch%3Amain+event%3Apush) -[![Join the chat at https://gitter.im/git-for-windows/git](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/git-for-windows/git?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) This is [Git for Windows](http://git-for-windows.github.io/), the Windows port of [Git](http://git-scm.com/). From afecfd9e8d0327f298d6b0d884fa939e3b94a49f Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 9 Oct 2026 08:49:49 +0200 Subject: [PATCH 2/6] fixup! README.md: Add a Windows-specific preamble MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apparently the badge URL has changed at some stage. I must have missed this, and I do not regularly look at that badge. But when I did, I saw that it says "failing" even though the CI runs were successful (I checked, after re-enabling Actions in git-for-windows/git that GitHub so helpfully "disabled [...] on this forked repository because of its Actions usage"). So I followed the guidance (or more correctly: **tried* to follow) at https://docs.github.com/en/actions/how-tos/monitor-workflows/add-a-status-badge, which kind of worked after not finding the promised `⋯` menu but realizing that there was a section on how to manually construct the URL. Signed-off-by: Johannes Schindelin --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b21b7814e9724..21ad1f39643478 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Git for Windows [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT.md) [![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/git-for-windows/git) -[![Build status](https://github.com/git-for-windows/git/workflows/CI/badge.svg)](https://github.com/git-for-windows/git/actions?query=branch%3Amain+event%3Apush) +[![Build status](https://github.com/git-for-windows/git/actions/workflows/main.yml/badge.svg)](https://github.com/git-for-windows/git/actions?query=branch%3Amain+event%3Apush) This is [Git for Windows](http://git-for-windows.github.io/), the Windows port of [Git](http://git-scm.com/). From 992304cc083b01b4c036353986e8d216de66d51f Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Thu, 15 Oct 2026 08:57:13 +0200 Subject: [PATCH 3/6] ci: switch away from unsupported i386/ubuntu image The linux32 job is used to exercise Git on a 32 bit platform. That job uses i386/ubuntu:20.04 though, and that version of Ubuntu is end of life nowadays. Furthermore, Ubuntu 20.04 is the last release that has support for 32 bit, so we cannot upgrade the image to a later version, either. Switch the job over to use i386/debian instead. Note that starting with Debian 13, support for i386 has been reduced [1]. But Debian still releases 32 bit Docker images for the latest release nowadays, so we will have coverage until at least 2030. [1]: https://www.debian.org/releases/trixie/release-notes/issues.en.html#i386-reduced-support Backported from a8dc3aa765f (ci: switch away from unsupported i386/ubuntu image, 2026-10-15). Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano Signed-off-by: Johannes Schindelin --- .github/workflows/main.yml | 3 +-- .gitlab-ci.yml | 3 +-- ci/install-dependencies.sh | 6 +----- ci/lib.sh | 2 +- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ed904415d6d821..b589b691617cd5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -436,9 +436,8 @@ jobs: cc: gcc - jobname: linux-musl-meson image: alpine:latest - # Supported until 2025-04-02. - jobname: linux32 - image: i386/ubuntu:20.04 + image: i386/debian:latest # A RHEL 8 compatible distro. Supported until 2029-05-31. - jobname: almalinux-8 image: almalinux:8 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cd6fd4a5047e87..85080cdf1fbd40 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -65,9 +65,8 @@ test:linux: CC: gcc - jobname: linux-musl-meson image: alpine:latest - # Supported until 2025-04-02. - jobname: linux32 - image: i386/ubuntu:20.04 + image: i386/debian:latest # A RHEL 8 compatible distro. Supported until 2029-05-31. - jobname: almalinux-8 image: almalinux:8 diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh index 8606e30779b7fe..ab12f1b7da8d82 100755 --- a/ci/install-dependencies.sh +++ b/ci/install-dependencies.sh @@ -39,7 +39,7 @@ fedora-*|almalinux-*) 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-*) +ubuntu-*|i386/debian-*|debian-*) # Required so that apt doesn't wait for user input on certain packages. export DEBIAN_FRONTEND=noninteractive @@ -48,10 +48,6 @@ ubuntu-*|i386/ubuntu-*|debian-*) SVN='libsvn-perl subversion' LANGUAGES='language-pack-is' ;; - i386/ubuntu-*) - SVN= - LANGUAGES='language-pack-is' - ;; *) SVN='libsvn-perl subversion' LANGUAGES='locales-all' diff --git a/ci/lib.sh b/ci/lib.sh index cad4802a55defb..06d0e4542b83be 100755 --- a/ci/lib.sh +++ b/ci/lib.sh @@ -262,7 +262,7 @@ then CI_OS_NAME=osx JOBS=$(nproc) ;; - *,almalinux:*|*,alpine:*|*,debian:*|*,fedora:*|*,ubuntu:*|*,i386/ubuntu:*) + *,almalinux:*|*,alpine:*|*,debian:*|*,fedora:*|*,ubuntu:*|*,i386/debian:*) CI_OS_NAME=linux JOBS=$(nproc) ;; From fdfbfa99e120678c0e323e3e0ed14544a7a4a894 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sun, 25 Oct 2026 21:04:29 +0100 Subject: [PATCH 4/6] ci: work around Debian 12's HTTP/2 authentication failures Since 00fa8502354 (ci: bump debian-11 job to debian-12, 2026-09-05), the `debian-12` job has intermittently failed t5559's half-auth clone with: curl 92 Stream error in the HTTP/2 framing layer Anonymous discovery succeeds, but the upload-pack POST requires authentication. Apache can return an early 401 and close the HTTP/2 stream before libcurl finishes sending the request body. Debian 12's curl 7.88.1 treats that closure as a transport error instead of allowing an authentication retry. Curl fixed this handling in 331b89a319d0 (http2: polish things around POST), included in 8.3.0: https://github.com/curl/curl/pull/11756 This did not happen before switching to Debian 12 because Debian 11 ships with libcurl 7.74.0-1.3+deb11u16, which does not have that bug, it was only introduced in cURL 7.88.0. Replacing the packaged libcurl with a modern build would defeat this job's purpose of testing older supported distributions. So let's simply skip the flaky test cases when a buggy libcurl version is detected. Backported from 64172cf117b (ci: work around Debian 12's HTTP/2 authentication failures, 2026-09-24) with e2d64bd041a (t5551: fix quoting in curl version bug prereq, 2026-10-05) squashed in. Assisted-by: GPT-6 Astra, GPT-6 Sol Helped-by: Jeff King Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano Signed-off-by: Johannes Schindelin --- t/t5551-http-fetch-smart.sh | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh index 805bec025c589f..1ec971cdbafdb4 100755 --- a/t/t5551-http-fetch-smart.sh +++ b/t/t5551-http-fetch-smart.sh @@ -17,6 +17,19 @@ fi test "$HTTP_PROTO" = "HTTP/2" && enable_http2 start_httpd +# The cURL version which Debian 12 ships (v7.88.1) can fail to retry +# authentication after an early HTTP/2 response. This bug was introduced +# in cURL v7.88.0 (8c762f5998 (http2: minor buffer and error path fixes, +# 2023-02-08)) and fixed in v8.3.0 (https://github.com/curl/curl/pull/11756). +test_lazy_prereq HAVE_CURL_HTTP2_BUG ' + test_have_prereq HTTP2 && + build_option libcurl | + awk -F. '\'' + ($1 == 7 && $2 >= 88) || ($1 == 8 && $2 < 3) { broken = 1 } + END { exit !broken } + '\'' +' + test_expect_success HTTP2 'enable client-side http/2' ' git config --global http.version HTTP/2 ' @@ -224,7 +237,8 @@ test_expect_success 'clone from auth-only-for-push repository' ' test_cmp expect actual ' -test_expect_success 'clone from auth-only-for-objects repository' ' +test_expect_success !HAVE_CURL_HTTP2_BUG \ + 'clone from auth-only-for-objects repository' ' echo two >expect && set_askpass user@host pass@host && git clone --bare "$HTTPD_URL/auth-fetch/smart/repo.git" half-auth && @@ -233,7 +247,8 @@ test_expect_success 'clone from auth-only-for-objects repository' ' test_cmp expect actual ' -test_expect_success 'no-op half-auth fetch does not require a password' ' +test_expect_success !HAVE_CURL_HTTP2_BUG \ + 'no-op half-auth fetch does not require a password' ' set_askpass wrong && # NEEDSWORK: When using HTTP(S), protocol v0 supports a "half-auth" From 932797258f03ece087f90a766c9e2cfcfe9a0ee2 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sun, 25 Oct 2026 21:10:17 +0100 Subject: [PATCH 5/6] install-dependencies: work around a permission problem When replacing `dirname`, elevation is required, otherwise the command will fail with: + ln -sfT /usr/bin/gnudirname /usr/bin/dirname ln: failed to create symbolic link '/usr/bin/dirname': Already exists as observed in https://github.com/git-for-windows/git/actions/runs/40223871341/job/121274294974?pr=6473#step:3:909 Signed-off-by: Johannes Schindelin --- ci/install-dependencies.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh index ab12f1b7da8d82..0e8c475c91630d 100755 --- a/ci/install-dependencies.sh +++ b/ci/install-dependencies.sh @@ -80,7 +80,7 @@ ubuntu-*|i386/debian-*|debian-*) # See . if test -x /usr/bin/gnudirname then - ln -sfT /usr/bin/gnudirname /usr/bin/dirname + sudo ln -sfT /usr/bin/gnudirname /usr/bin/dirname fi case "$distro" in From 581291682ad5a238c08c93d1f5bd4518382a3230 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sun, 25 Oct 2026 21:39:09 +0100 Subject: [PATCH 6/6] ci: pin linux32 to ubuntu-24.04 to restore networking The linux32 job fails DNS resolution before checkout because Docker 29.4.2's seccomp profile on Ubuntu 26.04 blocks socketcall in i386 glibc containers. Ubuntu 24.04 avoids this host-side regression. https://github.com/actions/runner-images/issues/14790 Assisted-by: GPT-6.1 Sol Signed-off-by: Johannes Schindelin --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b589b691617cd5..32735a9a3a1edb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -449,7 +449,9 @@ jobs: CC: ${{matrix.vector.cc}} CI_JOB_IMAGE: ${{matrix.vector.image}} CUSTOM_PATH: /custom - runs-on: ubuntu-latest + runs-on: >- + ${{ matrix.vector.jobname == 'linux32' + && 'ubuntu-24.04' || 'ubuntu-latest' }} container: image: ${{ matrix.vector.image }} options: ${{ github.repository_visibility == 'private' && '--pids-limit 16384 --ulimit nproc=16384:16384 --ulimit nofile=32768:32768' || '' }}