feat(tvix/nar-bridge): add ToNixNarInfo()
Convenience function, moves all code converting from a PathInfo struct to to go-nix's NarInfo. Change-Id: Idf0dcc38675674563f2dfd3286a4a55fa2a24a82 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9593 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: Brian McGee <brian@bmcgee.ie>
This commit is contained in:
parent
92481825b3
commit
28cd4b1a2f
5 changed files with 56 additions and 39 deletions
49
tvix/nar-bridge/pkg/http/narinfo.go
Normal file
49
tvix/nar-bridge/pkg/http/narinfo.go
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
package http
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
storev1pb "code.tvl.fyi/tvix/store/protos"
|
||||
nixhash "github.com/nix-community/go-nix/pkg/hash"
|
||||
"github.com/nix-community/go-nix/pkg/narinfo"
|
||||
"github.com/nix-community/go-nix/pkg/narinfo/signature"
|
||||
"github.com/nix-community/go-nix/pkg/nixbase32"
|
||||
)
|
||||
|
||||
// ToNixNarInfo converts the PathInfo to a narinfo.NarInfo.
|
||||
func ToNixNarInfo(p *storev1pb.PathInfo) (*narinfo.NarInfo, error) {
|
||||
// ensure the PathInfo is valid, and extract the StorePath from the node in
|
||||
// there.
|
||||
storePath, err := p.Validate()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to validate PathInfo: %w", err)
|
||||
}
|
||||
|
||||
// convert the signatures from storev1pb signatures to narinfo signatures
|
||||
narinfoSignatures := make([]signature.Signature, len(p.GetNarinfo().GetSignatures()))
|
||||
for i, pathInfoSignature := range p.GetNarinfo().GetSignatures() {
|
||||
narinfoSignatures[i] = signature.Signature{
|
||||
Name: pathInfoSignature.GetName(),
|
||||
Data: pathInfoSignature.GetData(),
|
||||
}
|
||||
}
|
||||
|
||||
// produce nixhash for the narsha256.
|
||||
narHash, err := nixhash.FromHashTypeAndDigest(
|
||||
0x12, // SHA2_256
|
||||
p.GetNarinfo().GetNarSha256(),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid narsha256: %w", err)
|
||||
}
|
||||
|
||||
return &narinfo.NarInfo{
|
||||
StorePath: storePath.Absolute(),
|
||||
URL: "nar/" + nixbase32.EncodeToString(narHash.Digest()) + ".nar",
|
||||
Compression: "none",
|
||||
NarHash: narHash,
|
||||
NarSize: uint64(p.GetNarinfo().GetNarSize()),
|
||||
References: p.GetNarinfo().GetReferenceNames(),
|
||||
Signatures: narinfoSignatures,
|
||||
}, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue