{"thread":{"id":"64930","subject":"[PATCH] ci: avoid ubuntu:rolling in most jobs for now","startedAt":"2026-02-05T21:26:45Z","lastAt":"2026-02-07T05:35:38Z","messageCount":6,"participants":["Junio C Hamano","Collin Funk","Patrick Steinhardt","Colin Stagner"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"535282","messageId":"xmqqy0l6khkd.fsf@gitster.g","threadId":"64930","inReplyTo":null,"subject":"[PATCH] ci: avoid ubuntu:rolling in most jobs for now","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-02-05T21:26:42Z","receivedAt":"2026-02-05T21:26:45Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"We just was hit by buggy uutils dirname in ubuntu:rolling.\nAvoid breakage caused by being on the bleeding edge.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n\n * So here is what I have near the merge of \"let's test contrib/\n   stuff as well\" in 'seen' for today's integration to avoid getting\n   hit by broken dirname in ubuntu:rolling reported earlier in\n\n    https://lore.kernel.org/git/ef128e1d-dd3e-4573-bfcd-6a98a0a1f394@howdoi.land/\n\n   Until uutils used by ubuntu:rolling stabilizes a bit more, we may\n   want to keep a patch like this in our CI jobs.  Or we may offer\n   ourselves as a guinea-pig?  I do not have strong preference\n   either way.\n\n .github/workflows/main.yml | 14 +++++++-------\n 1 file changed, 7 insertions(+), 7 deletions(-)\n\ndiff --git a/.github/workflows/main.yml b/.github/workflows/main.yml\nindex f2e93f5461..0b4567c99f 100644\n--- a/.github/workflows/main.yml\n+++ b/.github/workflows/main.yml\n@@ -377,10 +377,10 @@ jobs:\n       matrix:\n         vector:\n         - jobname: linux-sha256\n-          image: ubuntu:rolling\n+          image: ubuntu:latest\n           cc: clang\n         - jobname: linux-reftable\n-          image: ubuntu:rolling\n+          image: ubuntu:latest\n           cc: clang\n         - jobname: linux-TEST-vars\n           image: ubuntu:20.04\n@@ -388,20 +388,20 @@ jobs:\n           cc_package: gcc-8\n         - jobname: linux-breaking-changes\n           cc: gcc\n-          image: ubuntu:rolling\n+          image: ubuntu:latest\n         - jobname: fedora-breaking-changes-meson\n           image: fedora:latest\n         - jobname: linux-leaks\n-          image: ubuntu:rolling\n+          image: ubuntu:latest\n           cc: gcc\n         - jobname: linux-reftable-leaks\n-          image: ubuntu:rolling\n+          image: ubuntu:latest\n           cc: gcc\n         - jobname: linux-asan-ubsan\n-          image: ubuntu:rolling\n+          image: ubuntu:latest\n           cc: clang\n         - jobname: linux-meson\n-          image: ubuntu:rolling\n+          image: ubuntu:latest\n           cc: gcc\n         - jobname: linux-musl-meson\n           image: alpine:latest\n-- \n2.53.0-181-gfd50f4332d\n\n"},{"id":"535283","messageId":"87bji2c0ti.fsf@gmail.com","threadId":"64930","inReplyTo":"xmqqy0l6khkd.fsf@gitster.g","subject":"Re: [PATCH] ci: avoid ubuntu:rolling in most jobs for now","fromName":"Collin Funk","fromEmail":"collin.funk1@gmail.com","sentAt":"2026-02-05T21:55:37Z","receivedAt":"2026-02-05T21:55:39Z","isPatch":true,"sender":{"key":"collin.funk1@gmail.com","avatar":"https://avatars.githubusercontent.com/u/65689063?v=4"},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> We just was hit by buggy uutils dirname in ubuntu:rolling.\n> Avoid breakage caused by being on the bleeding edge.\n>\n> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n> ---\n>\n>  * So here is what I have near the merge of \"let's test contrib/\n>    stuff as well\" in 'seen' for today's integration to avoid getting\n>    hit by broken dirname in ubuntu:rolling reported earlier in\n>\n>     https://lore.kernel.org/git/ef128e1d-dd3e-4573-bfcd-6a98a0a1f394@howdoi.land/\n>\n>    Until uutils used by ubuntu:rolling stabilizes a bit more, we may\n>    want to keep a patch like this in our CI jobs.  Or we may offer\n>    ourselves as a guinea-pig?  I do not have strong preference\n>    either way.\n>\n>  .github/workflows/main.yml | 14 +++++++-------\n>  1 file changed, 7 insertions(+), 7 deletions(-)\n\nIf you would prefer to keep using ubuntu:rolling, you can do something\nlike this:\n\n    $ podman run --rm -it ubuntu:25.10\n    $ dirname --version\n    dirname (uutils coreutils) 0.2.2\n    $ apt-get upgrade -y; apt-get update -y;\n    [...]\n    $ apt-get install -y coreutils-from-gnu coreutils-from-uutils- \\\n        --allow-remove-essential\n    [...]\n    $ dirname --version | head -n 1\n    dirname (GNU coreutils) 9.5\n\nI'm not familiar with the CI, so I am not voting for either option. I'll\nlet others decide. :)\n\nCollin\n"},{"id":"535313","messageId":"aYWaytvnR8wOdc1s@pks.im","threadId":"64930","inReplyTo":"xmqqy0l6khkd.fsf@gitster.g","subject":"Re: [PATCH] ci: avoid ubuntu:rolling in most jobs for now","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2026-02-06T07:39:54Z","receivedAt":"2026-02-06T07:40:07Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Feb 05, 2026 at 01:26:42PM -0800, Junio C Hamano wrote:\n> We just was hit by buggy uutils dirname in ubuntu:rolling.\n> Avoid breakage caused by being on the bleeding edge.\n> \n> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n> ---\n> \n>  * So here is what I have near the merge of \"let's test contrib/\n>    stuff as well\" in 'seen' for today's integration to avoid getting\n>    hit by broken dirname in ubuntu:rolling reported earlier in\n> \n>     https://lore.kernel.org/git/ef128e1d-dd3e-4573-bfcd-6a98a0a1f394@howdoi.land/\n> \n>    Until uutils used by ubuntu:rolling stabilizes a bit more, we may\n>    want to keep a patch like this in our CI jobs.  Or we may offer\n>    ourselves as a guinea-pig?  I do not have strong preference\n>    either way.\n\nI think being a guinea-pig and reporting any issues we find to upstream\nwould be the best outcome. It's feasible that eventually, Ubuntu may\nfully switch over to uutils, and if that's the case it would be great if\nwe had already ironed out all the bugs that we happen to hit ourselves.\n\nSo I think demoting to \"latest\" is a fine intermediate step to fix our\nCI, but ideally we'd do a similar workaround to the sudo.ws workaround\nwe have in \"ci/install-dependencies.sh\" so that we only disable the\npieces that _don't_ work. That'd make it easy to contiue using the parts\nthat _do_ work, and once the bug has been fixed upstreamed and has\nbecome part of Ubuntu we can then disable the workaround.\n\nI plan to have a deeper look at our CI next week anyway to fix some\nsmall warts and a test failure that we hit on GitLab with the MSVC job.\nSo maybe we commit your fix as an intermediate step, and I'll then\nrevert it and come up with a more localized fix?\n\nThanks!\n\nPatrick\n"},{"id":"535401","messageId":"20260207042703.1180704-1-ask+git@howdoi.land","threadId":"64930","inReplyTo":"aYWaytvnR8wOdc1s@pks.im","subject":"Re: [PATCH] ci: avoid ubuntu:rolling in most jobs for now","fromName":"Colin Stagner","fromEmail":"ask+git@howdoi.land","sentAt":"2026-02-07T04:27:03Z","receivedAt":"2026-02-07T04:28:19Z","isPatch":true,"sender":{"key":"ask+git@howdoi.land","avatar":null},"body":"On 2/6/26 01:39, Patrick Steinhardt wrote:\n\n> On 2/5/26 15:55, Collin Funk wrote:\n>> If you would prefer to keep usingubuntu:rolling, you can do something\n>> like this:\n>> \n>>      $ podman run --rm -itubuntu:25.10\n>>      $ dirname --version\n>>      dirname (uutils coreutils) 0.2.2\n>>      $ apt-get upgrade -y; apt-get update -y;\n>>      [...]\n>>      $ apt-get install -y coreutils-from-gnu coreutils-from-uutils- \\\n>>          --allow-remove-essential\n>>      [...]\n>>      $ dirname --version | head -n 1\n>>      dirname (GNU coreutils) 9.5\n>\n> ideally we'd do a similar workaround to the sudo.ws workaround\n> we have in \"ci/install-dependencies.sh\" so that we only disable the\n> pieces that _don't_ work.\n\nThe ubuntu:rolling image still has GNU coreutils installed, but all\nthe command names are prefixed with \"gnu\". This approach replaces\nonly `dirname`. Feel free to adapt or discard as you like---this\nisn't my CI!\n\nColin\n\n-- >8 --\nSubject: [PATCH] ci: ubuntu: use GNU coreutils for dirname\n\nThe uutils version of `dirname` has output that is inconsistent\nwith GNU coreutils. Prefer the GNU implementation of this command.\n\nSigned-off-by: Colin Stagner <ask+git@howdoi.land>\n---\n ci/install-dependencies.sh | 11 +++++++++++\n 1 file changed, 11 insertions(+)\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 6ee8216a05..617b90cbc9 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -71,16 +71,27 @@ ubuntu-*|i386/ubuntu-*|debian-*)\n \t# sudo(1) or sudo-rs(1), with the latter being the default. The problem\n \t# is that it does not support `--preserve-env` though, which we rely on\n \t# in our CI. We thus revert back to the C implementation.\n \tif test -f /etc/alternatives/sudo\n \tthen\n \t\tsudo update-alternatives --set sudo /usr/bin/sudo.ws\n \tfi\n \n+\t# on uutils v0.2.2 from rust-coreutils,\n+\t#     dirname \"foo/.\"\n+\t# outputs \".\" instead of \"foo\" like it should.\n+\t# Use GNU coreutils to provide dirname instead.\n+\t#\n+\t# See <https://github.com/uutils/coreutils/issues/10508>.\n+\tif test -x /usr/bin/gnudirname\n+\tthen\n+\t\tln -sfT /usr/bin/gnudirname /usr/bin/dirname\n+\tfi\n+\n \tcase \"$distro\" in\n \tubuntu-*)\n \t\tmkdir --parents \"$CUSTOM_PATH\"\n \n \t\twget --quiet --directory-prefix=\"$CUSTOM_PATH\" \\\n \t\t\t\"$P4WHENCE/bin.linux26x86_64/p4d\" \\\n \t\t\t\"$P4WHENCE/bin.linux26x86_64/p4\" &&\n \t\tchmod a+x \"$CUSTOM_PATH/p4d\" \"$CUSTOM_PATH/p4\" || {\n\nbase-commit: 3e0db84c88c57e70ac8be8c196dfa92c5d656fbc\n-- \n2.43.0\n\n"},{"id":"535402","messageId":"xmqq343dcfsy.fsf@gitster.g","threadId":"64930","inReplyTo":"20260207042703.1180704-1-ask+git@howdoi.land","subject":"Re: [PATCH] ci: avoid ubuntu:rolling in most jobs for now","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-02-07T04:56:29Z","receivedAt":"2026-02-07T04:56:32Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Colin Stagner <ask+git@howdoi.land> writes:\n\n> Subject: [PATCH] ci: ubuntu: use GNU coreutils for dirname\n>\n> The uutils version of `dirname` has output that is inconsistent\n> with GNU coreutils. Prefer the GNU implementation of this command.\n>\n> Signed-off-by: Colin Stagner <ask+git@howdoi.land>\n> ---\n>  ci/install-dependencies.sh | 11 +++++++++++\n>  1 file changed, 11 insertions(+)\n\nHmm, this certainly is a more focused solution.  Let me revert my\ndemote-from-rolling-to-latest hack and replace it with this one.\n\nIf we hit more breakages and at unacceptable high frequency, we may\nwant to change our mind and write off rolling as not stable enough\nyet, but if we are lucky we won't have to.  Knock, knock...\n\n> diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\n> index 6ee8216a05..617b90cbc9 100755\n> --- a/ci/install-dependencies.sh\n> +++ b/ci/install-dependencies.sh\n> @@ -71,16 +71,27 @@ ubuntu-*|i386/ubuntu-*|debian-*)\n>  \t# sudo(1) or sudo-rs(1), with the latter being the default. The problem\n>  \t# is that it does not support `--preserve-env` though, which we rely on\n>  \t# in our CI. We thus revert back to the C implementation.\n>  \tif test -f /etc/alternatives/sudo\n>  \tthen\n>  \t\tsudo update-alternatives --set sudo /usr/bin/sudo.ws\n>  \tfi\n>  \n> +\t# on uutils v0.2.2 from rust-coreutils,\n> +\t#     dirname \"foo/.\"\n> +\t# outputs \".\" instead of \"foo\" like it should.\n> +\t# Use GNU coreutils to provide dirname instead.\n> +\t#\n> +\t# See <https://github.com/uutils/coreutils/issues/10508>.\n> +\tif test -x /usr/bin/gnudirname\n> +\tthen\n> +\t\tln -sfT /usr/bin/gnudirname /usr/bin/dirname\n\n\"-T\" is somewhat exotic, certainly outside POSIX, and is not needed\nin this case, no?\n\n> +\tfi\n> +\n>  \tcase \"$distro\" in\n>  \tubuntu-*)\n>  \t\tmkdir --parents \"$CUSTOM_PATH\"\n>  \n>  \t\twget --quiet --directory-prefix=\"$CUSTOM_PATH\" \\\n>  \t\t\t\"$P4WHENCE/bin.linux26x86_64/p4d\" \\\n>  \t\t\t\"$P4WHENCE/bin.linux26x86_64/p4\" &&\n>  \t\tchmod a+x \"$CUSTOM_PATH/p4d\" \"$CUSTOM_PATH/p4\" || {\n>\n> base-commit: 3e0db84c88c57e70ac8be8c196dfa92c5d656fbc\n"},{"id":"535405","messageId":"aac216f7-5d3a-47a9-aaee-5ea3a330fc95@howdoi.land","threadId":"64930","inReplyTo":"xmqq343dcfsy.fsf@gitster.g","subject":"Re: [PATCH] ci: avoid ubuntu:rolling in most jobs for now","fromName":"Colin Stagner","fromEmail":"ask+git@howdoi.land","sentAt":"2026-02-07T05:35:17Z","receivedAt":"2026-02-07T05:35:38Z","isPatch":true,"sender":{"key":"ask+git@howdoi.land","avatar":null},"body":"On 2/6/26 22:56, Junio C Hamano wrote:\n>> +\tif test -x /usr/bin/gnudirname\n>> +\tthen\n>> +\t\tln -sfT /usr/bin/gnudirname /usr/bin/dirname\n> \"-T\" is somewhat exotic, certainly outside POSIX, and is not needed\n> in this case, no?\n\nCorrect, this works just fine without it. You can omit it.\n\nWhen requesting an ln, I usually know and specify both filenames \nexactly. I do not desire directory behavior as I might for cp or mv. -T \n/ --no-target-directory is useful for this, if perhaps non-portable.\n\nThe coreutils info docs [1] highlight an interesting race condition that \nis avoided by --no-target-directory:\n\n   when the command ‘mv /tmp/source /tmp/dest’ succeeds,\n   there is no guarantee that /tmp/source was renamed\n   to /tmp/dest: it could have been renamed to\n   /tmp/dest/source ...  if mv -T /tmp/source /tmp/dest\n   succeeds, there is no question that /tmp/source was\n   renamed to /tmp/dest.\n\nbut I avoid writing to /tmp itself with anything other than mktemp or \nrm, for this very reason.\n\n[1]: \nhttps://www.gnu.org/software/coreutils/manual/html_node/Target-directory.html\n\n\n"}]}