Description
Description
Hello, Sigstore's model-signing
library uses sigstore-python
, which in turn uses python-tuf
.
We've had some intermittent test failures (sigstore/model-transparency#465) when we have multiple Sigstore signers, which launch multiple trusted roots and lead to some known concurrency errors. TUF's documentation says not to have multiple Updater
s
Note that applications using
Updater
should be 'single instance'
applications: running multiple instances that use the same cache directories at
the same time is not supported.
The callstack is roughly this:
~/model-transparency/src/model_signing/signing.py:147: in use_sigstore_signer
self._signer = sigstore.Signer(
~/model-transparency/src/model_signing/_signing/sign_sigstore.py:93: in __init__
self._signing_context = sigstore_signer.SigningContext.production()
~/.local/share/hatch/env/virtual/model-signing/VsHuyp0T/hatch-test.py3.12/lib/python3.12/site-packages/sigstore/sign.py:334: in production
trusted_root=TrustedRoot.production(),
This scenario is in violation of TUF's concurrency support, but does/should Sigstore python support this scenario? If not, can you update your documentation to clarify this?
self = <tuf.ngclient.updater.Updater object at 0x000001C69D7A5050>
def _update_root_symlink(self) -> None:
"""Symlink root.json to current trusted root version in root_history/"""
linkname = os.path.join(self._dir, "root.json")
version = self._trusted_set.root.version
current = os.path.join("root_history", f"{version}.root.json")
with contextlib.suppress(FileNotFoundError):
os.remove(linkname)
> os.symlink(current, linkname)
E FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'root_history\\12.root.json' -> 'C:\\Users\\runneradmin\\AppData\\Local\\sigstore\\sigstore-python\\tuf\\https%3A%2F%2Ftuf-repo-cdn.sigstore.dev\\root.json'
I've only seen it on our Windows runners, but haven't looked into it too much yet.
https://github.com/sigstore/model-transparency/actions/runs/15144309667/job/42576120558#step:4:100
https://github.com/sigstore/model-transparency/actions/runs/15165373394/job/42641686030#step:4:102
Version
sigstore 3.6.2