Skip to content

Commit 7045e6d

Browse files
authored
Fix CLI ignore-path resolution
Fix CLI ignore-path resolution
2 parents 456446d + d60f77a commit 7045e6d

File tree

1 file changed

+47
-28
lines changed

1 file changed

+47
-28
lines changed

src/model_signing/_cli.py

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,21 @@ def set_attribute(self, key, value):
149149
)
150150

151151

152+
def _resolve_ignore_paths(
153+
model_path: pathlib.Path, paths: Iterable[pathlib.Path]
154+
) -> list[pathlib.Path]:
155+
model_root = model_path.resolve()
156+
cwd = pathlib.Path.cwd()
157+
resolved_paths = []
158+
for p in paths:
159+
candidate = (p if p.is_absolute() else (cwd / p)).resolve()
160+
try:
161+
resolved_paths.append(candidate.relative_to(model_root))
162+
except ValueError:
163+
continue
164+
return resolved_paths
165+
166+
152167
class _PKICmdGroup(click.Group):
153168
"""A custom group to configure the supported PKI methods."""
154169

@@ -336,6 +351,9 @@ def _sign_sigstore(
336351
)
337352
span.set_attribute("sigstore.use_staging", use_staging)
338353
try:
354+
ignored = _resolve_ignore_paths(
355+
model_path, list(ignore_paths) + [signature]
356+
)
339357
model_signing.signing.Config().use_sigstore_signer(
340358
use_ambient_credentials=use_ambient_credentials,
341359
use_staging=use_staging,
@@ -346,8 +364,7 @@ def _sign_sigstore(
346364
).set_hashing_config(
347365
model_signing.hashing.Config()
348366
.set_ignored_paths(
349-
paths=list(ignore_paths) + [signature],
350-
ignore_git_paths=ignore_git_paths,
367+
paths=ignored, ignore_git_paths=ignore_git_paths
351368
)
352369
.set_allow_symlinks(allow_symlinks)
353370
).sign(model_path, signature)
@@ -394,14 +411,14 @@ def _sign_private_key(
394411
management protocols.
395412
"""
396413
try:
414+
ignored = _resolve_ignore_paths(
415+
model_path, list(ignore_paths) + [signature]
416+
)
397417
model_signing.signing.Config().use_elliptic_key_signer(
398418
private_key=private_key, password=password
399419
).set_hashing_config(
400420
model_signing.hashing.Config()
401-
.set_ignored_paths(
402-
paths=list(ignore_paths) + [signature],
403-
ignore_git_paths=ignore_git_paths,
404-
)
421+
.set_ignored_paths(paths=ignored, ignore_git_paths=ignore_git_paths)
405422
.set_allow_symlinks(allow_symlinks)
406423
).sign(model_path, signature)
407424
except Exception as err:
@@ -440,14 +457,14 @@ def _sign_pkcs11_key(
440457
management protocols.
441458
"""
442459
try:
460+
ignored = _resolve_ignore_paths(
461+
model_path, list(ignore_paths) + [signature]
462+
)
443463
model_signing.signing.Config().use_pkcs11_signer(
444464
pkcs11_uri=pkcs11_uri
445465
).set_hashing_config(
446466
model_signing.hashing.Config()
447-
.set_ignored_paths(
448-
paths=list(ignore_paths) + [signature],
449-
ignore_git_paths=ignore_git_paths,
450-
)
467+
.set_ignored_paths(paths=ignored, ignore_git_paths=ignore_git_paths)
451468
.set_allow_symlinks(allow_symlinks)
452469
).sign(model_path, signature)
453470
except Exception as err:
@@ -493,16 +510,16 @@ def _sign_certificate(
493510
Note that we don't offer certificate and key management protocols.
494511
"""
495512
try:
513+
ignored = _resolve_ignore_paths(
514+
model_path, list(ignore_paths) + [signature]
515+
)
496516
model_signing.signing.Config().use_certificate_signer(
497517
private_key=private_key,
498518
signing_certificate=signing_certificate,
499519
certificate_chain=certificate_chain,
500520
).set_hashing_config(
501521
model_signing.hashing.Config()
502-
.set_ignored_paths(
503-
paths=list(ignore_paths) + [signature],
504-
ignore_git_paths=ignore_git_paths,
505-
)
522+
.set_ignored_paths(paths=ignored, ignore_git_paths=ignore_git_paths)
506523
.set_allow_symlinks(allow_symlinks)
507524
).sign(model_path, signature)
508525
except Exception as err:
@@ -549,16 +566,16 @@ def _sign_pkcs11_certificate(
549566
Note that we don't offer certificate and key management protocols.
550567
"""
551568
try:
569+
ignored = _resolve_ignore_paths(
570+
model_path, list(ignore_paths) + [signature]
571+
)
552572
model_signing.signing.Config().use_pkcs11_certificate_signer(
553573
pkcs11_uri=pkcs11_uri,
554574
signing_certificate=signing_certificate,
555575
certificate_chain=certificate_chain,
556576
).set_hashing_config(
557577
model_signing.hashing.Config()
558-
.set_ignored_paths(
559-
paths=list(ignore_paths) + [signature],
560-
ignore_git_paths=ignore_git_paths,
561-
)
578+
.set_ignored_paths(paths=ignored, ignore_git_paths=ignore_git_paths)
562579
.set_allow_symlinks(allow_symlinks)
563580
).sign(model_path, signature)
564581
except Exception as err:
@@ -636,15 +653,17 @@ def _verify_sigstore(
636653
span.set_attribute("sigstore.oidc_issuer", identity_provider)
637654
span.set_attribute("sigstore.use_staging", use_staging)
638655
try:
656+
ignored = _resolve_ignore_paths(
657+
model_path, list(ignore_paths) + [signature]
658+
)
639659
model_signing.verifying.Config().use_sigstore_verifier(
640660
identity=identity,
641661
oidc_issuer=identity_provider,
642662
use_staging=use_staging,
643663
).set_hashing_config(
644664
model_signing.hashing.Config()
645665
.set_ignored_paths(
646-
paths=list(ignore_paths) + [signature],
647-
ignore_git_paths=ignore_git_paths,
666+
paths=ignored, ignore_git_paths=ignore_git_paths
648667
)
649668
.set_allow_symlinks(allow_symlinks)
650669
).set_ignore_unsigned_files(ignore_unsigned_files).verify(
@@ -694,14 +713,14 @@ def _verify_private_key(
694713
management protocols.
695714
"""
696715
try:
716+
ignored = _resolve_ignore_paths(
717+
model_path, list(ignore_paths) + [signature]
718+
)
697719
model_signing.verifying.Config().use_elliptic_key_verifier(
698720
public_key=public_key
699721
).set_hashing_config(
700722
model_signing.hashing.Config()
701-
.set_ignored_paths(
702-
paths=list(ignore_paths) + [signature],
703-
ignore_git_paths=ignore_git_paths,
704-
)
723+
.set_ignored_paths(paths=ignored, ignore_git_paths=ignore_git_paths)
705724
.set_allow_symlinks(allow_symlinks)
706725
).set_ignore_unsigned_files(ignore_unsigned_files).verify(
707726
model_path, signature
@@ -756,15 +775,15 @@ def _verify_certificate(
756775
logging.basicConfig(format="%(message)s", level=logging.INFO)
757776

758777
try:
778+
ignored = _resolve_ignore_paths(
779+
model_path, list(ignore_paths) + [signature]
780+
)
759781
model_signing.verifying.Config().use_certificate_verifier(
760782
certificate_chain=certificate_chain,
761783
log_fingerprints=log_fingerprints,
762784
).set_hashing_config(
763785
model_signing.hashing.Config()
764-
.set_ignored_paths(
765-
paths=list(ignore_paths) + [signature],
766-
ignore_git_paths=ignore_git_paths,
767-
)
786+
.set_ignored_paths(paths=ignored, ignore_git_paths=ignore_git_paths)
768787
.set_allow_symlinks(allow_symlinks)
769788
).set_ignore_unsigned_files(ignore_unsigned_files).verify(
770789
model_path, signature

0 commit comments

Comments
 (0)