cuda: support cudnn manifests

Also changes the schemas a bit (still don't care about migrations),
switches to named_params!, fixes up perf issues when ingesting manifests
and/or hrefs into sqlite, etc. Adds sample queries such as "CudaArtifact
conflicts" to datasette config, which explain some issues associated
with choosing an evalModules schema on the cudaPackages side.
This commit is contained in:
Else, Someone 2025-05-09 04:01:38 +00:00
parent 26538edf4f
commit c8b8b56456
15 changed files with 770 additions and 73 deletions

View file

@ -50,25 +50,110 @@ lib.makeScope pkgs.newScope (
datasette-wrapped = self.callPackage (
{
datasette,
datasette-metadata,
datasette-assets,
makeWrapper,
runCommand,
}:
runCommand "datasettew" { nativeBuildInputs = [ makeWrapper ]; } ''
mkdir -p "$out/bin"
makeWrapper ${lib.getExe datasette} "$out/bin/datasettew" \
--add-flags --metadata=${datasette-metadata}
''
runCommand "datasettew"
{
nativeBuildInputs = [ makeWrapper ];
preferLocalBuild = true;
allowSubstitutes = false;
}
''
mkdir -p "$out/bin"
makeWrapper ${lib.getExe datasette} "$out/bin/datasettew" \
--append-flags --metadata=${datasette-assets}/metadata.json \
--append-flags --static=static:${datasette-assets}/static
''
) { };
datasette-assets = self.callPackage (
{
runCommand,
datasette-metadata,
datasette-settings,
}:
runCommand "datasette-assets"
{
preferLocalBuild = true;
allowSubstitutes = false;
}
''
mkdir "$out"
cp --no-preserve=mode -r ${./static} "$out"/static
cp ${datasette-metadata} "$out"/metadata.json
cp ${datasette-settings} "$out"/settings.json
''
) { };
datasette-settings = self.callPackage (
{ formats }:
(formats.json { }).generate "datasette-settings.json" {
sql_time_limit_ms = 8000;
}
) { };
datasette-metadata = self.callPackage (
{ formats }:
(formats.json { }).generate "datasette-metadata.json" {
title = "CUDA INDEX";
description_html = ''
<p>Visualizing the contents of <a href="https://nixos.org/manual/nixpkgs/unstable/#cuda">Nixpkgs' cudaPackages</a>.
Generated via an <a href="https://forge.someonex.net/else/sidx">ad-hoc indexing tool</a>.
</p>
'';
"extra_css_urls" = [
"/static/some.css"
];
"databases" = {
"sidx" = {
"tables" = {
"Hash" = {
"label_column" = "hash";
};
"CudaArtifact" = {
facets = [
"pname"
"platform"
];
};
};
queries.cuda_conflicts = {
title = "CudaArtifact Conflicts";
description_html = ''
<code>CudaArtifact</code>s (identified by <code>sha256</code>)
claiming the same <code>(pname, version, platform)</code> triple
'';
sql = ''
SELECT
COUNT(DISTINCT sha256) AS conflicts,
pname.str AS pname,
ver.str AS ver,
plat.str AS plat,
GROUP_CONCAT(name.str, char(10)) AS name,
GROUP_CONCAT(tag.str, char(10)) AS tag,
GROUP_CONCAT(h.hash, char(10)) AS sha256
FROM
(
CudaArtifact AS cc,
Str AS name,
Str AS pname,
Str as ver,
Str as plat,
Hash as h
ON cc.name=name.id
AND cc.pname=pname.id
AND cc.version = ver.id
AND cc.platform = plat.id
AND cc.sha256 = h.id
)
LEFT JOIN Str AS tag
ON
cc.compat_tag=tag.id
GROUP BY
cc.pname, cc.version, cc.platform
HAVING
conflicts >= CAST(:min_conflicts AS INTEGER)
ORDER BY conflicts DESC
'';
};
};
};