{"thread":{"id":"63345","subject":"repo.eclipse.org outage breaking all our linux CI jobs","startedAt":"2025-04-24T22:14:00Z","lastAt":"2025-04-28T10:30:28Z","messageCount":16,"participants":["Junio C Hamano","Patrick Steinhardt","Johannes Schindelin","shejialuo"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"516697","messageId":"xmqqfrhxtdg9.fsf@gitster.g","threadId":"63345","inReplyTo":null,"subject":"repo.eclipse.org outage breaking all our linux CI jobs","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-04-24T22:13:58Z","receivedAt":"2025-04-24T22:14:00Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"As https://www.eclipsestatus.io/ reports there is no ETA for\nrecovery, and due to the failure of downloading JGit material in an\nearly stage of our CI jobs, our linux CI jobs are all failing, I am\nvery tempted to apply the following to 'maint' immediately and\npropagate it all the way up to 'master', 'next', and 'seen'.\n\nI would very very much appreciate additional thoughts and advices by\nanybody more involved in JGit community and more clueful than I am\non the situation.\n\nAnyway, what is somewhat funny is that at the end of this script,\nthere is an attempt to notice and report the lack of jgit (as well\nas p4 and lfs) but still continuing:\n\n\t...\n        if type jgit >/dev/null 2>&1\n        then\n                echo \"$(tput setaf 6)JGit Version$(tput sgr0)\"\n                jgit version\n        else\n                echo >&2 \"WARNING: JGit wasn't installed, see above for clues why\"\n        fi\n\n        end_group \"Install dependencies\"\n\nbut because ci/lib.sh does \"set -e\", we fail way before we hit this\ncode.  I am tempted to suggest we remove that \"set -e\" as a long\nterm maintainability improvement measure, but that is a separate\ntopic.\n\n ci/install-dependencies.sh | 5 +++--\n 1 file changed, 3 insertions(+), 2 deletions(-)\n\ndiff --git c/ci/install-dependencies.sh w/ci/install-dependencies.sh\nindex be9ba5e30a..4dda5db7e5 100755\n--- c/ci/install-dependencies.sh\n+++ w/ci/install-dependencies.sh\n@@ -74,8 +74,9 @@ ubuntu-*|i386/ubuntu-*|debian-*)\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\twget --quiet \"$JGITWHENCE\" --output-document=\"$CUSTOM_PATH/jgit\" &&\n+\t\tchmod a+x \"$CUSTOM_PATH/jgit\" ||\n+\t\techo >&2 \"JGit download failed, but we do not care and keep going\"\n \t\t;;\n \tesac\n \t;;\n"},{"id":"516701","messageId":"xmqqmsc5rw94.fsf@gitster.g","threadId":"63345","inReplyTo":"xmqqfrhxtdg9.fsf@gitster.g","subject":"[PATCH] ci: skip unavailable external software","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-04-24T23:10:47Z","receivedAt":"2025-04-24T23:10:50Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"The ci/install-dependencies.sh script used in a very early phase of\nour CI jobs downloads Perforce, Git-LFS, and JGit, used for running\nthe test scripts.  The test framework is prepared to properly skip\nthe tests that depend on these external software, but the CI script\nis unnecessarily strict (due to its use of \"set -e\" in ci/lib.sh)\nand fails the entire CI run before even starting to test the rest of\nthe system.\n\nNotice a failure to download to any of these external software, but\nkeep going.  We need to be careful about cleaning after a failed\nwget, as a later part of the script that does:\n\n        if type jgit >/dev/null 2>&1\n        then\n                echo \"$(tput setaf 6)JGit Version$(tput sgr0)\"\n                jgit version\n        else\n                echo >&2 \"WARNING: JGit wasn't installed, see above for clues why\"\n        fi\n\nwill (surprise!) succeed running \"type jgit\", and then fail with\n\"jgit version\", taking the whole thing down due to \"set -e\".\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n ci/install-dependencies.sh | 31 ++++++++++++++++++++++---------\n 1 file changed, 22 insertions(+), 9 deletions(-)\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex 0df74610d0..e51304c3b0 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -66,16 +66,29 @@ ubuntu-*|i386/ubuntu-*|debian-*)\n \t\tmkdir --parents \"$CUSTOM_PATH\"\n \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-\t\twget --quiet \"$LFSWHENCE/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\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+\t\t\trm -f \"$CUSTOM_PATH/p4\"\n+\t\t\trm -f \"$CUSTOM_PATH/p4d\"\n+\t\t\techo >&2 \"P4 download (optional) failed\"\n+\t\t}\n+\n+\t\twget --quiet \\\n+\t\t     \"$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\t-C \"$CUSTOM_PATH\" --strip-components=1 \\\n+\t\t\t\"git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs\" &&\n+\t\trm \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\" || {\n+\t\t\trm -f \"$CUSTOM_PATH/git-lfs\"\n+\t\t\techo >&2 \"LFS download (optional) failed\"\n+\t\t}\n+\n+\t\twget --quiet \"$JGITWHENCE\" --output-document=\"$CUSTOM_PATH/jgit\" &&\n+\t\tchmod a+x \"$CUSTOM_PATH/jgit\" || {\n+\t\t\trm -f \"$CUSTOM_PATH/jgit\"\n+\t\t\techo >&2 \"JGit download (optional) failed\"\n+\t\t}\n \t\t;;\n \tesac\n \t;;\n-- \n2.49.0-555-g089a0e42c4\n\n"},{"id":"516714","messageId":"aAsNUYUKJZbrMCf2@pks.im","threadId":"63345","inReplyTo":"xmqqmsc5rw94.fsf@gitster.g","subject":"Re: [PATCH] ci: skip unavailable external software","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-04-25T04:19:29Z","receivedAt":"2025-04-25T04:19:38Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Thu, Apr 24, 2025 at 04:10:47PM -0700, Junio C Hamano wrote:\n> The ci/install-dependencies.sh script used in a very early phase of\n> our CI jobs downloads Perforce, Git-LFS, and JGit, used for running\n> the test scripts.  The test framework is prepared to properly skip\n> the tests that depend on these external software, but the CI script\n> is unnecessarily strict (due to its use of \"set -e\" in ci/lib.sh)\n> and fails the entire CI run before even starting to test the rest of\n> the system.\n> \n> Notice a failure to download to any of these external software, but\n> keep going.  We need to be careful about cleaning after a failed\n> wget, as a later part of the script that does:\n> \n>         if type jgit >/dev/null 2>&1\n>         then\n>                 echo \"$(tput setaf 6)JGit Version$(tput sgr0)\"\n>                 jgit version\n>         else\n>                 echo >&2 \"WARNING: JGit wasn't installed, see above for clues why\"\n>         fi\n> \n> will (surprise!) succeed running \"type jgit\", and then fail with\n> \"jgit version\", taking the whole thing down due to \"set -e\".\n\nYeah, I think this is a sensible direction to go. It is unfortunate that\nthis may lead to silent breakage of these dependencies unless somebody\nexplicitly looks for those warnings. But that feels like the lesser evil\ncompared to failing the whole pipeline.\n\n> Signed-off-by: Junio C Hamano <gitster@pobox.com>\n> ---\n>  ci/install-dependencies.sh | 31 ++++++++++++++++++++++---------\n>  1 file changed, 22 insertions(+), 9 deletions(-)\n> \n> diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\n> index 0df74610d0..e51304c3b0 100755\n> --- a/ci/install-dependencies.sh\n> +++ b/ci/install-dependencies.sh\n> @@ -66,16 +66,29 @@ ubuntu-*|i386/ubuntu-*|debian-*)\n>  \t\tmkdir --parents \"$CUSTOM_PATH\"\n>  \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> -\t\twget --quiet \"$LFSWHENCE/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\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> +\t\t\trm -f \"$CUSTOM_PATH/p4\"\n> +\t\t\trm -f \"$CUSTOM_PATH/p4d\"\n> +\t\t\techo >&2 \"P4 download (optional) failed\"\n> +\t\t}\n\nI think it would be preferable to only handle failure of wget as chmod\nshouldn't ever fail if wget was successful. The same is true for the\nother downloads -- let's be as strict as possible but allow failure of\nthose actions that depend on the network.\n\nPatrick\n"},{"id":"516779","messageId":"xmqqh62cwoya.fsf@gitster.g","threadId":"63345","inReplyTo":"aAsNUYUKJZbrMCf2@pks.im","subject":"Re: [PATCH] ci: skip unavailable external software","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-04-25T09:49:33Z","receivedAt":"2025-04-25T09:49:36Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> I think it would be preferable to only handle failure of wget as chmod\n> shouldn't ever fail if wget was successful. The same is true for the\n> other downloads -- let's be as strict as possible but allow failure of\n> those actions that depend on the network.\n\nYou may think so (as I thought so too before hitting a snag or two) ;-).\n\nThe thing is, failing \"wget --output-document\" leaves an empty file,\nand an empty file does not still cause \"if type jgit; then\" to take\nthe \"else\" clause, and the invocation of \"jgit version\" would fail,\ntaking the whole thing out, due to the \"set -e\" thing.\n"},{"id":"516782","messageId":"aAtdsURaaxYO7pVt@pks.im","threadId":"63345","inReplyTo":"xmqqh62cwoya.fsf@gitster.g","subject":"Re: [PATCH] ci: skip unavailable external software","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-04-25T10:02:25Z","receivedAt":"2025-04-25T10:02:29Z","isPatch":true,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Fri, Apr 25, 2025 at 02:49:33AM -0700, Junio C Hamano wrote:\n> Patrick Steinhardt <ps@pks.im> writes:\n> \n> > I think it would be preferable to only handle failure of wget as chmod\n> > shouldn't ever fail if wget was successful. The same is true for the\n> > other downloads -- let's be as strict as possible but allow failure of\n> > those actions that depend on the network.\n> \n> You may think so (as I thought so too before hitting a snag or two) ;-).\n> \n> The thing is, failing \"wget --output-document\" leaves an empty file,\n> and an empty file does not still cause \"if type jgit; then\" to take\n> the \"else\" clause, and the invocation of \"jgit version\" would fail,\n> taking the whole thing out, due to the \"set -e\" thing.\n\nBut shouldn't the failing wget cause an error, too? So the `|| { }`\ncleanup branch would execute in that case and we can prune the empty\nfile there. So in other words, shouldn't the following work alright?\n\n    if wget --output-document=...\n    then\n        massage output\n    else\n        rm output\n    fi\n\nOr am I still missing the obvious?\n\nPatrick\n"},{"id":"516792","messageId":"a80a320b-80ca-3d61-a4a2-f2528e7ca053@gmx.de","threadId":"63345","inReplyTo":"aAsNUYUKJZbrMCf2@pks.im","subject":"Re: [PATCH] ci: skip unavailable external software","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2025-04-25T12:01:20Z","receivedAt":"2025-04-25T12:01:23Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Patrick,\n\nOn Fri, 25 Apr 2025, Patrick Steinhardt wrote:\n\n> On Thu, Apr 24, 2025 at 04:10:47PM -0700, Junio C Hamano wrote:\n> > The ci/install-dependencies.sh script used in a very early phase of\n> > our CI jobs downloads Perforce, Git-LFS, and JGit, used for running\n> > the test scripts.  The test framework is prepared to properly skip\n> > the tests that depend on these external software, but the CI script\n> > is unnecessarily strict (due to its use of \"set -e\" in ci/lib.sh)\n> > and fails the entire CI run before even starting to test the rest of\n> > the system.\n> > \n> > Notice a failure to download to any of these external software, but\n> > keep going.  We need to be careful about cleaning after a failed\n> > wget, as a later part of the script that does:\n> > \n> >         if type jgit >/dev/null 2>&1\n> >         then\n> >                 echo \"$(tput setaf 6)JGit Version$(tput sgr0)\"\n> >                 jgit version\n> >         else\n> >                 echo >&2 \"WARNING: JGit wasn't installed, see above for clues why\"\n> >         fi\n> > \n> > will (surprise!) succeed running \"type jgit\", and then fail with\n> > \"jgit version\", taking the whole thing down due to \"set -e\".\n> \n> Yeah, I think this is a sensible direction to go. It is unfortunate that\n> this may lead to silent breakage of these dependencies unless somebody\n> explicitly looks for those warnings. But that feels like the lesser evil\n> compared to failing the whole pipeline.\n> \n> > Signed-off-by: Junio C Hamano <gitster@pobox.com>\n> > ---\n> >  ci/install-dependencies.sh | 31 ++++++++++++++++++++++---------\n> >  1 file changed, 22 insertions(+), 9 deletions(-)\n> > \n> > diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\n> > index 0df74610d0..e51304c3b0 100755\n> > --- a/ci/install-dependencies.sh\n> > +++ b/ci/install-dependencies.sh\n> > @@ -66,16 +66,29 @@ ubuntu-*|i386/ubuntu-*|debian-*)\n> >  \t\tmkdir --parents \"$CUSTOM_PATH\"\n> >  \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> > -\t\twget --quiet \"$LFSWHENCE/git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\"\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> > +\t\t\trm -f \"$CUSTOM_PATH/p4\"\n> > +\t\t\trm -f \"$CUSTOM_PATH/p4d\"\n> > +\t\t\techo >&2 \"P4 download (optional) failed\"\n> > +\t\t}\n> \n> I think it would be preferable to only handle failure of wget as chmod\n> shouldn't ever fail if wget was successful. The same is true for the\n> other downloads -- let's be as strict as possible but allow failure of\n> those actions that depend on the network.\n\nThat is true. It would probably also make sense to mark the message as a\n`::warning::` on GitHub (and the equivalent on GitLab), so that it is\nshown a bit more prominently in the CI summary.\n\nFurther, as per Matthias Sohn's (i.e. the JGit maintainer's)\nrecommendation at\nhttps://discord.com/channels/1042895022950994071/1364872237710184520/1364886912044765216,\nthe JGit download link in particular should probably be changed to\nhttps://repo1.maven.org/maven2/org/eclipse/jgit/org.eclipse.jgit.pgm/6.8.0.202311291450-r/org.eclipse.jgit.pgm-6.8.0.202311291450-r.sh\n(which would work around the CI failures as well and could take the\npressure off of working on more graceful dependency management in Git's\nCI, but then, we don't need more time to discuss the patch in this here\nthread because it already was fast-tracked to `master`).\n\nCiao,\nJohannes\n"},{"id":"516803","messageId":"xmqqv7qsuwye.fsf@gitster.g","threadId":"63345","inReplyTo":"aAtdsURaaxYO7pVt@pks.im","subject":"Re: [PATCH] ci: skip unavailable external software","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-04-25T14:39:37Z","receivedAt":"2025-04-25T14:39:40Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Patrick Steinhardt <ps@pks.im> writes:\n\n> But shouldn't the failing wget cause an error, too? So the `|| { }`\n> cleanup branch would execute in that case and we can prune the empty\n> file there. So in other words, shouldn't the following work alright?\n>\n>     if wget --output-document=...\n>     then\n>         massage output\n>     else\n>         rm output\n>     fi\n>\n> Or am I still missing the obvious?\n\nWhile the above \"works\", what is \"obvious\" is that it is way too\nverbose and the merit of going verbose is dubious, especially given\nthat the reason that trigger the argument to favor the above\nconstruct over the more concise\n\n\twget && massage || rm\n\nis \"massage part should never fail\".\n\nWe do want to notice a failure in something, if that something is\nwhat should never fail, don't we?  Not necessarily so!\n\nOur CI jobs are not in the business of checking and ensuring wget or\nchmod keeps working.  If either of them fail, the more important\npart is its practical impact to the rest of the CI job---resulting\n\"jgit\" file is harmful to be left on disk and needs to be removed.\n\nAnother to think about this is to imagine if we are having this\nconversation, had \"wget\" had (just like its --output-document\nargument) a \"--chmod\" argument.  (wget && massage) as a unit is\nconceptually a single \"download the jgit binary\" in this case, and\nif either of them fail, we failed to download it.\n\nSo, yes, either would \"work\", but I do not think longhand is\nwarranted in this case.\n"},{"id":"516804","messageId":"xmqqr01guwuq.fsf@gitster.g","threadId":"63345","inReplyTo":"a80a320b-80ca-3d61-a4a2-f2528e7ca053@gmx.de","subject":"Re: [PATCH] ci: skip unavailable external software","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-04-25T14:41:49Z","receivedAt":"2025-04-25T14:41:52Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> That is true. It would probably also make sense to mark the message as a\n> `::warning::` on GitHub (and the equivalent on GitLab), so that it is\n> shown a bit more prominently in the CI summary.\n\n::warning:: may be a good idea, but I actually think we should\nremove the message when we say \"ah wget && chmod failed, so let's\nremove\".  At the end of the same script, there already is \"ah jgit\nis not there, so let's warn\" code exists (and it would falsely say\n\"jgit file exists but cannot be executed\" and take the whole thing\ndown if we do not remove after a failed download).  The ::warning::\nshould belong there.\n\nThanks.\n"},{"id":"516805","messageId":"aAui8hrhm1qAxGcU@ArchLinux","threadId":"63345","inReplyTo":"xmqqfrhxtdg9.fsf@gitster.g","subject":"Re: repo.eclipse.org outage breaking all our linux CI jobs","fromName":"shejialuo","fromEmail":"shejialuo@gmail.com","sentAt":"2025-04-25T14:57:54Z","receivedAt":"2025-04-25T14:57:44Z","isPatch":false,"sender":{"key":"shejialuo@gmail.com","avatar":"https://avatars.githubusercontent.com/u/56911263?v=4"},"body":"On Thu, Apr 24, 2025 at 03:13:58PM -0700, Junio C Hamano wrote:\n> As https://www.eclipsestatus.io/ reports there is no ETA for\n> recovery, and due to the failure of downloading JGit material in an\n> early stage of our CI jobs, our linux CI jobs are all failing, I am\n> very tempted to apply the following to 'maint' immediately and\n> propagate it all the way up to 'master', 'next', and 'seen'.\n> \n> I would very very much appreciate additional thoughts and advices by\n> anybody more involved in JGit community and more clueful than I am\n> on the situation.\n> \n> Anyway, what is somewhat funny is that at the end of this script,\n> there is an attempt to notice and report the lack of jgit (as well\n> as p4 and lfs) but still continuing:\n> \n> \t...\n>         if type jgit >/dev/null 2>&1\n>         then\n>                 echo \"$(tput setaf 6)JGit Version$(tput sgr0)\"\n>                 jgit version\n>         else\n>                 echo >&2 \"WARNING: JGit wasn't installed, see above for clues why\"\n>         fi\n> \n>         end_group \"Install dependencies\"\n> \n> but because ci/lib.sh does \"set -e\", we fail way before we hit this\n> code.  I am tempted to suggest we remove that \"set -e\" as a long\n> term maintainability improvement measure, but that is a separate\n> topic.\n> \n\nI want to know whether we should use the \"cache\" mechanism of CI for\nthese third-party softwares? I somehow feel strange that we would\ndownload these softwares in every CI.\n\nAnd if we have the caches, we could somehow avoid problems by hitting\nthe cache when third-party services were down. However, I do not dive\ninto the CI before, so there may be something wrong about my statement.\n\nThanks,\nJialuo\n"},{"id":"516809","messageId":"xmqqikmsuv2e.fsf@gitster.g","threadId":"63345","inReplyTo":"aAui8hrhm1qAxGcU@ArchLinux","subject":"Re: repo.eclipse.org outage breaking all our linux CI jobs","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-04-25T15:20:25Z","receivedAt":"2025-04-25T15:20:28Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"shejialuo <shejialuo@gmail.com> writes:\n\n> I want to know whether we should use the \"cache\" mechanism of CI for\n> these third-party softwares? I somehow feel strange that we would\n> download these softwares in every CI.\n\nIt also feels wasteful to me that the CI jobs need to do a full\ninstall-dependencies.sh over and over, instead of running it once\n(per platform type), dumping the state, and let all the other jobs\non the same platform type to restart from that state ;-).\n"},{"id":"516810","messageId":"20250425153827.147585-1-gitster@pobox.com","threadId":"63345","inReplyTo":"xmqqr01guwuq.fsf@gitster.g","subject":"[PATCH 0/2] ci: update unavailable external software handling","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-04-25T15:38:25Z","receivedAt":"2025-04-25T15:38:29Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"So here is a small update based on Dscho's suggestions to the change\nwe fast-tracked down to 'maint' in order to work around CI failures\ndue to eclipse.org's outage.\n\nJunio C Hamano (2):\n  ci: update the message for unavailble third-party software\n  ci: download JGit from maven, not eclipse.org\n\n ci/install-dependencies.sh | 21 ++++++++-------------\n 1 file changed, 8 insertions(+), 13 deletions(-)\n\n-- \n2.49.0-564-g9a5a794ec8\n\n"},{"id":"516811","messageId":"20250425153827.147585-2-gitster@pobox.com","threadId":"63345","inReplyTo":"20250425153827.147585-1-gitster@pobox.com","subject":"[PATCH 1/2] ci: update the message for unavailble third-party software","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-04-25T15:38:26Z","receivedAt":"2025-04-25T15:38:31Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"An earlier fix added an extra message immediately after failing to\ndownload a third-party package.  But near the end of the script,\ntheir availability is checked again and given a message.\n\nRemove the new ones added with a recent fix, as they are redundant.\nIf we were to add more places to download these software (e.g. for\nother platforms we currently do not download them on), the existing\nwarnning near the end of the script will also trigger.\n\nWhile at it, as Dscho suggests, rewrite the WARNING: label on the\nwarning message to ::warning::, which presumably should be shown a\nbit more prominently in the CI summary.\n\nSuggested-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n ci/install-dependencies.sh | 19 +++++++------------\n 1 file changed, 7 insertions(+), 12 deletions(-)\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex e51304c3b0..be20271d3c 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -71,7 +71,6 @@ ubuntu-*|i386/ubuntu-*|debian-*)\n \t\tchmod a+x \"$CUSTOM_PATH/p4d\" \"$CUSTOM_PATH/p4\" || {\n \t\t\trm -f \"$CUSTOM_PATH/p4\"\n \t\t\trm -f \"$CUSTOM_PATH/p4d\"\n-\t\t\techo >&2 \"P4 download (optional) failed\"\n \t\t}\n \n \t\twget --quiet \\\n@@ -79,16 +78,12 @@ ubuntu-*|i386/ubuntu-*|debian-*)\n \t\ttar -xzf \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\" \\\n \t\t\t-C \"$CUSTOM_PATH\" --strip-components=1 \\\n \t\t\t\"git-lfs-$LINUX_GIT_LFS_VERSION/git-lfs\" &&\n-\t\trm \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\" || {\n-\t\t\trm -f \"$CUSTOM_PATH/git-lfs\"\n-\t\t\techo >&2 \"LFS download (optional) failed\"\n-\t\t}\n+\t\trm \"git-lfs-linux-amd64-$LINUX_GIT_LFS_VERSION.tar.gz\" ||\n+\t\trm -f \"$CUSTOM_PATH/git-lfs\"\n \n \t\twget --quiet \"$JGITWHENCE\" --output-document=\"$CUSTOM_PATH/jgit\" &&\n-\t\tchmod a+x \"$CUSTOM_PATH/jgit\" || {\n-\t\t\trm -f \"$CUSTOM_PATH/jgit\"\n-\t\t\techo >&2 \"JGit download (optional) failed\"\n-\t\t}\n+\t\tchmod a+x \"$CUSTOM_PATH/jgit\" ||\n+\t\trm -f \"$CUSTOM_PATH/jgit\"\n \t\t;;\n \tesac\n \t;;\n@@ -151,7 +146,7 @@ then\n \techo \"$(tput setaf 6)Perforce Client Version$(tput sgr0)\"\n \tp4 -V\n else\n-\techo >&2 \"WARNING: perforce wasn't installed, see above for clues why\"\n+\techo >&2 \"::warning:: perforce wasn't installed, see above for clues why\"\n fi\n \n if type git-lfs >/dev/null 2>&1\n@@ -159,7 +154,7 @@ then\n \techo \"$(tput setaf 6)Git-LFS Version$(tput sgr0)\"\n \tgit-lfs version\n else\n-\techo >&2 \"WARNING: git-lfs wasn't installed, see above for clues why\"\n+\techo >&2 \"::warning:: git-lfs wasn't installed, see above for clues why\"\n fi\n \n if type jgit >/dev/null 2>&1\n@@ -167,7 +162,7 @@ then\n \techo \"$(tput setaf 6)JGit Version$(tput sgr0)\"\n \tjgit version\n else\n-\techo >&2 \"WARNING: JGit wasn't installed, see above for clues why\"\n+\techo >&2 \"::warning:: JGit wasn't installed, see above for clues why\"\n fi\n \n end_group \"Install dependencies\"\n-- \n2.49.0-564-g9a5a794ec8\n\n"},{"id":"516812","messageId":"20250425153827.147585-3-gitster@pobox.com","threadId":"63345","inReplyTo":"20250425153827.147585-1-gitster@pobox.com","subject":"[PATCH 2/2] ci: download JGit from maven, not eclipse.org","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-04-25T15:38:27Z","receivedAt":"2025-04-25T15:38:34Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"As Matthias Sohn, JGit maintainer, recommends, update the JGit\ndownload link from repo.eclipse.org to a one in maven.org\n\nHelped-by: Johannes Schindelin <johannes.schindelin@gmx.de>\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n ci/install-dependencies.sh | 2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\ndiff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh\nindex be20271d3c..d9004ab24f 100755\n--- a/ci/install-dependencies.sh\n+++ b/ci/install-dependencies.sh\n@@ -9,7 +9,7 @@ begin_group \"Install dependencies\"\n \n P4WHENCE=https://cdist2.perforce.com/perforce/r23.2\n LFSWHENCE=https://github.com/github/git-lfs/releases/download/v$LINUX_GIT_LFS_VERSION\n-JGITWHENCE=https://repo.eclipse.org/content/groups/releases//org/eclipse/jgit/org.eclipse.jgit.pgm/6.8.0.202311291450-r/org.eclipse.jgit.pgm-6.8.0.202311291450-r.sh\n+JGITWHENCE=https://repo1.maven.org/maven2/org/eclipse/jgit/org.eclipse.jgit.pgm/6.8.0.202311291450-r/org.eclipse.jgit.pgm-6.8.0.202311291450-r.sh\n \n # Make sudo a no-op and execute the command directly when running as root.\n # While using sudo would be fine on most platforms when we are root already,\n-- \n2.49.0-564-g9a5a794ec8\n\n"},{"id":"516849","messageId":"aAzp49aUREpSsCrZ@ArchLinux","threadId":"63345","inReplyTo":"xmqqikmsuv2e.fsf@gitster.g","subject":"Re: repo.eclipse.org outage breaking all our linux CI jobs","fromName":"shejialuo","fromEmail":"shejialuo@gmail.com","sentAt":"2025-04-26T14:12:51Z","receivedAt":"2025-04-26T14:12:40Z","isPatch":false,"sender":{"key":"shejialuo@gmail.com","avatar":"https://avatars.githubusercontent.com/u/56911263?v=4"},"body":"On Fri, Apr 25, 2025 at 08:20:25AM -0700, Junio C Hamano wrote:\n> shejialuo <shejialuo@gmail.com> writes:\n> \n> > I want to know whether we should use the \"cache\" mechanism of CI for\n> > these third-party softwares? I somehow feel strange that we would\n> > download these softwares in every CI.\n> \n> It also feels wasteful to me that the CI jobs need to do a full\n> install-dependencies.sh over and over, instead of running it once\n> (per platform type), dumping the state, and let all the other jobs\n> on the same platform type to restart from that state ;-).\n\nThat's right. I'll investigate how to implement this.\n"},{"id":"516873","messageId":"aA8k6XLM1Mt37Oq-@pks.im","threadId":"63345","inReplyTo":"aAzp49aUREpSsCrZ@ArchLinux","subject":"Re: repo.eclipse.org outage breaking all our linux CI jobs","fromName":"Patrick Steinhardt","fromEmail":"ps@pks.im","sentAt":"2025-04-28T06:49:13Z","receivedAt":"2025-04-28T06:49:22Z","isPatch":false,"sender":{"key":"ps@pks.im","avatar":"https://avatars.githubusercontent.com/u/4056630?v=4"},"body":"On Sat, Apr 26, 2025 at 10:12:51PM +0800, shejialuo wrote:\n> On Fri, Apr 25, 2025 at 08:20:25AM -0700, Junio C Hamano wrote:\n> > shejialuo <shejialuo@gmail.com> writes:\n> > \n> > > I want to know whether we should use the \"cache\" mechanism of CI for\n> > > these third-party softwares? I somehow feel strange that we would\n> > > download these softwares in every CI.\n> > \n> > It also feels wasteful to me that the CI jobs need to do a full\n> > install-dependencies.sh over and over, instead of running it once\n> > (per platform type), dumping the state, and let all the other jobs\n> > on the same platform type to restart from that state ;-).\n> \n> That's right. I'll investigate how to implement this.\n\nIt would be nice if we could adapt the Linux-based jobs to use\npre-seeded Docker images. The idea would be that those images are only\nbuilt once and then used by later steps of the pipeline. In theory, this\ncould even be extended so that we only rebuild images as-needed when\nsomething changes so that the images are reused for multiple pipelines.\n\nAnother big benefit would be that this results in a fully-reproducible\nenvironment for developers that can in theory be uploaded to a container\nregistry. So if you see that something fails only with a specific job\nimage, you can now trivially fetch that image and try to reproduce the\nissue in the exact same image as CI used.\n\nPatrick\n"},{"id":"516887","messageId":"aA9Y0fp2crq_izqP@ArchLinux","threadId":"63345","inReplyTo":"aA8k6XLM1Mt37Oq-@pks.im","subject":"Re: repo.eclipse.org outage breaking all our linux CI jobs","fromName":"shejialuo","fromEmail":"shejialuo@gmail.com","sentAt":"2025-04-28T10:30:41Z","receivedAt":"2025-04-28T10:30:28Z","isPatch":false,"sender":{"key":"shejialuo@gmail.com","avatar":"https://avatars.githubusercontent.com/u/56911263?v=4"},"body":"On Mon, Apr 28, 2025 at 08:49:13AM +0200, Patrick Steinhardt wrote:\n> On Sat, Apr 26, 2025 at 10:12:51PM +0800, shejialuo wrote:\n> > On Fri, Apr 25, 2025 at 08:20:25AM -0700, Junio C Hamano wrote:\n> > > shejialuo <shejialuo@gmail.com> writes:\n> > > \n> > > > I want to know whether we should use the \"cache\" mechanism of CI for\n> > > > these third-party softwares? I somehow feel strange that we would\n> > > > download these softwares in every CI.\n> > > \n> > > It also feels wasteful to me that the CI jobs need to do a full\n> > > install-dependencies.sh over and over, instead of running it once\n> > > (per platform type), dumping the state, and let all the other jobs\n> > > on the same platform type to restart from that state ;-).\n> > \n> > That's right. I'll investigate how to implement this.\n> \n> It would be nice if we could adapt the Linux-based jobs to use\n> pre-seeded Docker images. The idea would be that those images are only\n> built once and then used by later steps of the pipeline. In theory, this\n> could even be extended so that we only rebuild images as-needed when\n> something changes so that the images are reused for multiple pipelines.\n> \n\nI agree that it would be better if we provide pre-built container image.\nBut there is only one problem, which platform we should upload to? I\nsomehow know that github container registry is free for public\nrepository.\n\nSo, we may just push the image into github container registry. However,\nI am not a member of the Git organization. So, I need a help from ones\nwho have the access.\n\n> Another big benefit would be that this results in a fully-reproducible\n> environment for developers that can in theory be uploaded to a container\n> registry. So if you see that something fails only with a specific job\n> image, you can now trivially fetch that image and try to reproduce the\n> issue in the exact same image as CI used.\n> \n\nThat's right, we could easily set up the development environment to\nreplicate the problem without setting up the environment in our own\nmachine step by step.\n\n> Patrick\n\nThanks,\nJialuo\n"}]}