ResolveFlake runs `nix flake metadata` for the given ref. When refresh is true, `--refresh` is passed so nix bypasses its own eval/tarball cache and re-queries the upstream (e.g. GitHub) — use this on `devbox update`, not on paths like Add where stale-but-cached results are fine.
(ctx context.Context, ref flake.Ref, refresh bool)
| 27 | // re-queries the upstream (e.g. GitHub) — use this on `devbox update`, not on |
| 28 | // paths like Add where stale-but-cached results are fine. |
| 29 | func ResolveFlake(ctx context.Context, ref flake.Ref, refresh bool) (FlakeMetadata, error) { |
| 30 | args := []any{"flake", "metadata", "--json"} |
| 31 | if refresh { |
| 32 | args = append(args, "--refresh") |
| 33 | } |
| 34 | args = append(args, ref) |
| 35 | cmd := Command(args...) |
| 36 | out, err := cmd.Output(ctx) |
| 37 | if err != nil { |
| 38 | return FlakeMetadata{}, err |
| 39 | } |
| 40 | meta := FlakeMetadata{} |
| 41 | err = json.Unmarshal(out, &meta) |
| 42 | if err != nil { |
| 43 | return FlakeMetadata{}, err |
| 44 | } |
| 45 | return meta, nil |
| 46 | } |
| 47 | |
| 48 | func ResolveCachedFlake(ctx context.Context, ref flake.Ref) (FlakeMetadata, error) { |
| 49 | return flakeFileCache.GetOrSet(ref.String(), func() (FlakeMetadata, time.Duration, error) { |
no test coverage detected