Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add spec for brew package URLs #281

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
Open
26 changes: 26 additions & 0 deletions PURL-TYPES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,32 @@ bitnami
pkg:bitnami/[email protected]
pkg:bitnami/[email protected]?arch=arm64

brew
----
``brew`` for Homebrew-based packages:

- There is no default package repository; this should be implied either from
the ``namespace`` or using a tap URL via the ``tap_url`` qualifier.
- The ``namespace``, which is called a "Tap" in Homebrew terminology, defaults to ``homebrew/core``.

- When the ``tap_url`` qualifier is not specified, the Tap identifier corresponds to the URL
``https://github.com/{org}/homebrew-{tap}``, such as
``https://github.com/homebrew/homebrew-core`` for ``homebrew/core``.
- When the ``tap_url`` qualifier is specified, the Tap identifier is the local name of the Tap.

- The ``name`` is the formula name. Formula names that contain ``@`` must be percent-encoded,
such as ``postgresql%4012`` for ``postgres@12``.
- The ``version`` is the formula version.
woodruffw marked this conversation as resolved.
Show resolved Hide resolved
- Qualifier ``tap_url``: for taps that are not on GitHub or otherwise require an explicit URL,
this is the full ``git`` URL to the tap.
- Examples::

pkg:brew/[email protected]
woodruffw marked this conversation as resolved.
Show resolved Hide resolved
pkg:brew/postgresql%[email protected]
pkg:brew/homebrew/core/[email protected]
pkg:brew/some-org/some-tap/[email protected]
pkg:brew/some-org/some-tap/[email protected]?tap_url=https://git.example.com/some-org/some-tap.git

cocoapods
---------
``cocoapods`` for CocoaPods:
Expand Down
108 changes: 108 additions & 0 deletions test-suite-data.json
Original file line number Diff line number Diff line change
Expand Up @@ -550,5 +550,113 @@
"qualifiers": null,
"subpath": null,
"is_invalid": false
},
{
"description": "brew names may contain at signs",
"purl": "pkg:brew/postgres%4016",
"canonical_purl": "pkg:brew/postgres%4016",
"type": "brew",
"namespace": null,
"name": "postgres@16",
"version": null,
"qualifiers": null,
"subpath": null,
"is_invalid": false
},
{
"description": "brew may contain multiple at signs",
"purl": "pkg:brew/postgres@[email protected]",
"canonical_purl": "pkg:brew/postgres%[email protected]",
"type": "brew",
"namespace": null,
"name": "postgres@16",
"version": "16.1",
"qualifiers": null,
"subpath": null,
"is_invalid": false
},
{
"description": "brew may specify a namespace that uses the Homebrew default tap lookup mechanism",
"purl": "pkg:brew/some-org/some-tap/[email protected]?tap_url=https://git.example.com/some-org/some-tap.git",
"canonical_purl": "pkg:brew/some-org/some-tap/[email protected]?tap_url=https://git.example.com/some-org/some-tap.git",
"type": "brew",
"namespace": "some-org/some-tap",
"name": "sqlite",
"version": "3.43.2",
"qualifiers": { "tap_url": "https://git.example.com/some-org/some-tap.git"},
"subpath": null,
"is_invalid": false
},
{
"description": "brew may specify a namespace that uses the Homebrew default tap lookup mechanism",
"purl": "pkg:brew/some-org/some-tap/[email protected]",
"canonical_purl": "pkg:brew/some-org/some-tap/[email protected]",
"type": "brew",
"namespace": "some-org/some-tap",
"name": "sqlite",
"version": "3.43.2",
"qualifiers": null,
"subpath": null,
"is_invalid": false
},
{
"description": "brew may specify a namespace that is its default repository",
"purl": "pkg:brew/homebrew/core/[email protected]",
"canonical_purl": "pkg:brew/homebrew/core/[email protected]",
"type": "brew",
"namespace": "homebrew/core",
"name": "sqlite",
"version": "3.43.2",
"qualifiers": null,
"subpath": null,
"is_invalid": false
},
{
"description": "brew typical formula",
"purl": "pkg:brew/[email protected]",
"canonical_purl": "pkg:brew/[email protected]",
"type": "brew",
"namespace": null,
"name": "sqlite",
"version": "3.43.2",
"qualifiers": null,
"subpath": null,
"is_invalid": false
},
{
"description": "invalid brew purl without name",
"purl": "pkg:brew/@0.9.1",
"canonical_purl": "pkg:brew/@0.9.1",
"type": "brew",
"namespace": null,
"name": null,
"version": "0.9.1",
"qualifiers": null,
"subpath": null,
"is_invalid": true
},
{
"description": "invalid brew purl without version",
"purl": "pkg:brew/A3",
"canonical_purl": "pkg:brew/A3",
"type": "brew",
"namespace": null,
"name": "A3",
"version": null,
"qualifiers": null,
"subpath": null,
"is_invalid": true
},
{
"description": "brew requires name and version at minimum",
"purl": "pkg:brew",
"canonical_purl": "pkg:brew",
"type": "brew",
"namespace": null,
"name": null,
"version": null,
"qualifiers": null,
"subpath": null,
"is_invalid": true
}
]