-
Notifications
You must be signed in to change notification settings - Fork 15
Description
Hei!
I'd like to propose to add support to specifying requirements in the form of PackageURLs (purls), in work in addition to the existing ways (using dist/module names).
With this, I'm hoping that we can get a step closer to supporting requirements that work across ecosystem boundaries.
e.g. the following...
prereqs => {
runtime => {
requires => {
'CPAN::Meta::Requirements' => '0.102',
'Library::Foo' => '>= 1.208, <= 2.206',
'Module::Bar' => '>= v1.2.3, != v1.2.8',
'Xyzzy' => '== 6.01',
'Module::Foo' => '1.0',
},
},
}...could be written as...
prereqs => {
runtime => {
requires => {
'pkg:cpan/CPAN::Meta::Requirements' => 'vers:cpan/0.102', # resolves to same as above
'pkg:cpan/Library::Foo' => 'vers:cpan/>=1.208|<=2.206', # resolves to same as above
'pkg:cpan/Module::Bar' => 'vers:cpan/>=v1.2.3|!=v1.2.8', # resolves to same as above
'pkg:cpan/Xyzzy' => 'vers:cpan/==6.01', # resolves to same as above
'Module::Foo' => '1.0', # old way continues to work
},
},
}...and while this is fine, this also opens for a bunch of really cool new things!
prereqs => {
develop => {
requires => {
'Dist::Zilla' => 0,
'pkg:github/twbs/bootstrap' => 'vers:github/>5.0', # we embed bootstrap.js in this dist, so let's specify that it's a dep
},
},
configure => {
requires => {
'pkg:deb/ubuntu/xz-utils' => 'vers:deb/>=4.0|!=5.6.1|!=5.6.2', # depend on xz-utils, but don't want vulnerable releases
},
},
build => {
requires => {
'pkg:deb/ubuntu/libmysqlclient-dev' => 'vers:deb/>7.0', # we use mysql's header files for an FFI
'pkg:deb/debian/mysqlclient-dev' => 'vers:deb/>7.0', # pretend that Debian's mysql header files are in a different package
},
},
}I'm also hoping this to be a foundation for allowing non-cpan software to state any requirements they have for components published on CPAN, and maybe even one day make it easier for packagers (the folks that re-package CPAN dists into .deb or .rpm or other package archives) have an easier time figuring out how to translate and resolve dependencies across ecosystem boundaries. 😁
But for CPAN's case, I'm thinking support for purls starts with CPAN::Meta::Requirements?
I'm not entirely sure what's the best way to go about this, but since @giterlizzi recently added support for the 'vers' schema in URI::PackageURL, I'm thinking that's a place to start looking.
Should that module be made smaller/leaner? Are there other requirements (eg. around governance) that need to be fulfilled?
What needs be in place for a feature like this to be added to CPAN::Meta::Requirements?
(edit: added some more examples and clarifications)