diff options
author | Florian Klink <flokli@flokli.de> | 2023-10-09T15·23+0200 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2023-10-09T22·05+0000 |
commit | 28cd4b1a2f98759dc33390db78f328f20f2db515 (patch) | |
tree | 880ac973a14c38cb0385330e0c5085f063af096e /tvix/nar-bridge/pkg/http/narinfo.go | |
parent | 92481825b36f914bc99cbb15d560865d808b2306 (diff) |
feat(tvix/nar-bridge): add ToNixNarInfo() r/6758
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>
Diffstat (limited to 'tvix/nar-bridge/pkg/http/narinfo.go')
-rw-r--r-- | tvix/nar-bridge/pkg/http/narinfo.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tvix/nar-bridge/pkg/http/narinfo.go b/tvix/nar-bridge/pkg/http/narinfo.go new file mode 100644 index 000000000000..5d963c34f91d --- /dev/null +++ b/tvix/nar-bridge/pkg/http/narinfo.go @@ -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 +} |