{"thread":{"id":"62088","subject":"[PATCH] ci: remove 'Upload failed tests' directories' step from linux32 jobs","startedAt":"2024-09-09T23:00:28Z","lastAt":"2024-09-13T16:17:49Z","messageCount":24,"participants":["Junio C Hamano","Jeff King","Patrick Steinhardt"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"502478","messageId":"xmqqy140o2kb.fsf@gitster.g","threadId":"62088","inReplyTo":null,"subject":"[PATCH] ci: remove 'Upload failed tests' directories' step from linux32 jobs","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2024-09-09T23:00:20Z","receivedAt":"2024-09-09T23:00:28Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Linux32 jobs seem to be getting:\n\n    Error: This request has been automatically failed because it uses a\n    deprecated version of `actions/upload-artifact: v1`. Learn more:\n    https://github.blog/changelog/2024-02-13-deprecation-notice-v1-and-v2-of-the-artifact-actions/\n\nbefore doing anything useful.  For now, disable the step.\n\nEver since actions/upload-artifact@v1 got disabled, mentioning the\noffending version of it seems to stop anything from happening.  At\nleast this should run the same build and test.\n\nSee\n\n    https://github.com/git/git/actions/runs/10780030750/job/29894867249\n\nfor example.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n .github/workflows/main.yml | 6 ------\n 1 file changed, 6 deletions(-)\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex 1ee0433acc..97f9b06310 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -365,12 +365,6 @@ jobs:\n       with:\n         name: failed-tests-${{matrix.vector.jobname}}\n         path: ${{env.FAILED_TEST_ARTIFACTS}}\n-    - name: Upload failed tests' directories\n-      if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname == 'linux32'\n-      uses: actions/upload-artifact@v1 # cannot be upgraded because Node.js Actions aren't supported in this container\n-      with:\n-        name: failed-tests-${{matrix.vector.jobname}}\n-        path: ${{env.FAILED_TEST_ARTIFACTS}}\n   static-analysis:\n     needs: ci-config\n     if: needs.ci-config.outputs.enabled == 'yes'\n-- \n2.46.0-701-g65fb39cb77\n\n"},{"id":"502650","messageId":"xmqqv7z14y9d.fsf@gitster.g","threadId":"62088","inReplyTo":"xmqqy140o2kb.fsf@gitster.g","subject":"Re: [PATCH] ci: remove 'Upload failed tests' directories' step from linux32 jobs","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2024-09-11T22:32:46Z","receivedAt":"2024-09-11T22:32:49Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> Linux32 jobs seem to be getting:\n>\n>     Error: This request has been automatically failed because it uses a\n>     deprecated version of `actions/upload-artifact: v1`. Learn more:\n>     https://github.blog/changelog/2024-02-13-deprecation-notice-v1-and-v2-of-the-artifact-actions/\n>\n> before doing anything useful.  For now, disable the step.\n>\n> Ever since actions/upload-artifact@v1 got disabled, mentioning the\n> offending version of it seems to stop anything from happening.  At\n> least this should run the same build and test.\n>\n> See\n>\n>     https://github.com/git/git/actions/runs/10780030750/job/29894867249\n>\n> for example.\n>\n> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n> ---\n>  .github/workflows/main.yml | 6 ------\n>  1 file changed, 6 deletions(-)\n\nI refrain from merging my own patches until somebody else at least\ncomments on them, but I'll make an exception and merge this to 'next',\nas a few \"container\" jobs _always_ fail to start otherwise.  At least\nwith the step removed, a run without any test failures would tell us\nthat these container tasks are OK, which is much better.\n\nIf somebody finds a better solution (i.e., a way to extract trash\ndirectories of failed tests', with actions/upload-artifact@v1), that\ncan be added later on top.\n\n> diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\n> index 1ee0433acc..97f9b06310 100644\n> --- a/.github/workflows/main.yml\n> +++ b/.github/workflows/main.yml\n> @@ -365,12 +365,6 @@ jobs:\n>        with:\n>          name: failed-tests-${{matrix.vector.jobname}}\n>          path: ${{env.FAILED_TEST_ARTIFACTS}}\n> -    - name: Upload failed tests' directories\n> -      if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname == 'linux32'\n> -      uses: actions/upload-artifact@v1 # cannot be upgraded because Node.js Actions aren't supported in this container\n> -      with:\n> -        name: failed-tests-${{matrix.vector.jobname}}\n> -        path: ${{env.FAILED_TEST_ARTIFACTS}}\n>    static-analysis:\n>      needs: ci-config\n>      if: needs.ci-config.outputs.enabled == 'yes'\n"},{"id":"502654","messageId":"20240912075631.GA11676@coredump.intra.peff.net","threadId":"62088","inReplyTo":"xmqqv7z14y9d.fsf@gitster.g","subject":"Re: [PATCH] ci: remove 'Upload failed tests' directories' step from linux32 jobs","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-12T07:56:31Z","receivedAt":"2024-09-12T07:56:41Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Wed, Sep 11, 2024 at 03:32:46PM -0700, Junio C Hamano wrote:\n\n> I refrain from merging my own patches until somebody else at least\n> comments on them, but I'll make an exception and merge this to 'next',\n> as a few \"container\" jobs _always_ fail to start otherwise.  At least\n> with the step removed, a run without any test failures would tell us\n> that these container tasks are OK, which is much better.\n> \n> If somebody finds a better solution (i.e., a way to extract trash\n> directories of failed tests', with actions/upload-artifact@v1), that\n> can be added later on top.\n\nI looked at this a bit last night, but as I didn't come up with any\nuseful solution, I refrained from replying. I was going to do a brief\nwrite-up of all of my dead ends, but after banging my head against the\nwall a bit more, I think I might actually have something. ;)\n\nI think a better path forward is to figure out how to keep up to date\nwith the upload-artifact action for all jobs. The root of the issue is\nthat all of the runner images are 64-bit, and the actions aren't\nprepared to run inside a 32-bit container. They're written in javascript\nand ship with their own node.js, but it doesn't work inside the\ncontainer due to dynamic linking issues.\n\nSo you probably saw a message like this:\n\n  exec /__e/node20/bin/node: no such file or directory\n\nin the job log. That funky path is the node binary that ships with the\naction, and the ENOENT is because it can't find the runtime linker.\n\n  Aside: I think the world would be a better place if they shipped a\n  totally static build of node, but there may be some complications\n  there. I found some discussion here:\n\n    https://github.com/actions/setup-node/issues/922\n    https://github.com/actions/runner/issues/2906\n\nThere are two options here, I think:\n\n  1. Instead of running everything inside the container, we can run the\n     actions outside (on the normal 64-bit runner image), and just do\n     the build/test steps inside the container by manually running\n     docker with the appropriate mounts.\n\n     This was the suggested here:\n\n       https://github.com/actions/runner/issues/1491#issuecomment-970418408\n\n     and apparently is how libgit2 works (I don't think it's too hard to\n     do so, but their infrastructure wasn't totally trivial).\n\n  2. After some tricky debugging via tmate[1], I found that we can\n     install the necessary libc bits within the container. But there's\n     another catch! They've moved to node20, which requires glibc2.28,\n     and the eight-year-old xenial release we're using is too old for\n     that. We have to move to Focal, which was released in 2020.\n\nIt feels like (1) is probably the more robust and flexible solution\noverall. But we can get to (2) a lot more easily from where we are now.\n\nDoing this:\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex cbdb677258..6b45dcad9d 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -347,8 +347,8 @@ jobs:\n           image: alpine\n           distro: alpine-latest\n         - jobname: linux32\n-          image: daald/ubuntu32:xenial\n-          distro: ubuntu32-16.04\n+          image: i386/ubuntu:focal\n+          distro: ubuntu32-20.04\n         - jobname: pedantic\n           image: fedora\n           distro: fedora-latest\n@@ -358,27 +358,21 @@ jobs:\n     runs-on: ubuntu-latest\n     container: ${{matrix.vector.image}}\n     steps:\n-    - uses: actions/checkout@v4\n-      if: matrix.vector.jobname != 'linux32'\n-    - uses: actions/checkout@v1 # cannot be upgraded because Node.js Actions aren't supported in this container\n+    - name: prepare libc6 for actions\n+      run: apt update && apt install -y libc6-amd64 lib64stdc++6\n       if: matrix.vector.jobname == 'linux32'\n+    - uses: actions/checkout@v4\n     - run: ci/install-dependencies.sh\n     - run: ci/run-build-and-tests.sh\n     - name: print test failures\n       if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n       run: ci/print-test-failures.sh\n     - name: Upload failed tests' directories\n-      if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname != 'linux32'\n+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n       uses: actions/upload-artifact@v4\n       with:\n         name: failed-tests-${{matrix.vector.jobname}}\n         path: ${{env.FAILED_TEST_ARTIFACTS}}\n-    - name: Upload failed tests' directories\n-      if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname == 'linux32'\n-      uses: actions/upload-artifact@v1 # cannot be upgraded because Node.js Actions aren't supported in this container\n-      with:\n-        name: failed-tests-${{matrix.vector.jobname}}\n-        path: ${{env.FAILED_TEST_ARTIFACTS}}\n   static-analysis:\n     needs: ci-config\n     if: needs.ci-config.outputs.enabled == 'yes'\n\nlets us eliminate the special cases and just work with the regular\nversions of each action.\n\nThat gets us through the checkout action. There does seem to be some\nfallout from using the more recent image.\n\nNow running \"linux32\" to change the machine personality in\nci/install-dependencies runs afoul of some seccomp restrictions.\nLoosening docker like this works:\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex 6b45dcad9d..ed66c0bea4 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -356,7 +356,9 @@ jobs:\n       jobname: ${{matrix.vector.jobname}}\n       distro: ${{matrix.vector.distro}}\n     runs-on: ubuntu-latest\n-    container: ${{matrix.vector.image}}\n+    container:\n+      image: ${{matrix.vector.image}}\n+      options: --security-opt=seccomp=unconfined\n     steps:\n     - name: prepare libc6 for actions\n       run: apt update && apt install -y libc6-amd64 lib64stdc++6\n\nbut it's not at all clear to me why we need to run \"linux32\" in the\nfirst place. Sure, it's a 64-bit kernel still (we're just in a userspace\ncontainer) but the system knows its 32-bit, and stuff like \"getconf\nLONG_BIT\" returns 32.\n\nSo another solution may be just:\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 2190c82313..8a8b832a35 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -60,11 +60,9 @@ ubuntu-*)\n \tchmod a+x \"$CUSTOM_PATH/jgit\"\n \t;;\n ubuntu32-*)\n-\tsudo linux32 --32bit i386 sh -c '\n-\t\tapt update >/dev/null &&\n-\t\tapt install -y build-essential libcurl4-openssl-dev \\\n-\t\t\tlibssl-dev libexpat-dev gettext python >/dev/null\n-\t'\n+\tsudo apt update >/dev/null &&\n+\tsudo apt install -y build-essential libcurl4-openssl-dev \\\n+\t\tlibssl-dev libexpat-dev gettext python >/dev/null\n \t;;\n macos-*)\n \texport HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1\n\nbut I'm worried I'm missing something, as it's been a while since I\npoked at multi-arch stuff.\n\nAfter that, we need this:\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 4781cd20bb..2190c82313 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -22,6 +22,9 @@ then\n \t}\n fi\n \n+# Required so that apt doesn't wait for user input on certain packages.\n+export DEBIAN_FRONTEND=noninteractive\n+\n case \"$distro\" in\n alpine-*)\n \tapk add --update shadow sudo build-base curl-dev openssl-dev expat-dev gettext \\\n@@ -34,8 +37,6 @@ fedora-*)\n \tdnf -yq install make gcc findutils diffutils perl python3 gettext zlib-devel expat-devel openssl-devel curl-devel pcre2-devel >/dev/null\n \t;;\n ubuntu-*)\n-\t# Required so that apt doesn't wait for user input on certain packages.\n-\texport DEBIAN_FRONTEND=noninteractive\n \n \tsudo apt-get -q update\n \tsudo apt-get -q -y install \\\n\nto cover the ubuntu32 job (I guess it just wasn't needed on the ancient\nimage we were using).\n\nAfter that, we get all the way to the actual build. Looks like it fails\nbecause we're missing zlib. Presumably that was included by default in\nthe old image, but not the new, and it needs to be added to package\ninstall list.\n\nTaken together, I suspect we could just treat \"ubuntu32\" the same as\n\"ubuntu\" in the ci/install-dependencies script. That would fix all of\nthose issues, and simplify the script. Assuming I'm not missing\nsomething.\n\n-Peff\n\n[1] Using tmate to diagnose failing \"node\" proved a bit tricky, because\n    the tmate action also uses node, so it fails, too! For future\n    reference, this is what I used to get it running manually:\n\n    - name: Setup tmate\n      if: always()\n      run: |\n        apt update && apt install -y xz-utils wget &&\n        v=tmate-2.4.0-static-linux-i386 &&\n        wget https://github.com/tmate-io/tmate/releases/download/2.4.0/$v.tar.xz &&\n        xzcat $v.tar.xz | tar xvvf - &&\n        cd $v &&\n        ./tmate -F\n"},{"id":"502655","messageId":"20240912080011.GA556677@coredump.intra.peff.net","threadId":"62088","inReplyTo":"20240912075631.GA11676@coredump.intra.peff.net","subject":"Re: [PATCH] ci: remove 'Upload failed tests' directories' step from linux32 jobs","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-12T08:00:11Z","receivedAt":"2024-09-12T08:00:12Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Thu, Sep 12, 2024 at 03:56:32AM -0400, Jeff King wrote:\n\n> > If somebody finds a better solution (i.e., a way to extract trash\n> > directories of failed tests', with actions/upload-artifact@v1), that\n> > can be added later on top.\n> \n> I looked at this a bit last night, but as I didn't come up with any\n> useful solution, I refrained from replying. I was going to do a brief\n> write-up of all of my dead ends, but after banging my head against the\n> wall a bit more, I think I might actually have something. ;)\n> \n> I think a better path forward is to figure out how to keep up to date\n> with the upload-artifact action for all jobs. The root of the issue is\n> that all of the runner images are 64-bit, and the actions aren't\n> prepared to run inside a 32-bit container. They're written in javascript\n> and ship with their own node.js, but it doesn't work inside the\n> container due to dynamic linking issues.\n\nSo obviously that other email ended up long and full of details. What I\nwas originally going to say was: \"OK, losing artifact uploads for\nlinux32 is not the end of the world, and it is important to unblock CI\nnow.\"\n\nBut I _think_ all of those details I sent add up to a possible patch\nseries. But it probably still makes sense to take your patch here, as it\nunblocks CI in the short term. And then I can build the bigger fix on\ntop of that (it touches the same spot, but in the end both end up\nremoving that special case).\n\n-Peff\n"},{"id":"502656","messageId":"20240912094238.GA589050@coredump.intra.peff.net","threadId":"62088","inReplyTo":"20240912080011.GA556677@coredump.intra.peff.net","subject":"[PATCH 0/4] make linux32 ci job work with recent actions","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-12T09:42:38Z","receivedAt":"2024-09-12T09:42:40Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Thu, Sep 12, 2024 at 04:00:11AM -0400, Jeff King wrote:\n\n> But I _think_ all of those details I sent add up to a possible patch\n> series. But it probably still makes sense to take your patch here, as it\n> unblocks CI in the short term. And then I can build the bigger fix on\n> top of that (it touches the same spot, but in the end both end up\n> removing that special case).\n\nOK, here's what I came up with. I built it on top of what you have\nqueued in jc/ci-upload-artifact-and-linux32, but it could be applied\nseparately (and it should merge OK).\n\nThe state after each patch should still pass, but of course each of them\ndepends on the ones before.\n\nThe big downside is discussed in patch 3: we are losing what is probably\nthe oldest platform we test against. I don't think it's fixable in this\napproach, though; the Actions node just won't run on such an old\nplatform. So the options are:\n\n  - hope that they eventually move to a true static node binary\n\n  - switch the design entirely; handle docker ourselves, run the actions\n    in the regular runner-image environment, and then just do the \"make\n    test\" bits inside the container\n\nIMHO what's in this series is an OK tradeoff (we are going from an\n8-year-old image to a 4-year-old one, but it gets older with each\npassing year). If somebody wants to pursue the alternate design above,\nbe my guest. I'm just trying not to fall into that rabbit hole myself. ;)\n\n  [1/4]: ci: drop run-docker scripts\n  [2/4]: ci: unify ubuntu and ubuntu32 dependencies\n  [3/4]: ci: use more recent linux32 image\n  [4/4]: ci: use regular action versions for linux32 job\n\n .github/workflows/main.yml | 12 +++----\n ci/install-dependencies.sh | 45 +++++++++++++++-----------\n ci/run-docker-build.sh     | 66 --------------------------------------\n ci/run-docker.sh           | 47 ---------------------------\n 4 files changed, 32 insertions(+), 138 deletions(-)\n delete mode 100755 ci/run-docker-build.sh\n delete mode 100755 ci/run-docker.sh\n\n-Peff\n"},{"id":"502657","messageId":"20240912094336.GA589828@coredump.intra.peff.net","threadId":"62088","inReplyTo":"20240912094238.GA589050@coredump.intra.peff.net","subject":"[PATCH 1/4] ci: drop run-docker scripts","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-12T09:43:36Z","receivedAt":"2024-09-12T09:43:37Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"We haven't used these scripts since 4a6e4b9602 (CI: remove Travis CI\nsupport, 2021-11-23), as the GitHub Actions config has support for\ndirectly running jobs within docker containers.\n\nIt's possible we might want to resurrect something like this in order to\nbe more agnostic to the CI platform. But it's not clear exactly what it\nwould look like. And in the meantime, it's just a maintenance burden as\nwe make changes to CI config, and is subject to bitrot. In fact it's\nalready broken; it references ci/install-docker-dependencies.sh, which\nwent away in 9cdeb34b96 (ci: merge scripts which install dependencies,\n2024-04-12).\n\nSigned-off-by: Jeff King <peff@peff.net>\n---\nI think this is worth doing even if we don't take the rest of the\npatches. But obviously it gets even more bit-rotted as the other patches\nchange the CI config file.\n\n ci/run-docker-build.sh | 66 ------------------------------------------\n ci/run-docker.sh       | 47 ------------------------------\n 2 files changed, 113 deletions(-)\n delete mode 100755 ci/run-docker-build.sh\n delete mode 100755 ci/run-docker.sh\n\ndiff --git a/ci/run-docker-build.sh b/ci/run-docker-build.sh\ndeleted file mode 100755\nindex 6cd832efb9..0000000000\n--- a/ci/run-docker-build.sh\n+++ /dev/null\n@@ -1,66 +0,0 @@\n-#!/bin/sh\n-#\n-# Build and test Git inside container\n-#\n-# Usage:\n-#   run-docker-build.sh <host-user-id>\n-#\n-\n-set -ex\n-\n-if test $# -ne 1 || test -z \"$1\"\n-then\n-\techo >&2 \"usage: run-docker-build.sh <host-user-id>\"\n-\texit 1\n-fi\n-\n-case \"$jobname\" in\n-linux32)\n-\tswitch_cmd=\"linux32 --32bit i386\"\n-\t;;\n-linux-musl)\n-\tswitch_cmd=\n-\tuseradd () { adduser -D \"$@\"; }\n-\t;;\n-*)\n-\texit 1\n-\t;;\n-esac\n-\n-\"${0%/*}/install-docker-dependencies.sh\"\n-\n-# If this script runs inside a docker container, then all commands are\n-# usually executed as root. Consequently, the host user might not be\n-# able to access the test output files.\n-# If a non 0 host user id is given, then create a user \"ci\" with that\n-# user id to make everything accessible to the host user.\n-HOST_UID=$1\n-if test $HOST_UID -eq 0\n-then\n-\t# Just in case someone does want to run the test suite as root.\n-\tCI_USER=root\n-else\n-\tCI_USER=ci\n-\tif test \"$(id -u $CI_USER 2>/dev/null)\" = $HOST_UID\n-\tthen\n-\t\techo \"user '$CI_USER' already exists with the requested ID $HOST_UID\"\n-\telse\n-\t\tuseradd -u $HOST_UID $CI_USER\n-\tfi\n-fi\n-\n-# Build and test\n-command $switch_cmd su -m -l $CI_USER -c \"\n-\tset -ex\n-\texport DEVELOPER='$DEVELOPER'\n-\texport DEFAULT_TEST_TARGET='$DEFAULT_TEST_TARGET'\n-\texport GIT_PROVE_OPTS='$GIT_PROVE_OPTS'\n-\texport GIT_TEST_OPTS='$GIT_TEST_OPTS'\n-\texport GIT_TEST_CLONE_2GB='$GIT_TEST_CLONE_2GB'\n-\texport MAKEFLAGS='$MAKEFLAGS'\n-\texport cache_dir='$cache_dir'\n-\tcd /usr/src/git\n-\ttest -n '$cache_dir' && ln -s '$cache_dir/.prove' t/.prove\n-\tmake\n-\tmake test\n-\"\ndiff --git a/ci/run-docker.sh b/ci/run-docker.sh\ndeleted file mode 100755\nindex af89d1624a..0000000000\n--- a/ci/run-docker.sh\n+++ /dev/null\n@@ -1,47 +0,0 @@\n-#!/bin/sh\n-#\n-# Download and run Docker image to build and test Git\n-#\n-\n-. ${0%/*}/lib.sh\n-\n-case \"$jobname\" in\n-linux32)\n-\tCI_CONTAINER=\"daald/ubuntu32:xenial\"\n-\t;;\n-linux-musl)\n-\tCI_CONTAINER=alpine\n-\t;;\n-*)\n-\texit 1\n-\t;;\n-esac\n-\n-docker pull \"$CI_CONTAINER\"\n-\n-# Use the following command to debug the docker build locally:\n-# <host-user-id> must be 0 if podman is used as drop-in replacement for docker\n-# $ docker run -itv \"${PWD}:/usr/src/git\" --entrypoint /bin/sh \"$CI_CONTAINER\"\n-# root@container:/# export jobname=<jobname>\n-# root@container:/# /usr/src/git/ci/run-docker-build.sh <host-user-id>\n-\n-container_cache_dir=/tmp/container-cache\n-\n-docker run \\\n-\t--interactive \\\n-\t--env DEVELOPER \\\n-\t--env DEFAULT_TEST_TARGET \\\n-\t--env GIT_PROVE_OPTS \\\n-\t--env GIT_TEST_OPTS \\\n-\t--env GIT_TEST_CLONE_2GB \\\n-\t--env MAKEFLAGS \\\n-\t--env jobname \\\n-\t--env cache_dir=\"$container_cache_dir\" \\\n-\t--volume \"${PWD}:/usr/src/git\" \\\n-\t--volume \"$cache_dir:$container_cache_dir\" \\\n-\t\"$CI_CONTAINER\" \\\n-\t/usr/src/git/ci/run-docker-build.sh $(id -u $USER)\n-\n-check_unignored_build_artifacts\n-\n-save_good_tree\n-- \n2.46.0.918.gab30941bff\n\n"},{"id":"502658","messageId":"20240912094537.GB589828@coredump.intra.peff.net","threadId":"62088","inReplyTo":"20240912094238.GA589050@coredump.intra.peff.net","subject":"[PATCH 2/4] ci: unify ubuntu and ubuntu32 dependencies","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-12T09:45:37Z","receivedAt":"2024-09-12T09:45:38Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"The script to install dependencies has two separate entries for 32-bit\nand 64-bit Ubuntu systems. This increases the maintenance burden since\nboth should need roughly the same packages.\n\nThat hasn't been too bad so far because we've stayed on the same 32-bit\nimage since 2017. Trying to move to a newer image revealed several\nproblems with the linux32 job:\n\n  - newer images complain about using \"linux32 --32bit i386\", due to\n    seccomp restrictions. We can loosen these with a docker option, but\n    I don't think running it is even doing anything. We use it only for\n    pretending to \"apt\" that we're on a 32-bit machine, but inside the\n    container image apt is already configured as a 32-bit system (even\n    though the kernel outside the container is obviously 64-bit).  Using\n    the same apt invocation for both architectures just gets rid of this\n    call entirely.\n\n  - we set DEBIAN_FRONTEND to avoid hanging on packages that ask the\n    user questions. This wasn't a problem on the old image, but it is on\n    newer ones. The 64-bit stanza handles this already.\n\n    As a bonus, the 64-bit stanza uses \"apt -q\" instead of redirecting\n    output to /dev/null. This would have saved me a lot of debugging\n    time trying to figure out why it was hanging. :)\n\n  - the old image seems to have zlib-dev installed by default, but newer\n    ones do not.\n\nIn addition, there were probably many tests being skipped on the 32-bit\nbuild because we didn't have support packages installed (e.g., gpg). Now\nwe'll run them.\n\nWe do need to keep some parts split off just for 64-bit systems: our p4\nand lfs installs reference x86_64/amd64 binaries. The downloaded jgit\nshould work in theory, since it's just a jar file embedded in a shell\nscript that relies on the system java. But the system java in our image\nis too old, so I've left it as 64-bit only for now.\n\nSigned-off-by: Jeff King <peff@peff.net>\n---\nPatch is easier to read with \"-w\".\n\n ci/install-dependencies.sh | 34 ++++++++++++++++------------------\n 1 file changed, 16 insertions(+), 18 deletions(-)\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 4781cd20bb..00cb7df67a 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -33,7 +33,7 @@ fedora-*)\n \tdnf -yq update >/dev/null &&\n \tdnf -yq install make gcc findutils diffutils perl python3 gettext zlib-devel expat-devel openssl-devel curl-devel pcre2-devel >/dev/null\n \t;;\n-ubuntu-*)\n+ubuntu-*|ubuntu32-*)\n \t# Required so that apt doesn't wait for user input on certain packages.\n \texport DEBIAN_FRONTEND=noninteractive\n \n@@ -45,25 +45,23 @@ ubuntu-*)\n \t\tlibemail-valid-perl libio-pty-perl libio-socket-ssl-perl libnet-smtp-ssl-perl libdbd-sqlite3-perl libcgi-pm-perl \\\n \t\t${CC_PACKAGE:-${CC:-gcc}} $PYTHON_PACKAGE\n \n-\tmkdir --parents \"$CUSTOM_PATH\"\n-\twget --quiet --directory-prefix=\"$CUSTOM_PATH\" \\\n-\t\t\"$P4WHENCE/bin.linux26x86_64/p4d\" \"$P4WHENCE/bin.linux26x86_64/p4\"\n-\tchmod a+x \"$CUSTOM_PATH/p4d\" \"$CUSTOM_PATH/p4\"\n+\tcase \"$distro\" in\n+\tubuntu-*)\n+\t\tmkdir --parents \"$CUSTOM_PATH\"\n \n-\twget --quiet \"$LFSWHENCE/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\n-\ttar -xzf \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\" \\\n-\t\t-C \"$CUSTOM_PATH\" --strip-components=1 \"git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs\"\n-\trm \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\n+\t\twget --quiet --directory-prefix=\"$CUSTOM_PATH\" \\\n+\t\t\t\"$P4WHENCE/bin.linux26x86_64/p4d\" \"$P4WHENCE/bin.linux26x86_64/p4\"\n+\t\tchmod a+x \"$CUSTOM_PATH/p4d\" \"$CUSTOM_PATH/p4\"\n \n-\twget --quiet \"$JGITWHENCE\" --output-document=\"$CUSTOM_PATH/jgit\"\n-\tchmod a+x \"$CUSTOM_PATH/jgit\"\n-\t;;\n-ubuntu32-*)\n-\tsudo linux32 --32bit i386 sh -c '\n-\t\tapt update >/dev/null &&\n-\t\tapt install -y build-essential libcurl4-openssl-dev \\\n-\t\t\tlibssl-dev libexpat-dev gettext python >/dev/null\n-\t'\n+\t\twget --quiet \"$LFSWHENCE/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\n+\t\ttar -xzf \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\" \\\n+\t\t\t-C \"$CUSTOM_PATH\" --strip-components=1 \"git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs\"\n+\t\trm \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\n+\n+\t\twget --quiet \"$JGITWHENCE\" --output-document=\"$CUSTOM_PATH/jgit\"\n+\t\tchmod a+x \"$CUSTOM_PATH/jgit\"\n+\t\t;;\n+\tesac\n \t;;\n macos-*)\n \texport HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1\n-- \n2.46.0.918.gab30941bff\n\n"},{"id":"502660","messageId":"20240912094730.GC589828@coredump.intra.peff.net","threadId":"62088","inReplyTo":"20240912094238.GA589050@coredump.intra.peff.net","subject":"[PATCH 3/4] ci: use more recent linux32 image","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-12T09:47:30Z","receivedAt":"2024-09-12T09:47:31Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"The Xenial image we're using was released more than 8 years ago. This is\na problem for using some recent GitHub Actions scripts, as they require\nNode.js 20, and all of the binaries they ship need glibc 2.28 or later.\nWe're not using them yet, but moving forward prepares us for a future\npatch which will.\n\nXenial was actually the last official 32-bit Ubuntu release, but you can\nstill find i386 images for more recent releases. This patch uses Focal,\nwhich was released in 2020 (and is the oldest one with glibc 2.28).\n\nThere are two small downsides here:\n\n  - while Xenial is pretty old, it is still in LTS support until April\n    2026. So there's probably some value in testing with such an old\n    system, and we're losing that.\n\n  - there are no i386 subversion packages in the Focal repository. So we\n    won't be able to test that (OTOH, we had never tested it until the\n    previous patch which unified the 32/64-bit dependency code).\n\nSigned-off-by: Jeff King <peff@peff.net>\n---\n .github/workflows/main.yml |  4 ++--\n ci/install-dependencies.sh | 11 ++++++++++-\n 2 files changed, 12 insertions(+), 3 deletions(-)\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex 97f9b06310..db8e8f75a4 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -339,8 +339,8 @@ jobs:\n           image: alpine\n           distro: alpine-latest\n         - jobname: linux32\n-          image: daald/ubuntu32:xenial\n-          distro: ubuntu32-16.04\n+          image: i386/ubuntu:focal\n+          distro: ubuntu32-20.04\n         - jobname: pedantic\n           image: fedora\n           distro: fedora-latest\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 00cb7df67a..735ee6f463 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -37,9 +37,18 @@ ubuntu-*|ubuntu32-*)\n \t# Required so that apt doesn't wait for user input on certain packages.\n \texport DEBIAN_FRONTEND=noninteractive\n \n+\tcase \"$distro\" in\n+\tubuntu-*)\n+\t\tSVN='libsvn-perl subversion'\n+\t\t;;\n+\t*)\n+\t\tSVN=\n+\t\t;;\n+\tesac\n+\n \tsudo apt-get -q update\n \tsudo apt-get -q -y install \\\n-\t\tlanguage-pack-is libsvn-perl apache2 cvs cvsps git gnupg subversion \\\n+\t\tlanguage-pack-is apache2 cvs cvsps git gnupg $SVN \\\n \t\tmake libssl-dev libcurl4-openssl-dev libexpat-dev wget sudo default-jre \\\n \t\ttcl tk gettext zlib1g-dev perl-modules liberror-perl libauthen-sasl-perl \\\n \t\tlibemail-valid-perl libio-pty-perl libio-socket-ssl-perl libnet-smtp-ssl-perl libdbd-sqlite3-perl libcgi-pm-perl \\\n-- \n2.46.0.918.gab30941bff\n\n"},{"id":"502661","messageId":"20240912094841.GD589828@coredump.intra.peff.net","threadId":"62088","inReplyTo":"20240912094238.GA589050@coredump.intra.peff.net","subject":"[PATCH 4/4] ci: use regular action versions for linux32 job","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-12T09:48:41Z","receivedAt":"2024-09-12T09:48:43Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"The linux32 job runs inside a docker container with a 32-bit libc, etc.\nThis breaks any GitHub Actions scripts that are implemented in\njavascript, because they ship with their own 64-bit version of Node.js\nthat's dynamically linked. They'll fail with a message like:\n\n    exec /__e/node20/bin/node: no such file or directory\n\nbecause they can't find the runtime linker.\n\nThis hasn't been a problem until recently because we special-case older,\nnon-javascript versions of these actions for the linux32 job. But it\nrecently became an issue when our old version of actions/upload-artifact\nwas deprecated, causing the job to fail. We worked around that in\n90f2c7240c (ci: remove 'Upload failed tests' directories' step from\nlinux32 jobs, 2024-09-09), but it meant a loss of functionality for that\njob. And we may eventually run into the same deprecation problem with\nactions/checkout, which can't just be removed.\n\nWe can solve the linking issue by installing the 64-bit libc and stdc++\npackages before doing anything else. Coupled with the switch to a more\nrecent image in the previous patch, that lets us remove the\nspecial-casing of the action scripts entirely.\n\nSigned-off-by: Jeff King <peff@peff.net>\n---\n .github/workflows/main.yml | 8 ++++----\n 1 file changed, 4 insertions(+), 4 deletions(-)\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex db8e8f75a4..916a64b673 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -350,17 +350,17 @@ jobs:\n     runs-on: ubuntu-latest\n     container: ${{matrix.vector.image}}\n     steps:\n-    - uses: actions/checkout@v4\n-      if: matrix.vector.jobname != 'linux32'\n-    - uses: actions/checkout@v1 # cannot be upgraded because Node.js Actions aren't supported in this container\n+    - name: prepare libc6 for actions\n       if: matrix.vector.jobname == 'linux32'\n+      run: apt -q update && apt -q -y install libc6-amd64 lib64stdc++6\n+    - uses: actions/checkout@v4\n     - run: ci/install-dependencies.sh\n     - run: ci/run-build-and-tests.sh\n     - name: print test failures\n       if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n       run: ci/print-test-failures.sh\n     - name: Upload failed tests' directories\n-      if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname != 'linux32'\n+      if: failure() && env.FAILED_TEST_ARTIFACTS != ''\n       uses: actions/upload-artifact@v4\n       with:\n         name: failed-tests-${{matrix.vector.jobname}}\n-- \n2.46.0.918.gab30941bff\n"},{"id":"502668","messageId":"ZuLFODJB3Ak8Y2WK@pks.im","threadId":"62088","inReplyTo":"20240912094336.GA589828@coredump.intra.peff.net","subject":"Re: [PATCH 1/4] ci: drop run-docker scripts","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-09-12T10:40:56Z","receivedAt":"2024-09-12T10:41:01Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Sep 12, 2024 at 05:43:36AM -0400, Jeff King wrote:\n> We haven't used these scripts since 4a6e4b9602 (CI: remove Travis CI\n> support, 2021-11-23), as the GitHub Actions config has support for\n> directly running jobs within docker containers.\n> \n> It's possible we might want to resurrect something like this in order to\n> be more agnostic to the CI platform. But it's not clear exactly what it\n> would look like. And in the meantime, it's just a maintenance burden as\n> we make changes to CI config, and is subject to bitrot. In fact it's\n> already broken; it references ci/install-docker-dependencies.sh, which\n> went away in 9cdeb34b96 (ci: merge scripts which install dependencies,\n> 2024-04-12).\n> \n> Signed-off-by: Jeff King <peff@peff.net>\n> ---\n> I think this is worth doing even if we don't take the rest of the\n> patches. But obviously it gets even more bit-rotted as the other patches\n> change the CI config file.\n\nI initially wanted to use them for GitLab CI, but eventually I figured\nthat it makes way more sense to just merge the setup instructions we\nhave into a single, unified script. Docker or not doesn't really matter\nall that much when you want to install dependencies. What matters more\nis the actual platform you're on, but that is independent of Docker\nanyway.\n\nThe only remaining usecase I could see for these is to run CI-like\nbuilds on a developer's machine. But the fact that these scripts don't\nwork at all anymore and have started to bitrot already demonstrates that\nnobody does seem to do that in the first place.\n\nSo I think removing them is the right thing to do.\n\nPatrick\n"},{"id":"502669","messageId":"ZuLFPI2miN0_667m@pks.im","threadId":"62088","inReplyTo":"20240912094537.GB589828@coredump.intra.peff.net","subject":"Re: [PATCH 2/4] ci: unify ubuntu and ubuntu32 dependencies","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-09-12T10:41:00Z","receivedAt":"2024-09-12T10:41:02Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Sep 12, 2024 at 05:45:37AM -0400, Jeff King wrote:\n> diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\n> index 4781cd20bb..00cb7df67a 100755\n> --- a/ci/install-dependencies.sh\n> +++ b/ci/install-dependencies.sh\n> @@ -33,7 +33,7 @@ fedora-*)\n>  \tdnf -yq update >/dev/null &&\n>  \tdnf -yq install make gcc findutils diffutils perl python3 gettext zlib-devel expat-devel openssl-devel curl-devel pcre2-devel >/dev/null\n>  \t;;\n> -ubuntu-*)\n> +ubuntu-*|ubuntu32-*)\n>  \t# Required so that apt doesn't wait for user input on certain packages.\n>  \texport DEBIAN_FRONTEND=noninteractive\n>  \n> @@ -45,25 +45,23 @@ ubuntu-*)\n>  \t\tlibemail-valid-perl libio-pty-perl libio-socket-ssl-perl libnet-smtp-ssl-perl libdbd-sqlite3-perl libcgi-pm-perl \\\n>  \t\t${CC_PACKAGE:-${CC:-gcc}} $PYTHON_PACKAGE\n>  \n> -\tmkdir --parents \"$CUSTOM_PATH\"\n> -\twget --quiet --directory-prefix=\"$CUSTOM_PATH\" \\\n> -\t\t\"$P4WHENCE/bin.linux26x86_64/p4d\" \"$P4WHENCE/bin.linux26x86_64/p4\"\n> -\tchmod a+x \"$CUSTOM_PATH/p4d\" \"$CUSTOM_PATH/p4\"\n> +\tcase \"$distro\" in\n> +\tubuntu-*)\n> +\t\tmkdir --parents \"$CUSTOM_PATH\"\n>  \n> -\twget --quiet \"$LFSWHENCE/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\n> -\ttar -xzf \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\" \\\n> -\t\t-C \"$CUSTOM_PATH\" --strip-components=1 \"git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs\"\n> -\trm \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\n> +\t\twget --quiet --directory-prefix=\"$CUSTOM_PATH\" \\\n> +\t\t\t\"$P4WHENCE/bin.linux26x86_64/p4d\" \"$P4WHENCE/bin.linux26x86_64/p4\"\n> +\t\tchmod a+x \"$CUSTOM_PATH/p4d\" \"$CUSTOM_PATH/p4\"\n>  \n> -\twget --quiet \"$JGITWHENCE\" --output-document=\"$CUSTOM_PATH/jgit\"\n> -\tchmod a+x \"$CUSTOM_PATH/jgit\"\n> -\t;;\n> -ubuntu32-*)\n> -\tsudo linux32 --32bit i386 sh -c '\n> -\t\tapt update >/dev/null &&\n> -\t\tapt install -y build-essential libcurl4-openssl-dev \\\n> -\t\t\tlibssl-dev libexpat-dev gettext python >/dev/null\n> -\t'\n> +\t\twget --quiet \"$LFSWHENCE/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\n> +\t\ttar -xzf \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\" \\\n> +\t\t\t-C \"$CUSTOM_PATH\" --strip-components=1 \"git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs\"\n> +\t\trm \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\n> +\n> +\t\twget --quiet \"$JGITWHENCE\" --output-document=\"$CUSTOM_PATH/jgit\"\n> +\t\tchmod a+x \"$CUSTOM_PATH/jgit\"\n> +\t\t;;\n> +\tesac\n>  \t;;\n\nOkay. All of the build dependencies retrieved via apt are the same\nacross two platforms now, but the dependencies we fetch and install\nmanually are 64-bit specific. So overall we get more coverage with less\nduplication. Nice.\n\nPatrick\n"},{"id":"502670","messageId":"ZuLFPxsDiMB9UBhF@pks.im","threadId":"62088","inReplyTo":"20240912094730.GC589828@coredump.intra.peff.net","subject":"Re: [PATCH 3/4] ci: use more recent linux32 image","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-09-12T10:41:03Z","receivedAt":"2024-09-12T10:41:05Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Sep 12, 2024 at 05:47:30AM -0400, Jeff King wrote:\n> diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\n> index 97f9b06310..db8e8f75a4 100644\n> --- a/.github/workflows/main.yml\n> +++ b/.github/workflows/main.yml\n> @@ -339,8 +339,8 @@ jobs:\n>            image: alpine\n>            distro: alpine-latest\n>          - jobname: linux32\n> -          image: daald/ubuntu32:xenial\n> -          distro: ubuntu32-16.04\n> +          image: i386/ubuntu:focal\n> +          distro: ubuntu32-20.04\n>          - jobname: pedantic\n>            image: fedora\n>            distro: fedora-latest\n\nWe could counteract the loss of testing against Ubuntu 16.04 by adding\nit to GitLab CI instead:\n\n    diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml\n    index 2589098eff7..80b1668ebeb 100644\n    --- a/.gitlab-ci.yml\n    +++ b/.gitlab-ci.yml\n    @@ -25,6 +25,9 @@ test:linux:\n           fi\n       parallel:\n         matrix:\n    +      - jobname: linux-old\n    +        image: ubuntu:16.04\n    +        CC: gcc\n           - jobname: linux-sha256\n             image: ubuntu:latest\n             CC: clang\n\nI didn't test it, but it should work alright. GitLab doesn't put any\nadditional executables into the container, so it is entirely self\ncontained. Let me know in case you think this is a good idea and I'll\nrun a CI pipeline against this change.\n\nIt's not 32 bit, but at least we continue to verify that Git builds\nagainst old distros.\n\nPatrick\n"},{"id":"502683","messageId":"20240912112242.GA622312@coredump.intra.peff.net","threadId":"62088","inReplyTo":"ZuLFPxsDiMB9UBhF@pks.im","subject":"Re: [PATCH 3/4] ci: use more recent linux32 image","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-12T11:22:42Z","receivedAt":"2024-09-12T11:22:44Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Thu, Sep 12, 2024 at 12:41:03PM +0200, Patrick Steinhardt wrote:\n\n> On Thu, Sep 12, 2024 at 05:47:30AM -0400, Jeff King wrote:\n> > diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\n> > index 97f9b06310..db8e8f75a4 100644\n> > --- a/.github/workflows/main.yml\n> > +++ b/.github/workflows/main.yml\n> > @@ -339,8 +339,8 @@ jobs:\n> >            image: alpine\n> >            distro: alpine-latest\n> >          - jobname: linux32\n> > -          image: daald/ubuntu32:xenial\n> > -          distro: ubuntu32-16.04\n> > +          image: i386/ubuntu:focal\n> > +          distro: ubuntu32-20.04\n> >          - jobname: pedantic\n> >            image: fedora\n> >            distro: fedora-latest\n> \n> We could counteract the loss of testing against Ubuntu 16.04 by adding\n> it to GitLab CI instead:\n> \n>     diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml\n>     index 2589098eff7..80b1668ebeb 100644\n>     --- a/.gitlab-ci.yml\n>     +++ b/.gitlab-ci.yml\n>     @@ -25,6 +25,9 @@ test:linux:\n>            fi\n>        parallel:\n>          matrix:\n>     +      - jobname: linux-old\n>     +        image: ubuntu:16.04\n>     +        CC: gcc\n>            - jobname: linux-sha256\n>              image: ubuntu:latest\n>              CC: clang\n> \n> I didn't test it, but it should work alright. GitLab doesn't put any\n> additional executables into the container, so it is entirely self\n> contained. Let me know in case you think this is a good idea and I'll\n> run a CI pipeline against this change.\n\nThat seems like a good thing to do to mitigate the loss. In a perfect\nworld we'd have all platforms running all the tests, just because it\nhelps align the work between finding and fixing (i.e., I might introduce\na bug and not even know it is failing, and you have to spend time\nreporting it to me). But the world isn't perfect, so finding out about\nmy bug _eventually_ is OK. :)\n\n> It's not 32 bit, but at least we continue to verify that Git builds\n> against old distros.\n\nI think that's OK. AFAICT this was just another case of overloading CI\njobs with multiple independent variables (and leaving people to wonder\nif any failure was because of the 32-bit nature, or because it was old).\nHaving a dedicated \"old\" job makes that more obvious.\n\n-Peff\n"},{"id":"502707","messageId":"ZuLWHBvrT31KVd9W@pks.im","threadId":"62088","inReplyTo":"20240912112242.GA622312@coredump.intra.peff.net","subject":"Re: [PATCH 3/4] ci: use more recent linux32 image","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-09-12T11:53:00Z","receivedAt":"2024-09-12T11:53:03Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Sep 12, 2024 at 07:22:42AM -0400, Jeff King wrote:\n> On Thu, Sep 12, 2024 at 12:41:03PM +0200, Patrick Steinhardt wrote:\n> \n> > On Thu, Sep 12, 2024 at 05:47:30AM -0400, Jeff King wrote:\n> > > diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\n> > > index 97f9b06310..db8e8f75a4 100644\n> > > --- a/.github/workflows/main.yml\n> > > +++ b/.github/workflows/main.yml\n> > > @@ -339,8 +339,8 @@ jobs:\n> > >            image: alpine\n> > >            distro: alpine-latest\n> > >          - jobname: linux32\n> > > -          image: daald/ubuntu32:xenial\n> > > -          distro: ubuntu32-16.04\n> > > +          image: i386/ubuntu:focal\n> > > +          distro: ubuntu32-20.04\n> > >          - jobname: pedantic\n> > >            image: fedora\n> > >            distro: fedora-latest\n> > \n> > We could counteract the loss of testing against Ubuntu 16.04 by adding\n> > it to GitLab CI instead:\n> > \n> >     diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml\n> >     index 2589098eff7..80b1668ebeb 100644\n> >     --- a/.gitlab-ci.yml\n> >     +++ b/.gitlab-ci.yml\n> >     @@ -25,6 +25,9 @@ test:linux:\n> >            fi\n> >        parallel:\n> >          matrix:\n> >     +      - jobname: linux-old\n> >     +        image: ubuntu:16.04\n> >     +        CC: gcc\n> >            - jobname: linux-sha256\n> >              image: ubuntu:latest\n> >              CC: clang\n> > \n> > I didn't test it, but it should work alright. GitLab doesn't put any\n> > additional executables into the container, so it is entirely self\n> > contained. Let me know in case you think this is a good idea and I'll\n> > run a CI pipeline against this change.\n> \n> That seems like a good thing to do to mitigate the loss. In a perfect\n> world we'd have all platforms running all the tests, just because it\n> helps align the work between finding and fixing (i.e., I might introduce\n> a bug and not even know it is failing, and you have to spend time\n> reporting it to me). But the world isn't perfect, so finding out about\n> my bug _eventually_ is OK. :)\n\nFor reference, [here] is the merge request. The [first] pipeline failed\nbecause Java is too old, as you also mention in one of the preceding\ncommits:\n\n    JGit Version\n    Exception in thread \"main\" java.lang.UnsupportedClassVersionError: org/eclipse/jgit/pgm/Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0\n        at java.lang.ClassLoader.defineClass1(Native Method)\n        at java.lang.ClassLoader.defineClass(ClassLoader.java:756)\n        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)\n        at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)\n        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)\n        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)\n        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)\n        at java.security.AccessController.doPrivileged(Native Method)\n        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)\n        at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)\n        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)\n        at java.lang.Class.forName0(Native Method)\n        at java.lang.Class.forName(Class.java:348)\n        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)\n        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)\n        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)\n        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)\n\nI've thus added the following hunk:\n\n    diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\n    index 735ee6f4639..c85b1f55700 100755\n    --- a/ci/install-dependencies.sh\n    +++ b/ci/install-dependencies.sh\n    @@ -55,6 +55,11 @@ ubuntu-*|ubuntu32-*)\n                    ${CC_PACKAGE:-${CC:-gcc}} $PYTHON_PACKAGE\n\n            case \"$distro\" in\n    +       ubuntu-16.04)\n    +               # Does not support JGit, but we also don't really care about\n    +               # the others. We rather care whether Git still compiles and\n    +               # runs fine overall.\n    +               ;;\n            ubuntu-*)\n                    mkdir --parents \"$CUSTOM_PATH\"\n\nAnd with that the [fixed] pipeline builds and executes our tests just\nfine. I didn't wait for tests to finish though.\n\nPatrick\n\n[here]: https://gitlab.com/gitlab-org/git/-/merge_requests/210\n[first]: https://gitlab.com/gitlab-org/git/-/jobs/7808775485\n[fixed]: https://gitlab.com/gitlab-org/git/-/jobs/7808836999\n"},{"id":"502708","messageId":"ZuLi4x664v8dbm2i@pks.im","threadId":"62088","inReplyTo":"ZuLWHBvrT31KVd9W@pks.im","subject":"Re: [PATCH 3/4] ci: use more recent linux32 image","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-09-12T12:47:38Z","receivedAt":"2024-09-12T12:47:43Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Sep 12, 2024 at 01:53:00PM +0200, Patrick Steinhardt wrote:\n> On Thu, Sep 12, 2024 at 07:22:42AM -0400, Jeff King wrote:\n> > On Thu, Sep 12, 2024 at 12:41:03PM +0200, Patrick Steinhardt wrote:\n> And with that the [fixed] pipeline builds and executes our tests just\n> fine. I didn't wait for tests to finish though.\n> \n> Patrick\n> \n> [here]: https://gitlab.com/gitlab-org/git/-/merge_requests/210\n> [first]: https://gitlab.com/gitlab-org/git/-/jobs/7808775485\n> [fixed]: https://gitlab.com/gitlab-org/git/-/jobs/7808836999\n\nMost of the tests pass, except for t5559. Seems like it doesn't have\nmod_http2. Maybe its Apache version is too old, or it needs to be\ninstalled separately.\n\nPatrick\n"},{"id":"502712","messageId":"xmqqfrq44q3w.fsf@gitster.g","threadId":"62088","inReplyTo":"20240912094238.GA589050@coredump.intra.peff.net","subject":"Re: [PATCH 0/4] make linux32 ci job work with recent actions","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2024-09-12T19:41:07Z","receivedAt":"2024-09-12T19:41:16Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jeff King <peff@peff.net> writes:\n\n> OK, here's what I came up with. I built it on top of what you have\n> queued in jc/ci-upload-artifact-and-linux32, but it could be applied\n> separately (and it should merge OK).\n\nWill queue.\n\nLet's target to merge this down to 'maint'; sooner the better.\n\nThanks.\n\n"},{"id":"502728","messageId":"20240913045510.GA1194807@coredump.intra.peff.net","threadId":"62088","inReplyTo":"ZuLi4x664v8dbm2i@pks.im","subject":"Re: [PATCH 3/4] ci: use more recent linux32 image","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-13T04:55:10Z","receivedAt":"2024-09-13T04:55:12Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Thu, Sep 12, 2024 at 02:47:38PM +0200, Patrick Steinhardt wrote:\n\n> On Thu, Sep 12, 2024 at 01:53:00PM +0200, Patrick Steinhardt wrote:\n> > On Thu, Sep 12, 2024 at 07:22:42AM -0400, Jeff King wrote:\n> > > On Thu, Sep 12, 2024 at 12:41:03PM +0200, Patrick Steinhardt wrote:\n> > And with that the [fixed] pipeline builds and executes our tests just\n> > fine. I didn't wait for tests to finish though.\n> > \n> > Patrick\n> > \n> > [here]: https://gitlab.com/gitlab-org/git/-/merge_requests/210\n> > [first]: https://gitlab.com/gitlab-org/git/-/jobs/7808775485\n> > [fixed]: https://gitlab.com/gitlab-org/git/-/jobs/7808836999\n> \n> Most of the tests pass, except for t5559. Seems like it doesn't have\n> mod_http2. Maybe its Apache version is too old, or it needs to be\n> installed separately.\n\nYeah, according to \"apt-file\", there's no package which contains\nmod_http2.so. t5559 is supposed to notice that during webserver setup\nand just skip the script. Poking at it myself in a xenial container, I\nthink it does do so correctly. So that's good.\n\nBut the CI environment switches GIT_TEST_HTTPD from \"auto\" to \"true\",\nturning a setup failure into an error. This is overall a good thing\n(since we'd notice if our apache setup breaks), but obviously is wrong\nhere. Unfortunately we don't have a knob just for http2. So the best we\ncan do is something like (might be whitespace-damaged, I just pasted it\nout of a container session):\n\ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 51f8f59..0514f6a 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -336,7 +336,15 @@ ubuntu-*)\n\tfi\n\tMAKEFLAGS=\"$MAKEFLAGS PYTHON_PATH=/usr/bin/$PYTHON_PACKAGE\"\n\n-\texport GIT_TEST_HTTPD=true\n+\tcase \"$distro\" in\n+\tubuntu-16.04)\n+\t\t# too old for http/2\n+\t\texport GIT_TEST_HTTPD=auto\n+\t\t;;\n+\t*)\n+\t\texport GIT_TEST_HTTPD=yes\n+\t\t;;\n+\tesac\n\n\t# The Linux build installs the defined dependency versions below.\n\t# The OS X build installs much more recent versions, whichever\n\n\nThat would still run the regular tests, and just turn the http2 failure\ninto a \"skip\". But it does make me nervous that we'd break something for\nthe non-http2 tests on that old platform and never realize it. So maybe\nwe need a GIT_TEST_HTTP2 knob that defaults to the value of\nGIT_TEST_HTTPD. And then we can turn it off for 16.04, leave the regular\none as \"yes\".\n\nI assume you're collecting a few patches to make your new xenial job\nwork. I think what I suggested above should be pretty easy to implement,\nbut let me know if you'd like me to come up with something concrete.\n\n-Peff\n"},{"id":"502730","messageId":"ZuPQBhgl0CRgxQ0g@pks.im","threadId":"62088","inReplyTo":"20240913045510.GA1194807@coredump.intra.peff.net","subject":"Re: [PATCH 3/4] ci: use more recent linux32 image","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-09-13T05:39:27Z","receivedAt":"2024-09-13T05:39:30Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Fri, Sep 13, 2024 at 12:55:10AM -0400, Jeff King wrote:\n> On Thu, Sep 12, 2024 at 02:47:38PM +0200, Patrick Steinhardt wrote:\n> \n> > On Thu, Sep 12, 2024 at 01:53:00PM +0200, Patrick Steinhardt wrote:\n> > > On Thu, Sep 12, 2024 at 07:22:42AM -0400, Jeff King wrote:\n> > > > On Thu, Sep 12, 2024 at 12:41:03PM +0200, Patrick Steinhardt wrote:\n> > > And with that the [fixed] pipeline builds and executes our tests just\n> > > fine. I didn't wait for tests to finish though.\n> > > \n> > > Patrick\n> > > \n> > > [here]: https://gitlab.com/gitlab-org/git/-/merge_requests/210\n> > > [first]: https://gitlab.com/gitlab-org/git/-/jobs/7808775485\n> > > [fixed]: https://gitlab.com/gitlab-org/git/-/jobs/7808836999\n> > \n> > Most of the tests pass, except for t5559. Seems like it doesn't have\n> > mod_http2. Maybe its Apache version is too old, or it needs to be\n> > installed separately.\n> \n> Yeah, according to \"apt-file\", there's no package which contains\n> mod_http2.so. t5559 is supposed to notice that during webserver setup\n> and just skip the script. Poking at it myself in a xenial container, I\n> think it does do so correctly. So that's good.\n> \n> But the CI environment switches GIT_TEST_HTTPD from \"auto\" to \"true\",\n> turning a setup failure into an error. This is overall a good thing\n> (since we'd notice if our apache setup breaks), but obviously is wrong\n> here. Unfortunately we don't have a knob just for http2. So the best we\n> can do is something like (might be whitespace-damaged, I just pasted it\n> out of a container session):\n> \n> diff --git a/ci/lib.sh b/ci/lib.sh\n> index 51f8f59..0514f6a 100755\n> --- a/ci/lib.sh\n> +++ b/ci/lib.sh\n> @@ -336,7 +336,15 @@ ubuntu-*)\n> \tfi\n> \tMAKEFLAGS=\"$MAKEFLAGS PYTHON_PATH=/usr/bin/$PYTHON_PACKAGE\"\n> \n> -\texport GIT_TEST_HTTPD=true\n> +\tcase \"$distro\" in\n> +\tubuntu-16.04)\n> +\t\t# too old for http/2\n> +\t\texport GIT_TEST_HTTPD=auto\n> +\t\t;;\n> +\t*)\n> +\t\texport GIT_TEST_HTTPD=yes\n> +\t\t;;\n> +\tesac\n> \n> \t# The Linux build installs the defined dependency versions below.\n> \t# The OS X build installs much more recent versions, whichever\n> \n> \n> That would still run the regular tests, and just turn the http2 failure\n> into a \"skip\". But it does make me nervous that we'd break something for\n> the non-http2 tests on that old platform and never realize it. So maybe\n> we need a GIT_TEST_HTTP2 knob that defaults to the value of\n> GIT_TEST_HTTPD. And then we can turn it off for 16.04, leave the regular\n> one as \"yes\".\n> \n> I assume you're collecting a few patches to make your new xenial job\n> work. I think what I suggested above should be pretty easy to implement,\n> but let me know if you'd like me to come up with something concrete.\n\nYeah, that does the job, thanks. Let me tie all of this into a neat\npackage and post it as 5/4 on top of this patch series.\n\nPatrick\n"},{"id":"502731","messageId":"00a9fe6b7d77c16c9fd6dfe746aacf9068a76942.1726206484.git.ps@pks.im","threadId":"62088","inReplyTo":"20240912094238.GA589050@coredump.intra.peff.net","subject":"[PATCH 5/4] ci: add Ubuntu 16.04 job to GitLab CI","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-09-13T05:52:51Z","receivedAt":"2024-09-13T05:52:55Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"In the preceding commits we had to convert the linux32 job to be based\non Ubuntu 20.04 instead of Ubuntu 16.04 due to a limitation in GitHub\nWorkflows. This was the only job left that still tested against this old\nbut supported Ubuntu version, and we have no other jobs that test with a\ncomparatively old Linux distribution.\n\nAdd a new job to GitLab CI that tests with Ubuntu 16.04 to cover the\nresulting test gap. GitLab doesn't modify Docker images in the same way\nGitHub does and thus doesn't fall prey to the same issue. There are two\ncompatibility issues uncovered by this:\n\n  - Ubuntu 16.04 does not support HTTP/2 in Apache. We thus cannot set\n    `GIT_TEST_HTTPD=true`, which would otherwise cause us to fail when\n    Apache fails to start.\n\n  - Ubuntu 16.04 cannot use recent JGit versions as they depend on a\n    more recent Java runtime than we have available. We thus disable\n    installing any kind of optional dependencies that do not come from\n    the package manager.\n\nThese two restrictions are fine though, as we only really care about\nwhether Git compiles and runs on such old distributions in the first\nplace.\n\nSigned-off-by: Patrick Steinhardt <ps@pks.im>\n---\n\nTest runs of this can be found at [1]. Note that the Alpine Linux jobs\nfail, due to an upstream regression in libcurl [2].\n\n[1]: https://gitlab.com/gitlab-org/git/-/merge_requests/210\n[2]: <ZuPKvYP9ZZ2mhb4m@pks.im>\n\n .gitlab-ci.yml             | 3 +++\n ci/install-dependencies.sh | 5 +++++\n ci/lib.sh                  | 9 ++++++++-\n 3 files changed, 16 insertions(+), 1 deletion(-)\n\ndiff --git a/.gitlab-ci.yml b/.gitlab-ci.yml\nindex 2589098eff7..80b1668ebeb 100644\n--- a/.gitlab-ci.yml\n+++ b/.gitlab-ci.yml\n@@ -25,6 +25,9 @@ test:linux:\n       fi\n   parallel:\n     matrix:\n+      - jobname: linux-old\n+        image: ubuntu:16.04\n+        CC: gcc\n       - jobname: linux-sha256\n         image: ubuntu:latest\n         CC: clang\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 735ee6f4639..08656a15308 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -55,6 +55,11 @@ ubuntu-*|ubuntu32-*)\n \t\t${CC_PACKAGE:-${CC:-gcc}} $PYTHON_PACKAGE\n \n \tcase \"$distro\" in\n+\tubuntu-16.04)\n+\t\t# Does not support JGit, but we also don't really care about\n+\t\t# the others. We rather care whether Git still compiles and\n+\t\t# runs fine overall.\n+\t\t;;\n \tubuntu-*)\n \t\tmkdir --parents \"$CUSTOM_PATH\"\n \ndiff --git a/ci/lib.sh b/ci/lib.sh\nindex 51f8f59a296..74b430be238 100755\n--- a/ci/lib.sh\n+++ b/ci/lib.sh\n@@ -336,7 +336,14 @@ ubuntu-*)\n \tfi\n \tMAKEFLAGS=\"$MAKEFLAGS PYTHON_PATH=/usr/bin/$PYTHON_PACKAGE\"\n \n-\texport GIT_TEST_HTTPD=true\n+\tcase \"$distro\" in\n+\tubuntu-16.04)\n+\t\t# Apache is too old for HTTP/2.\n+\t\t;;\n+\t*)\n+\t\texport GIT_TEST_HTTPD=true\n+\t\t;;\n+\tesac\n \n \t# The Linux build installs the defined dependency versions below.\n \t# The OS X build installs much more recent versions, whichever\n\nbase-commit: f33406dbcc16e699be71aa4982133c325838ae1b\n-- \n2.46.0.551.gc5ee8f2d1c.dirty\n\n"},{"id":"502738","messageId":"20240913062113.GA1232933@coredump.intra.peff.net","threadId":"62088","inReplyTo":"00a9fe6b7d77c16c9fd6dfe746aacf9068a76942.1726206484.git.ps@pks.im","subject":"Re: [PATCH 5/4] ci: add Ubuntu 16.04 job to GitLab CI","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-13T06:21:13Z","receivedAt":"2024-09-13T06:21:15Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Fri, Sep 13, 2024 at 07:52:51AM +0200, Patrick Steinhardt wrote:\n\n> In the preceding commits we had to convert the linux32 job to be based\n> on Ubuntu 20.04 instead of Ubuntu 16.04 due to a limitation in GitHub\n> Workflows. This was the only job left that still tested against this old\n> but supported Ubuntu version, and we have no other jobs that test with a\n> comparatively old Linux distribution.\n> \n> Add a new job to GitLab CI that tests with Ubuntu 16.04 to cover the\n> resulting test gap. GitLab doesn't modify Docker images in the same way\n> GitHub does and thus doesn't fall prey to the same issue. There are two\n> compatibility issues uncovered by this:\n> \n>   - Ubuntu 16.04 does not support HTTP/2 in Apache. We thus cannot set\n>     `GIT_TEST_HTTPD=true`, which would otherwise cause us to fail when\n>     Apache fails to start.\n> \n>   - Ubuntu 16.04 cannot use recent JGit versions as they depend on a\n>     more recent Java runtime than we have available. We thus disable\n>     installing any kind of optional dependencies that do not come from\n>     the package manager.\n\nOK, this looks reasonable to me. I do think we could have our cake and\neat it too on the Apache support if we added a GIT_TEST_HTTP2 knob. But\nit's probably not all that big a deal in practice, and after another 1.5\nyears I think we'd drop this 16.04 job anyway (since it will be out of\nLTS then).\n\nThanks for putting this together.\n\n-Peff\n"},{"id":"502740","messageId":"ZuPeJqOg2GFqqOxa@pks.im","threadId":"62088","inReplyTo":"20240913062113.GA1232933@coredump.intra.peff.net","subject":"Re: [PATCH 5/4] ci: add Ubuntu 16.04 job to GitLab CI","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-09-13T06:39:34Z","receivedAt":"2024-09-13T06:39:39Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Fri, Sep 13, 2024 at 02:21:13AM -0400, Jeff King wrote:\n> On Fri, Sep 13, 2024 at 07:52:51AM +0200, Patrick Steinhardt wrote:\n> \n> > In the preceding commits we had to convert the linux32 job to be based\n> > on Ubuntu 20.04 instead of Ubuntu 16.04 due to a limitation in GitHub\n> > Workflows. This was the only job left that still tested against this old\n> > but supported Ubuntu version, and we have no other jobs that test with a\n> > comparatively old Linux distribution.\n> > \n> > Add a new job to GitLab CI that tests with Ubuntu 16.04 to cover the\n> > resulting test gap. GitLab doesn't modify Docker images in the same way\n> > GitHub does and thus doesn't fall prey to the same issue. There are two\n> > compatibility issues uncovered by this:\n> > \n> >   - Ubuntu 16.04 does not support HTTP/2 in Apache. We thus cannot set\n> >     `GIT_TEST_HTTPD=true`, which would otherwise cause us to fail when\n> >     Apache fails to start.\n> > \n> >   - Ubuntu 16.04 cannot use recent JGit versions as they depend on a\n> >     more recent Java runtime than we have available. We thus disable\n> >     installing any kind of optional dependencies that do not come from\n> >     the package manager.\n> \n> OK, this looks reasonable to me. I do think we could have our cake and\n> eat it too on the Apache support if we added a GIT_TEST_HTTP2 knob. But\n> it's probably not all that big a deal in practice, and after another 1.5\n> years I think we'd drop this 16.04 job anyway (since it will be out of\n> LTS then).\n\nNote that we _do_ run the Apache tests, but only for HTTP/1. That's what\nthe \"auto\" setting does automatically: Apache starts up just fine\nwithout the HTTP/2 module and thus we run all tests that don't rely on\nHTTP/2. On the other hand it fails to boot with HTTP/2, and thus we skip\nover these tests automatically.\n\nPatrick\n"},{"id":"502741","messageId":"20240913064352.GA1234648@coredump.intra.peff.net","threadId":"62088","inReplyTo":"ZuPeJqOg2GFqqOxa@pks.im","subject":"Re: [PATCH 5/4] ci: add Ubuntu 16.04 job to GitLab CI","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2024-09-13T06:43:52Z","receivedAt":"2024-09-13T06:43:53Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Fri, Sep 13, 2024 at 08:39:34AM +0200, Patrick Steinhardt wrote:\n\n> > OK, this looks reasonable to me. I do think we could have our cake and\n> > eat it too on the Apache support if we added a GIT_TEST_HTTP2 knob. But\n> > it's probably not all that big a deal in practice, and after another 1.5\n> > years I think we'd drop this 16.04 job anyway (since it will be out of\n> > LTS then).\n> \n> Note that we _do_ run the Apache tests, but only for HTTP/1. That's what\n> the \"auto\" setting does automatically: Apache starts up just fine\n> without the HTTP/2 module and thus we run all tests that don't rely on\n> HTTP/2. On the other hand it fails to boot with HTTP/2, and thus we skip\n> over these tests automatically.\n\nRight, what I mean is that we would not notice if that job started\nskipping the HTTP/1 tests (e.g., because we changed something in\napache.conf that didn't work on that old distro). We know it works now,\nbut our ideal config going forward is \"skip the HTTP/2 tests if needed,\nbut fail if the HTTP/1 tests do not run\".\n\n-Peff\n"},{"id":"502742","messageId":"ZuPgDQ7s0B07pzPz@pks.im","threadId":"62088","inReplyTo":"20240913064352.GA1234648@coredump.intra.peff.net","subject":"Re: [PATCH 5/4] ci: add Ubuntu 16.04 job to GitLab CI","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2024-09-13T06:47:41Z","receivedAt":"2024-09-13T06:47:46Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Fri, Sep 13, 2024 at 02:43:52AM -0400, Jeff King wrote:\n> On Fri, Sep 13, 2024 at 08:39:34AM +0200, Patrick Steinhardt wrote:\n> \n> > > OK, this looks reasonable to me. I do think we could have our cake and\n> > > eat it too on the Apache support if we added a GIT_TEST_HTTP2 knob. But\n> > > it's probably not all that big a deal in practice, and after another 1.5\n> > > years I think we'd drop this 16.04 job anyway (since it will be out of\n> > > LTS then).\n> > \n> > Note that we _do_ run the Apache tests, but only for HTTP/1. That's what\n> > the \"auto\" setting does automatically: Apache starts up just fine\n> > without the HTTP/2 module and thus we run all tests that don't rely on\n> > HTTP/2. On the other hand it fails to boot with HTTP/2, and thus we skip\n> > over these tests automatically.\n> \n> Right, what I mean is that we would not notice if that job started\n> skipping the HTTP/1 tests (e.g., because we changed something in\n> apache.conf that didn't work on that old distro). We know it works now,\n> but our ideal config going forward is \"skip the HTTP/2 tests if needed,\n> but fail if the HTTP/1 tests do not run\".\n\nAh, that's true indeed. As you mention it probably doesn't matter all\nthat much. I think it's nice to verify that things work to the best\nextent possible for such old platforms. But wiring up a new prereq just\nfor that doesn't feel all that important to me.\n\nPatrick\n"},{"id":"502757","messageId":"xmqqseu31qad.fsf@gitster.g","threadId":"62088","inReplyTo":"20240913062113.GA1232933@coredump.intra.peff.net","subject":"Re: [PATCH 5/4] ci: add Ubuntu 16.04 job to GitLab CI","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2024-09-13T16:17:46Z","receivedAt":"2024-09-13T16:17:49Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jeff King <peff@peff.net> writes:\n\n> On Fri, Sep 13, 2024 at 07:52:51AM +0200, Patrick Steinhardt wrote:\n>\n>> In the preceding commits we had to convert the linux32 job to be based\n>> on Ubuntu 20.04 instead of Ubuntu 16.04 due to a limitation in GitHub\n>> Workflows. This was the only job left that still tested against this old\n>> but supported Ubuntu version, and we have no other jobs that test with a\n>> comparatively old Linux distribution.\n>> \n>> Add a new job to GitLab CI that tests with Ubuntu 16.04 to cover the\n>> resulting test gap. GitLab doesn't modify Docker images in the same way\n>> GitHub does and thus doesn't fall prey to the same issue. There are two\n>> compatibility issues uncovered by this:\n>> \n>>   - Ubuntu 16.04 does not support HTTP/2 in Apache. We thus cannot set\n>>     `GIT_TEST_HTTPD=true`, which would otherwise cause us to fail when\n>>     Apache fails to start.\n>> \n>>   - Ubuntu 16.04 cannot use recent JGit versions as they depend on a\n>>     more recent Java runtime than we have available. We thus disable\n>>     installing any kind of optional dependencies that do not come from\n>>     the package manager.\n>\n> OK, this looks reasonable to me. I do think we could have our cake and\n> eat it too on the Apache support if we added a GIT_TEST_HTTP2 knob. But\n> it's probably not all that big a deal in practice, and after another 1.5\n> years I think we'd drop this 16.04 job anyway (since it will be out of\n> LTS then).\n>\n> Thanks for putting this together.\n\nYes, thanks, both.  Queued.\n"}]}