git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: CI behaving differently from local tests

From
Bence Ferdinandy <bence@ferdinandy.com>
Date
Oct 18, 2024, 22:32 UTC
Message-ID
<D4ZAELFWJMKN.S88LJ6YK31LZ@ferdinandy.com>
In-Reply-To
<D4YDINQ682QL.N0FD2J9C1O22@ferdinandy.com>
On Thu Oct 17, 2024 at 22:45, Bence Ferdinandy <bence@ferdinandy.com> wrote:
Show 69 quoted lines
> Hi,
>
> I'm looking at why the set-head series (cf.:
> https://lore.kernel.org/git/20241014225431.1394565-1-bence@ferdinandy.com/)
> breaks the CI. The problem stems from the local test repositories being set up
> differently from that of the CI.
>
> I ran both the CI and a local test on current master with the following patch
> applied on top, i.e. I print all remote refs and intentionally break the test
> so that the result is easy to get from the CI:
>
> diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
> index 532035933f..d625a3a8b6 100755
> --- a/t/t5505-remote.sh
> +++ b/t/t5505-remote.sh
> @@ -724,8 +724,11 @@ test_expect_success 'update' '
>  		cd one &&
>  		git remote add drosophila ../two &&
>  		git remote add apis ../mirror &&
> +		git ls-remote drosophila &&
> +		git ls-remote apis &&
>  		git remote update &&
>  		git branch -r >output &&
> +		echo "force error" >output &&
>  		test_cmp expect output
>  	)
>  '
>
> The CI gives the following output:
> https://github.com/ferdinandyb/git/actions/runs/11392309625/job/31698105287
>
>
>     + git ls-remote drosophila
>     9d34b142e42f6b3dbab46dd4b9bc515e0ab16101       HEAD
>     9d34b142e42f6b3dbab46dd4b9bc515e0ab16101       refs/heads/another
>     9d34b142e42f6b3dbab46dd4b9bc515e0ab16101       refs/heads/main
>     2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f       refs/heads/side
>     + git ls-remote apis
>     6329a3ca5268a0b28a1dc29b602e8b72a0bc1b37       HEAD
>     6329a3ca5268a0b28a1dc29b602e8b72a0bc1b37       refs/heads/main
>     2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f       refs/heads/side
>
>
> While from ./t5505-remote.sh -v I get:
>
>     9d34b142e42f6b3dbab46dd4b9bc515e0ab16101        HEAD
>     9d34b142e42f6b3dbab46dd4b9bc515e0ab16101        refs/heads/another
>     9d34b142e42f6b3dbab46dd4b9bc515e0ab16101        refs/heads/main
>     2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f        refs/heads/side
>     6329a3ca5268a0b28a1dc29b602e8b72a0bc1b37        refs/heads/main
>     2ce9c504874e3f0ce77f83c0bb0b1024c7a6387f        refs/heads/side
>
> Since `git remote update` here is essentially running `git fetch --multiple --all`,
> with the set-head series applied we're attempting to set HEAD for both
> remotes. Obviously, this fails locally and succeeds in the CI, which is
> actually the patch series behaving as intended, but obviously a drift between
> the local and the CI testing environments.
>
> I'm probably too tired right now, but I don't see how or what could make the
> mirror repo be different depending on having it locally or in the CI ... At
> least I know it's definitely not my patch series :) Does anyone have an idea
> what to try and look into?
>
> I guess ideally the fix for this would be added to the beginning of the series
> so we can continue with both local and CI tests working. (Although it could be
> marked as a know breakage as well, not so elegant).
>
> Thanks,
> Bence
I found the issue. It comes down to the CI running with
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
while this not being set in ./t5505-remote.sh.

Now the bandaid here is adding this to t5505, but it may not be the solution. The problem essentially is that `git remote add --mirror -f origin [somerepo]` does not update HEAD in a bare repository.

Consider the following:
	git config --global init.defaultBranch mypreference
	mkdir one
	cd one
	git init -b notmypreference
	git commit -m "initial commit" --allow-empty
	cd ..
	mkdir mirror
	cd mirror
	git init --bare
	git remote add --mirror -f origin ../one
	cat HEAD
You'll see HEAD is ref: refs/heads/mypreference.
Continuing
	cd ..
	mkdir r_one
	cd r_one
	git init
	git remote add origin ../mirror
	git ls-remote
We arrive at a single reference pointing to refs/heads/notmypreference.

If we do the same exercise, but instead setting up repo "one" with `git init -b mypreference` running ls-remote "r_one" will actually also yield a HEAD reference.

I'm not sure if it should or not, so for now I'll just make sure that ./t5505-remote.sh uses "main" as the default branch.

Best, Bence

-- 
bence.ferdinandy.com
Previous: Bence Ferdinandy
Message 2 of 2 in “CI behaving differently from local tests”
  1. Bence FerdinandyOct 17, 2024
  2. Bence FerdinandyOct 18, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.