git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Eric W. Biederman" <ebiederm@xmission.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Todd Zullinger <tmz@pobox.com>,
	 git@vger.kernel.org,  Kousik Sanagavarapu <five231003@gmail.com>,
	 brian m. carlson <sandals@crustytoothpaste.net>
Subject: Re: [PATCH 0/2] t/lib-gpg: ensure GNUPGHOME is created as needed
Date: Mon, 27 Oct 2025 11:16:45 -0500	[thread overview]
Message-ID: <87zf9c8glu.fsf@email.froward.int.ebiederm.org> (raw)
In-Reply-To: <xmqqbjlump3m.fsf@gitster.g> (Junio C. Hamano's message of "Sat, 25 Oct 2025 18:25:01 -0700")

Junio C Hamano <gitster@pobox.com> writes:

> Todd Zullinger <tmz@pobox.com> writes:
>
>> I've intended to dig into it further over the past few
>> months but have not managed to spend enough time to work out
>> the root of the problem.
>>
>> I hope that someone more familiar with these tests (or
>> perhaps someone with fresh eyes) will spot the problem.
>>> 
>>> A number of these fail, e.g.:
>>> 
>>> https://github.com/tmzullinger/git/actions/runs/9780387020/job/27001952643#step:4:1871
>>> 
>>>     Error: failed: t1016.173 Verify commit signedcommit4's sha1 oid
>>>     failure: t1016.173 Verify commit signedcommit4's sha1 oid 
>>> 	    git --git-dir=repo-sha256/.git rev-parse --output-object-format=sha1 ${sha256_oid} > ${name}_sha1 &&
>>> 	    test_cmp ${name}_sha1 ${name}_sha1_expected
>>>       
>>>       + git --git-dir=repo-sha256/.git rev-parse --output-object-format=sha1 5d70155cc40e4c16515c89ad0b11d8c691436fc4a4d3ca246669a4c21f07e454
>>>       + test_cmp signedcommit4_sha1 signedcommit4_sha1_expected
>>>       + test 2 -ne 2
>>>       + eval diff -u "$@"
>>>       + diff -u signedcommit4_sha1 signedcommit4_sha1_expected
>>>       --- signedcommit4_sha1	2024-07-03 15:11:05.597537579 +0000
>>>       +++ signedcommit4_sha1_expected	2024-07-03 15:11:05.553537766 +0000
>>>       @@ -1 +1 @@
>>>       -9179ccc5b15588bc3a45c5cc75bdec380f8ccb86
>>>       +c6c46f92bc2cfda57ad6bf7981fa654825376b24
>>>       error: last command exited with $?=1
>>>       not ok 173 - Verify commit signedcommit4's sha1 oid
>>>       #	
>>>       #		git --git-dir=repo-sha256/.git rev-parse --output-object-format=sha1 ${sha256_oid} > ${name}_sha1 &&
>>>       #		test_cmp ${name}_sha1 ${name}_sha1_expected
>>>       #	
>>> 
>>> This seems like it's just exposing a pre-existing failure,
>>> as I can't imagine how creating GNUPGHOME would cause the
>>> actual and expected SHA's to differ. :)

Hmm. Let me see.

The test goes through and creates 2 repositories, one sha1 and the other
sha256.

In those repositories a gpg signed commit is created.
That gpg signed commit should contain both the signed sha1
and the signed sha256 gpg signatures.  As both object-format
and compat-object-format are set in the config.

Then the commit is extracted and one of the signatures removed.

Then the oid of the signed commit with only a single signed gpg
signature is computed.

In the sha256 repository the sha256 oid is given to get the sha1 oid.

That sha1 oid is of the signed gpg commit is compared with the
previously computed sha1 oid.

So I think a messed up GNUPGHOME could result in the wrong signing
key being used.  Though how that signing key could be inconsistent
from one part of the test to the other I don't know.

Not seeing t/t1016/gpg as the gpg program does look like a more
likely cause of the error there.

>>> 
>>> Perhaps the intended gpg wrapper script which sets
>>> `--faked-system-time` isn't being used?
>>> 
>>> I'm not sure why that would differ in the Github actions
>>> from my local builds, but I don't know what else differs in
>>> the Ubuntu images and/or environment used by the actions.
>>
>> I have run a good number of builds with the patches applied
>> and t1016-compatObjectFormat regularly fails for all of the
>> tests which use the GPG2 prereq.  A recent Github CI run is
>> here:
>>
>>     https://github.com/tmzullinger/git/actions/runs/13570544425
>>
>> I think this test flakiness should be fixed so that we can
>> apply the patch to fix the GPG2 prereq.  As it is, we're
>> skipping _all_ of the tests which require GPG2.
>
> Any progress or responses?  All of these tests, that nobody seemed
> to have caught breakage of because they weren't being run anyway,
> seem to be flakey with the new GNUPGHOME set-up.
>
> I am tempted to do this in the meantime, but I'd really prefer not
> to have to do so, assuming that these tests, when fixed, would be
> materially contributing to the health of our codebase.

I just dug into this a little and hopefully I have paged enough
state back to understand this.

In my testing a missing GNUPGHOME appears enough to prevent the
prerequisite from succeeding. So let's fix that. Todd Zullinger's sent
some nice patches to do that (up-thread), or you can take use my minimal
version.

The only possible source of flakiness in the tests I can see is the
possibility of t/t1016/gpg not getting called (which uses a fixed
timestamp).  It appears you just fixed that problem in commit
516bf45749bb ("t1016: make sure to use specified GPG").

With that commit reverted I can reproduce the flakiness locally
by just running the test manually a few times.

I believe I used the GPG2 prereq because I don't have the older version
of GPG to test with.  So I don't know if t1016 would work on the older
version of GPG or not.


diff --git a/t/lib-gpg.sh b/t/lib-gpg.sh
index 937b876bd052..c4bbedfe081e 100644
--- a/t/lib-gpg.sh
+++ b/t/lib-gpg.sh
@@ -62,6 +62,8 @@ test_lazy_prereq GPG2 '
 		exit 1
 		;;
 	*)
+		mkdir "$GNUPGHOME" &&
+		chmod 0700 "$GNUPGHOME" &&
 		(gpgconf --kill all || : ) &&
 		gpg --homedir "${GNUPGHOME}" --import \
 			"$TEST_DIRECTORY"/lib-gpg/keyring.gpg &&


Eric

  reply	other threads:[~2025-10-27 16:52 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-03 15:37 [PATCH 0/2] t/lib-gpg: ensure GNUPGHOME is created as needed Todd Zullinger
2024-07-03 15:37 ` [PATCH 1/2] t/lib-gpg: add prepare_gnupghome() to create GNUPGHOME dir Todd Zullinger
2024-07-03 15:37 ` [PATCH 2/2] t/lib-gpg: call prepare_gnupghome() in GPG2 prereq Todd Zullinger
2024-07-03 16:29 ` [PATCH 0/2] t/lib-gpg: ensure GNUPGHOME is created as needed Todd Zullinger
2025-02-28 15:26   ` Todd Zullinger
2025-10-26  1:25     ` Junio C Hamano
2025-10-27 16:16       ` Eric W. Biederman [this message]
2025-10-27 17:38         ` Junio C Hamano
2025-10-27 19:03           ` Eric W. Biederman
2025-10-27 19:32             ` Eric W. Biederman
2025-10-27 20:32               ` Junio C Hamano
2025-10-28 16:01                 ` [PATCH] t1016-compatObjectFormat: Really freeze time for reproduciblity Eric W. Biederman
2025-10-28 17:15                   ` Junio C Hamano
2025-10-29  3:05                     ` Todd Zullinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87zf9c8glu.fsf@email.froward.int.ebiederm.org \
    --to=ebiederm@xmission.com \
    --cc=five231003@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=sandals@crustytoothpaste.net \
    --cc=tmz@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).