|
2 | 2 | import json
|
3 | 3 | import subprocess
|
4 | 4 |
|
5 |
| -flake_meta_process = subprocess.Popen( |
6 |
| - ["nix", "flake", "show", "--json"], |
7 |
| - stdout=subprocess.PIPE, |
8 |
| - stderr=subprocess.PIPE, |
9 |
| - encoding="utf8", |
10 |
| -) |
11 |
| -flake_meta_process.wait() |
12 |
| -if flake_meta_process.returncode: |
13 |
| - print(f"Failed to get flake metadata:", file=sys.stderr) |
14 |
| - print(flake_meta_process.stderr.read(), file=sys.stderr) |
15 |
| - exit(-1) |
16 |
| -flake_meta = json.load(flake_meta_process.stdout) |
| 5 | +def run(purpose, *args): |
| 6 | + process = subprocess.Popen( |
| 7 | + [*args], |
| 8 | + stdout=subprocess.PIPE, |
| 9 | + stderr=subprocess.PIPE, |
| 10 | + encoding="utf8", |
| 11 | + ) |
| 12 | + process.wait() |
| 13 | + if process.returncode: |
| 14 | + print(f"Failed to {purpose}:", file=sys.stderr) |
| 15 | + print(process.stderr.read(), file=sys.stderr) |
| 16 | + exit(-1) |
| 17 | + return process.stdout |
| 18 | + |
| 19 | +flake_meta = json.load(run("get flake metadata", "nix", "flake", "show", "--json")) |
17 | 20 | packages = flake_meta["packages"]
|
18 | 21 | for platform, packages in packages.items():
|
19 | 22 | for package, package_info in packages.items():
|
20 |
| - if len(package_info): |
21 |
| - print(f".#packages.{platform}.{package}", end=" ") |
| 23 | + if len(package_info) == 0: |
| 24 | + continue |
| 25 | + tgt = f".#packages.{platform}.{package}" |
| 26 | + outputs = [] |
| 27 | + drv = json.load(run(f"get derivation info for {package}", "nix", "derivation", "show", tgt)) |
| 28 | + keys = list(drv.keys()) |
| 29 | + if len(keys) != 1: |
| 30 | + print(f"'nix derivation show' unexpectedly returned {len(keys)} paths, expected exactly 1: {tgt}", file=sys.stderr) |
| 31 | + exit(-1) |
| 32 | + output_list = drv[keys[0]]["outputs"] |
| 33 | + for output in output_list: |
| 34 | + print(f"{tgt}.{output}") |
0 commit comments