Merge staging-next into staging

This commit is contained in:
nixpkgs-ci[bot]
2025-10-17 12:08:07 +00:00
committed by GitHub
33 changed files with 199 additions and 70 deletions

View File

@@ -246,6 +246,9 @@
"sec-meta-identifiers-cpe": [
"index.html#sec-meta-identifiers-cpe"
],
"sec-meta-identifiers-purl": [
"index.html#sec-meta-identifiers-purl"
],
"sec-modify-via-packageOverrides": [
"index.html#sec-modify-via-packageOverrides"
],
@@ -667,6 +670,15 @@
"var-meta-identifiers-possibleCPEs": [
"index.html#var-meta-identifiers-possibleCPEs"
],
"var-meta-identifiers-purl": [
"index.html#var-meta-identifiers-purl"
],
"var-meta-identifiers-purlParts": [
"index.html#var-meta-identifiers-purlParts"
],
"var-meta-identifiers-purls": [
"index.html#var-meta-identifiers-purls"
],
"var-meta-teams": [
"index.html#var-meta-teams"
],

View File

@@ -255,6 +255,8 @@
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
- Metadata identifier purl (Package URL, https://github.com/package-url/purl-spec) has been added for fetchgit, fetchpypi and fetchFromGithub fetchers and mkDerivation has been adjusted to reuse these informations. Package URL's enables a reliable identification and locatization of software packages. Maintainers of derivations using the adopted fetchers should rely on the `drv.src.meta.identifiers.v1.purl` default identifier and can enhance their `drv.meta.identifiers.v1.purls` list once they would like to have additional identifiers. Maintainers using fetchurl for `drv.src` are urged to adopt their `drv.meta.identifiers.purlParts` for proper identification.
- Added `rewriteURL` attribute to the nixpkgs `config`, to allow for rewriting the URLs downloaded by `fetchurl`.
- Added `hashedMirrors` attribute to the nixpkgs `config`, to allow for customization of the hashed mirrors used by `fetchurl`.

View File

@@ -319,3 +319,22 @@ A readonly attribute that concatenates all CPE parts in one string.
#### `meta.identifiers.possibleCPEs` {#var-meta-identifiers-possibleCPEs}
A readonly attribute containing the list of guesses for what CPE for this package can look like. It includes all variants of version handling mentioned above. Each item is an attrset with attributes `cpeParts` and `cpe` for each guess.
### Package URL {#sec-meta-identifiers-purl}
[Package-URL](https://github.com/package-url/purl-spec) (PURL) is a specification to reliably identify and locate software packages. Through identification of software packages, additional (non-major) use cases are e.g. software license cross-verification via third party databases or initial vulnerability response management. Package URL's default to the mkDerivation.src, as the original consumed software package is the single point of truth.
#### `meta.identifiers.purlParts` {#var-meta-identifiers-purlParts}
This attribute contains an attribute set of all parts of the PURL for this package.
* `type` mandatory [type](https://github.com/package-url/purl-spec/blob/18fd3e395dda53c00bc8b11fe481666dc7b3807a/docs/standard/summary.md) which needs to be provided
* `spec` specify the PURL in accordance with the [purl-spec](https://github.com/package-url/purl-spec/blob/18fd3e395dda53c00bc8b11fe481666dc7b3807a/purl-specification.md)
#### `meta.identifiers.purl` {#var-meta-identifiers-purl}
An extendable attribute which is built based on purlParts. It is the main identifier, consumers should consider using the PURL's list interface to be prepared for edge cases.
#### `meta.identifiers.purls` {#var-meta-identifiers-purls}
An extendable attribute list which defaults to a single element equal to the main PURL. It provides an interface for additional identifiers of mkDerivation.src and / or vendored dependencies inside mkDerivation.src, which maintainers can conciously decide to use on top. Identifiers different to the default src identifier are not recommended by default as they might cause maintenance overhead or may diverge (e.g. differences between source distribution pkg:github and binary distribution like pkg:pypi).

View File

@@ -24,8 +24,8 @@ let
sha256Hash = "sha256-KrKUsA7wFeI7IBa9VOp+MERqWIiMnNzLFO8oF0rCiIw=";
};
latestVersion = {
version = "2025.2.1.5"; # "Android Studio Otter | 2025.2.1 Canary 5"
sha256Hash = "sha256-Slpp29OMpG4i/9ykYBF/KMwnBgOTSuqObZrfdcMfDbQ=";
version = "2025.2.2.1"; # "Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 1"
sha256Hash = "sha256-sSp9IpGpo7pE0x7C5wSmZiGKt2uLoUlNVh7NHF4j/N4=";
};
in
{

View File

@@ -13,13 +13,13 @@
}:
mkLibretroCore {
core = "ppsspp";
version = "0-unstable-2025-09-30";
version = "0-unstable-2025-10-17";
src = fetchFromGitHub {
owner = "hrydgard";
repo = "ppsspp";
rev = "2f4b1adc98d36a4d3fdd0a413d65a7a0b306ed4c";
hash = "sha256-9azuw2uCwc1cpqnrqCBGp4uS2AHOc2gBJIaOTSullvs=";
rev = "4ccf013d3b52314b935d8fc49b70f08d546aa48b";
hash = "sha256-e1iqnhJQKYXddp3VwpAPg6eHBnDHOFvo1b4evp8f8X4=";
fetchSubmodules = true;
};

View File

@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "vbam";
version = "0-unstable-2024-10-21";
version = "0-unstable-2025-10-17";
src = fetchFromGitHub {
owner = "libretro";
repo = "vbam-libretro";
rev = "379dd97301458a51fb69dd93ba21b64f81e01ef2";
hash = "sha256-UbXSHdKfa91MpcYityo+aILbI0DfkLqZh8YfGcRx/BI=";
rev = "badf47c0e050983e44ac1217033283ca78313298";
hash = "sha256-PwqwG+YMgdWNMoWx0mdUIBebQBMgaFd8BiI27xSUhps=";
};
makefile = "Makefile";

View File

@@ -190,7 +190,18 @@ lib.makeOverridable (
"FETCHGIT_HTTP_PROXIES"
];
inherit preferLocalBuild meta allowedRequisites;
inherit preferLocalBuild allowedRequisites;
meta = meta // {
identifiers = {
purlParts = {
type = "generic";
# https://github.com/package-url/purl-spec/blob/18fd3e395dda53c00bc8b11fe481666dc7b3807a/types-doc/generic-definition.md
spec = "${name}?vcs_url=${url}@${(lib.revOrTag rev tag)}";
};
}
// meta.identifiers or { };
};
passthru = {
gitRepoUrl = url;

View File

@@ -47,11 +47,28 @@ lib.makeOverridable (
meta
// {
homepage = meta.homepage or baseUrl;
identifiers = {
purlParts =
if githubBase == "github.com" then
{
type = "github";
# https://github.com/package-url/purl-spec/blob/18fd3e395dda53c00bc8b11fe481666dc7b3807a/types-doc/github-definition.md
spec = "${owner}/${repo}@${(lib.revOrTag rev tag)}";
}
else
{
type = "generic";
# https://github.com/package-url/purl-spec/blob/18fd3e395dda53c00bc8b11fe481666dc7b3807a/types-doc/generic-definition.md
spec = "${repo}?vcs_url=https://${githubBase}/${owner}/${repo}@${(lib.revOrTag rev tag)}";
};
}
// meta.identifiers or { };
}
// lib.optionalAttrs (position != null) {
# to indicate where derivation originates, similar to make-derivation.nix's mkDerivation
position = "${position.file}:${toString position.line}";
};
passthruAttrs = removeAttrs args [
"owner"
"repo"
@@ -155,12 +172,12 @@ lib.makeOverridable (
// passthruAttrs
// {
inherit name;
meta = newMeta;
};
in
fetcher fetcherArgs
// {
meta = newMeta;
inherit owner repo tag;
rev = revWithTag;
}

View File

@@ -51,6 +51,8 @@ makeOverridable (
format ? "setuptools",
sha256 ? "",
hash ? "",
pname,
version,
...
}@attrs:
let
@@ -60,8 +62,20 @@ makeOverridable (
"hash"
]
);
meta = {
identifiers.purlParts = {
type = "pypi";
# https://github.com/package-url/purl-spec/blob/18fd3e395dda53c00bc8b11fe481666dc7b3807a/types-doc/pypi-definition.md
spec = "${pname}@${version}";
};
};
in
fetchurl {
inherit url sha256 hash;
inherit
url
sha256
hash
meta
;
}
)

View File

@@ -16,11 +16,11 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "angular-language-server";
version = "20.2.2";
version = "20.3.0";
src = fetchurl {
name = "angular-language-server-${finalAttrs.version}.zip";
url = "https://github.com/angular/vscode-ng-language-service/releases/download/v${finalAttrs.version}/ng-template.vsix";
hash = "sha256-2I5Pmd05zNGjM15tFo2yw6AGUKp3zxufVcoe4oSAO5U=";
hash = "sha256-o3e2qVKw/sfnFHbHHdRlB9UjEx1KLD1KVoaAsnlYjmY=";
};
nativeBuildInputs = [

View File

@@ -24,8 +24,8 @@ mkDerivation {
pname = "bruijn";
version = "0.1.0.0";
src = fetchzip {
url = "https://github.com/marvinborner/bruijn/archive/31ba54046e33618905fc99e0b079bd3aa2594284.tar.gz";
sha256 = "11b3i32y36i29haym4agn1pgik20byldihgs2qsi5p7vy17z0a78";
url = "https://github.com/marvinborner/bruijn/archive/3e9636b4c0c37f5c5df509e30fb37564464e5850.tar.gz";
sha256 = "0pk6vyw03ys0jp1na0m3kz5k0x4xqr9zcna8c53dzkzlk5h5d85z";
};
isLibrary = true;
isExecutable = true;

View File

@@ -1 +1 @@
0-unstable-2025-09-28
0-unstable-2025-10-09

View File

@@ -9,16 +9,16 @@
}:
rustPlatform.buildRustPackage {
pname = "cosmic-ext-applet-caffeine";
version = "0-unstable-2025-09-29";
version = "0-unstable-2025-10-16";
src = fetchFromGitHub {
owner = "tropicbliss";
repo = "cosmic-ext-applet-caffeine";
rev = "a43db670e03894ff402fa19eec3d60f7c7bf663c";
hash = "sha256-0hIc62FdjIGU028z8/WCx2q317e+PCA25CSibBVi/p0=";
rev = "0b50a109495d02ab8c99a501d2dd7575c6fabc1b";
hash = "sha256-Z84LqsPVGd7PfOUmC1iJWgTGrl6FicaxZHwTZmgmAyk=";
};
cargoHash = "sha256-nl/giMIQ5xNSOgjv67OMWkfuAVtdIcqZDbXC1mYwXBM=";
cargoHash = "sha256-TC7WNJUxGZpfDbDgnifBSZM7SvN2/Iw0HRXWPDXnDBM=";
nativeBuildInputs = [
libcosmicAppHook

View File

@@ -19,13 +19,13 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "cosmic-reader";
version = "0-unstable-2025-10-09";
version = "0-unstable-2025-10-12";
src = fetchFromGitHub {
owner = "pop-os";
repo = "cosmic-reader";
rev = "8d02b136b0b558de09a2de0c99511a8bf0bb99cd";
hash = "sha256-ldmrn2R6gZ+heXARqsMShWCDazH8MGA9Rm2M65T1aqI=";
rev = "35bf8c556bbff415e1149d7cbf267d2b6ff6f300";
hash = "sha256-721Y1VbBPWMXcH8rt5AyO2GFV1Q70kHnG4TAPmeX414=";
};
cargoHash = "sha256-4ofAtZN3FpYwNahinldALbdEJA5lDwa+CUsVIISnSTc=";

View File

@@ -28,14 +28,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "eloquent";
version = "1.2";
version = "1.3";
src = fetchFromGitHub {
owner = "sonnyp";
repo = "Eloquent";
tag = "v${finalAttrs.version}";
fetchSubmodules = true;
hash = "sha256-I4AQZl1zoZPhOwDR1uYNJTMRq5vQHPvyimC8OUAe+vY=";
hash = "sha256-+XAiRB5dRq2A2XP9ZdmIfxLjhCXb72TXRxnLnOprNT4=";
};
nativeBuildInputs = [

View File

@@ -7,13 +7,14 @@
python3Packages,
unstableGitUpdater,
fetchpatch2,
writableTmpDirAsHomeHook,
extraLibs ? [ ],
}:
python3Packages.buildPythonApplication rec {
# i3pystatus moved to rolling release:
# https://github.com/enkore/i3pystatus/issues/584
version = "3.35-unstable-2024-06-13";
version = "3.35-unstable-2025-06-24";
pname = "i3pystatus";
pyproject = true;
build-system = [ python3Packages.setuptools ];
@@ -21,8 +22,8 @@ python3Packages.buildPythonApplication rec {
src = fetchFromGitHub {
owner = "enkore";
repo = "i3pystatus";
rev = "f3c539ad78ad1c54fc36e8439bf3905a784ccb34";
hash = "sha256-3AGREY+elHQk8kaoFp8AHEzk2jNC/ICGYPh2hXo2G/w=";
rev = "e8e03934d95658c85fa9f594987dac0481ca26c9";
hash = "sha256-uAt6jxNAUR9txyPtHS4BRtu8Z5QaP6uqFg0sROf356c=";
};
patches = [
@@ -41,7 +42,10 @@ python3Packages.buildPythonApplication rec {
libnotify
];
nativeCheckInputs = [ python3Packages.pytestCheckHook ];
nativeCheckInputs = [
python3Packages.pytestCheckHook
writableTmpDirAsHomeHook
];
checkInputs = [ python3Packages.requests ];

View File

@@ -134,5 +134,9 @@ stdenv.mkDerivation (finalAttrs: {
];
platforms = lib.platforms.unix;
mainProgram = "jq";
identifiers.purlParts = {
type = "github";
spec = "jqlang/jq@jq-${finalAttrs.version}";
};
};
})

View File

@@ -25,13 +25,13 @@ let
in
stdenv.mkDerivation rec {
pname = "kissat";
version = "4.0.3";
version = "4.0.4";
src = fetchFromGitHub {
owner = "arminbiere";
repo = "kissat";
rev = "rel-${version}";
sha256 = "sha256-IlMHtsEYafpbCNZfbeJo1JS5S5qcZQt1aDWjv+xxoqM=";
sha256 = "sha256-hgB1U2Pmh1hEyNA3ej3fXxxf0YjCRgtOuSddRl6s0eo=";
};
outputs = [

View File

@@ -9,13 +9,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "kokkos";
version = "4.7.00";
version = "4.7.01";
src = fetchFromGitHub {
owner = "kokkos";
repo = "kokkos";
rev = finalAttrs.version;
hash = "sha256-KCGUv6SnTfKiWw0zzvKgiggANPCxSQY8bmqQT4xTMb8=";
hash = "sha256-l5vSYaUtavQLjBSbKHGK2/JtgKzO2KD5+mcPPnWKNkI=";
};
nativeBuildInputs = [

View File

@@ -15,13 +15,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "libphonenumber";
version = "9.0.15";
version = "9.0.16";
src = fetchFromGitHub {
owner = "google";
repo = "libphonenumber";
tag = "v${finalAttrs.version}";
hash = "sha256-JpQ9I6Bm6HbRYDGZYkif/IWK6PXhGeTl2yY+K3ydLqI=";
hash = "sha256-+WXxeRsL++60VstR7GN7alrLG0rOQJbtrC7qaZaOPlY=";
};
patches = [

View File

@@ -8,16 +8,16 @@
buildGoModule (finalAttrs: {
pname = "okms-cli";
version = "0.3.5";
version = "0.4.0";
src = fetchFromGitHub {
owner = "ovh";
repo = "okms-cli";
tag = "v${finalAttrs.version}";
hash = "sha256-zYhK2ulFVw7XlhoKrN9JoZg8lUFisfKS/Iez+Ll0eME=";
hash = "sha256-XW+otYeEQAuPVOXI6unTi28vn6dvpO7aVkr2bZ039Mk=";
};
vendorHash = "sha256-LFZ4dsWnODHLFc6k7p+Rd3zR0befCSOZLanwUFIWRl0=";
vendorHash = "sha256-GxHOWJcRBBHVm/RLeXChSDg59sX6dnO+yKyNEvUNup4=";
ldflags = [
"-s"

View File

@@ -8,13 +8,13 @@
buildGoModule (finalAttrs: {
pname = "ovhcloud-cli";
version = "0.6.0";
version = "0.7.1";
src = fetchFromGitHub {
owner = "ovh";
repo = "ovhcloud-cli";
tag = "v${finalAttrs.version}";
hash = "sha256-ZW/o9YpENWmiBYRy+gPQyLM00QM6f+Ym7IFSeArqZ64=";
hash = "sha256-pps6PuaIJxZ0ewrBXgq4TnICOW3wjHJQDDmcQUfYDNg=";
};
vendorHash = "sha256-WNONEceR/cDVloosQ/BMYjPTk9elQ1oTX89lgzENSAI=";

View File

@@ -49,5 +49,9 @@ stdenv.mkDerivation rec {
maintainers = with maintainers; [ qyliss ];
license = licenses.mit;
platforms = platforms.unix;
identifiers.purlParts = {
type = "github";
spec = "rpm-software-management/popt@popt-${version}-release";
};
};
}

View File

@@ -9,12 +9,12 @@
python3.pkgs.buildPythonApplication rec {
pname = "quisk";
version = "4.2.44";
version = "4.2.46";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-OSGrLbCS255e/btagD7RCVpLpyIX1jveeJnzIwyegH4=";
hash = "sha256-Tp6ctOZLGYyRe3q5EU1dZjAZTCXTsHywFzE5jKF2Ssc=";
};
buildInputs = [

View File

@@ -20,13 +20,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "shader-slang";
version = "2025.19";
version = "2025.19.1";
src = fetchFromGitHub {
owner = "shader-slang";
repo = "slang";
tag = "v${finalAttrs.version}";
hash = "sha256-WG+yW76iFrrYFldCp85LcbwQ8cz61NkAvdlvIfaPgac=";
hash = "sha256-mbtyvPM3dtIZRU9dWMCZ/XCf2mDAPuJMhagMLgFsdWI=";
fetchSubmodules = true;
};

View File

@@ -8,11 +8,11 @@
}:
stdenvNoCC.mkDerivation rec {
pname = "swiftlint";
version = "0.61.0";
version = "0.62.1";
src = fetchurl {
url = "https://github.com/realm/SwiftLint/releases/download/${version}/portable_swiftlint.zip";
hash = "sha256-I0LzeEMHoCEX4Y90X801DGrMbKsOUhwMDgHDKlOjsnQ=";
hash = "sha256-VB20vZT4z4+6q3YvWX5/DkkBan+MpccNhrQ3CnzSNkE=";
};
dontPatch = true;

View File

@@ -8,13 +8,13 @@
buildGoModule rec {
pname = "syft";
version = "1.33.0";
version = "1.34.0";
src = fetchFromGitHub {
owner = "anchore";
repo = "syft";
tag = "v${version}";
hash = "sha256-S7PvaLjrd6W7AyCgi8yAC0kjFwVxpf/FlzyOq3yvayE=";
hash = "sha256-J9ia5VjEItwDS2YjKAGAuQTTig5IIQA70yBYM/2r4B4=";
# populate values that require us to use git. By doing this in postFetch we
# can delete .git afterwards and maintain better reproducibility of the src.
leaveDotGit = true;
@@ -29,7 +29,7 @@ buildGoModule rec {
# hash mismatch with darwin
proxyVendor = true;
vendorHash = "sha256-JppXYoge4hK5hw2O2KSRL1n/UX/bc2LmGEzwQW6xD44=";
vendorHash = "sha256-r1P3dWNiVLDFLJ5IM/VHdMTDS/Yh+pb8VODxEnmxmks=";
nativeBuildInputs = [ installShellFiles ];

View File

@@ -10,12 +10,12 @@
buildPythonPackage rec {
pname = "hcloud";
version = "2.8.0";
version = "2.9.0";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-5ehqw5qERzR5+RCetWgu9npjdMFDHRWMO/dEMqCIPSs=";
hash = "sha256-MkYvojUd20ehps6whNcMg1hRgiTkS04Bl/LlwPZ62O8=";
};
build-system = [ setuptools ];

View File

@@ -2,7 +2,6 @@
lib,
buildPythonPackage,
fetchFromGitHub,
fetchpatch2,
# build-system
setuptools,
@@ -23,26 +22,16 @@
buildPythonPackage rec {
pname = "pymc";
version = "5.25.1";
version = "5.26.0";
pyproject = true;
src = fetchFromGitHub {
owner = "pymc-devs";
repo = "pymc";
tag = "v${version}";
hash = "sha256-zh6FsCEviuyqapguTrUDsWKq70ef0IKRhnn2dkgQ/KA=";
hash = "sha256-RN/7xO8aq8mWW2/48Ve1KTq3q1GWMZpMxv8w6yco/GE=";
};
patches = [
# TODO: remove at next release
# https://github.com/pymc-devs/pytensor/pull/1471
(fetchpatch2 {
name = "pytensor-2-32-compat";
url = "https://github.com/pymc-devs/pymc/commit/59176b6adda88971e546a0cf93ca04424af5197f.patch";
hash = "sha256-jkDwlKwxbn9DwpkxEbSXk/kbGjT/Xu8bsZHFBWYpMgA=";
})
];
build-system = [
setuptools
versioneer

View File

@@ -10,13 +10,13 @@
buildPythonPackage rec {
pname = "pytransportnswv2";
version = "2.0.7";
version = "2.0.8";
pyproject = true;
src = fetchPypi {
pname = "PyTransportNSWv2";
inherit version;
hash = "sha256-TuLcOjP8ij9+FsaGqeukPFQDS2QRRxFMsXPfrqaq+ec=";
hash = "sha256-+hE5onXQ/Isv+U7y9+CphpYTOW7CsMxR7M8jZS1djSs=";
};
build-system = [ setuptools ];

View File

@@ -246,6 +246,10 @@ buildPythonPackage rec {
# RuntimeError: Boolean value of Tensor with more than one value is ambiguous
"test_feature_store"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# NotImplementedError: The operator 'aten::logspace.out' is not currently implemented for the MPS device.
"test_positional_encoding"
];
meta = {

View File

@@ -77,6 +77,13 @@ lib.makeOverridable (
attrs.source.remotes or [ "https://rubygems.org" ]
);
inherit (attrs.source) sha256;
meta = {
identifiers.purlParts = {
type = "gem";
# https://github.com/package-url/purl-spec/blob/18fd3e395dda53c00bc8b11fe481666dc7b3807a/types-doc/gem-definition.md
spec = "${gemName}@${version}?platform=${platform}";
};
};
}
else if type == "git" then
fetchgit {

View File

@@ -34,6 +34,8 @@ let
toList
isList
elem
flatten
filter
;
inherit (lib.meta)
@@ -299,7 +301,7 @@ let
let
expectedOutputs = attrs.meta.outputsToInstall or [ ];
actualOutputs = attrs.outputs or [ "out" ];
missingOutputs = builtins.filter (output: !builtins.elem output actualOutputs) expectedOutputs;
missingOutputs = filter (output: !builtins.elem output actualOutputs) expectedOutputs;
in
''
The package ${getNameWithVersion attrs} has set meta.outputsToInstall to: ${builtins.concatStringsSep ", " expectedOutputs}
@@ -475,7 +477,7 @@ let
let
expectedOutputs = attrs.meta.outputsToInstall or [ ];
actualOutputs = attrs.outputs or [ "out" ];
missingOutputs = builtins.filter (output: !builtins.elem output actualOutputs) expectedOutputs;
missingOutputs = filter (output: !builtins.elem output actualOutputs) expectedOutputs;
in
if config.checkMeta then builtins.length missingOutputs > 0 else false;
@@ -710,14 +712,54 @@ let
cpe = makeCPE guessedParts;
}
) possibleCPEPartsFuns;
purlParts = attrs.meta.identifiers.purlParts or { };
purlPartsFormatted =
if purlParts ? type && purlParts ? spec then "pkg:${purlParts.type}/${purlParts.spec}" else null;
# search for a PURL in the following order:
purl =
# 1) locally set through API
if purlPartsFormatted != null then
purlPartsFormatted
else
# 2) locally overwritten through meta.identifiers.purl
(attrs.src.meta.identifiers.purl or null);
# search for a PURL in the following order:
purls =
# 1) locally overwritten through meta.identifiers.purls (e.g. extension of list)
attrs.meta.identifiers.purls or (
# 2) locally set through API
if purlPartsFormatted != null then
[ purlPartsFormatted ]
else
# 3) src.meta.PURL
(attrs.src.meta.identifiers.purls or (
# 4) srcs.meta.PURL
if !attrs ? srcs then
[ ]
else if isList attrs.srcs then
concatMap (drv: drv.meta.identifiers.purls or [ ]) attrs.srcs
else
attrs.srcs.meta.identifiers.purls or [ ]
)
)
);
v1 = {
inherit cpeParts possibleCPEs;
inherit
cpeParts
possibleCPEs
purls
;
${if cpe != null then "cpe" else null} = cpe;
${if purl != null then "purl" else null} = purl;
};
in
v1
// {
inherit v1;
inherit v1 purlParts;
};
# Expose the result of the checks for everyone to see.