You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file is the registry of known `provider` values used in `domainId` URNs. The canonical machine-readable form is [`schemas/links/providers.json`](schemas/links/providers.json). SDKs MUST use this list as the default for provider validation. See the [Provider Validation](links.md#provider-validation) section in `links.md` for the full SDK validation requirements.
4
+
5
+
To register a provider in the CDEvents default list, open a pull request adding an entry to both the schema enum in [`schemas/links/providers.json`](schemas/links/providers.json) and the table below. Provider identifiers MUST be lowercase, start with a letter, and contain only alphanumeric characters and hyphens. Once merged, the value is considered stable and MUST NOT be renamed.
"description": "Test vectors for domainId URN serialization. Each valid case specifies the logical segments and the expected serialized string. SDKs MUST produce the expected string from the given segments and MUST parse the expected string back to the same segments (round-trip).",
All segments MUST be present. If a segment has no value, it MUST be left empty rather than omitted (e.g. `cdevents:v0:github::xibz:...`). Omitting a segment shifts all following segments and introduces ambiguity.
|`version`| The version of the `domainId` URN format (currently `v0`). This allows the format to evolve without breaking existing consumers. |
699
-
|`provider`| A governed identifier for the tool. Must match a known provider defined in the CDEvents provider list within this spec (e.g. `github`, `jira`, `datadog`). Free-form values are not permitted. |
700
-
|`provider-id`| A company or org-defined identifier for the specific deployment of the provider (e.g. distinguishing one internal GitHub Enterprise from another). CDEvents does not govern this value — producers and consumers within an organization must agree on it. |
701
-
|`namespace`| The top-level organizational unit within the provider's data model (e.g., a GitHub org, a Jira workspace). Producer-defined; not governed by CDEvents. |
702
-
|`groups`| One or more organizational subdivisions within the namespace, separated by `/` to express nesting as defined by the provider's data model. For example, a GitHub repository is a single group (`my-repo`); a GitLab project nested under subgroups would be `group/subgroup/project`. Leading and trailing `/` are invalid. Producer-defined; not governed by CDEvents. |
703
-
|`type`| A governed resource type. Must be one of the values defined in [Common Resource Types](#common-resource-types)|
704
-
|`resource id`| The publicly exposed identifier that end users see for this resource (e.g. a PR number, commit SHA, or ticket number). Must not be an internal or opaque system-generated ID. |
691
+
Only `type` and `resource id` are required to be non-empty. All other segments are contextual — they narrow the identity of the resource but MAY be left empty when the information is not known or not applicable (e.g. an artifact whose provider registry is unknown).
692
+
693
+
Segment values MUST reflect the exact canonical form as the value appears in the provider's system, before encoding is applied. When URL-encoding is required, percent-encoded hex digits MUST be uppercase (e.g. `%2F` not `%2f`).
|`version`| yes | The version of the `domainId` URN format (currently `v0`). This allows the format to evolve without breaking existing consumers. |
698
+
|`provider`| no | A governed identifier for the tool or system type that owns the resource. When present, MUST match a known provider defined in [PROVIDERS.md](PROVIDERS.md). Free-form values are not permitted — without a governed list, the same tool would be referenced as `gh`, `github`, `GitHub`, etc., making cross-system queries unreliable. |
699
+
|`provider-id`| no | Identifies who owns and where a specific instance of the provider is running. This is entirely company or org-defined — CDEvents does not govern, assign, or interpret this value. It exists solely to distinguish between two instances of the same tool owned or operated by different teams or organizations (e.g. org A's internal GitHub Enterprise vs org B's). Producers and consumers within an organization MUST agree on the value out of band. MUST be URL-encoded when present. |
700
+
|`namespace`| no | The top-level organizational unit within the provider's data model (e.g., a GitHub org, a Jira workspace). Producer-defined; not governed by CDEvents. MUST be URL-encoded when present. |
701
+
|`groups`| no | One or more organizational subdivisions within the namespace, separated by `/` to express nesting as defined by the provider's data model. For example, a GitHub repository is a single group (`my-repo`); a GitLab project nested under subgroups would be `group/subgroup/project`. The `/` separator is structural and MUST NOT be encoded. Individual group segment values MUST be URL-encoded. Leading and trailing `/` are invalid. Producer-defined; not governed by CDEvents. |
702
+
|`type`| yes | A governed resource type. MUST be one of the values defined in [Common Resource Types](#common-resource-types)|
703
+
|`resource id`| yes | The publicly exposed identifier that end users see for this resource (e.g. a PR number, commit SHA, ticket number, or PURL). MUST be URL-encoded. MUST NOT be an internal or opaque system-generated ID. |
The `provider` segment MUST match a known provider. CDEvents ships a default governed list of commonly used providers in [PROVIDERS.md](PROVIDERS.md), which serves as the baseline for validation.
717
+
718
+
SDKs MUST support extending the provider list at initialization time, allowing organizations to register additional providers beyond the CDEvents default. Validation MUST check against the union of the CDEvents default list and any organization-supplied providers.
719
+
720
+
When a `provider` value is not found in either list, the SDK SHOULD emit a warning. Whether to reject or allow the value SHOULD be configurable by the caller.
721
+
715
722
### Common Resource Types
716
723
717
724
The `type` segment is a governed field. Producers MUST use one of the following
@@ -727,7 +734,7 @@ without handling variations like `pull_request`, `PR`, or `pullrequest`.
727
734
|`tag`| A source code tag or release |`v1.2.3`|
728
735
|`definition`| A named, reusable pipeline or workflow template |`my-pipeline`|
729
736
|`execution`| A single run of a build, pipeline, workflow, or deployment |`789` (run number) |
730
-
|`artifact`| A build artifact (binary, container image, package, etc.)|`myapp:1.0.0`|
737
+
|`artifact`| A build artifact (binary, container image, package, etc.). The resource id SHOULD be a [PURL](https://github.com/package-url/purl-spec), URL-encoded. |`pkg%3Adocker%2Fmyapp%401.0.0`|
731
738
|`environment`| A target deployment environment |`production`, `staging`|
732
739
|`alert`| A monitoring or observability alert |`98765` (alert ID) |
"description": "A canonical CDEvents domain ID URN that identifies a resource in an external system that does not emit CDEvents. The provider-id, namespace, individual group segment values within groups, and resource id MUST be URL-encoded. The '/' separator between group segments is structural and MUST NOT be encoded. The provider segment MUST be validated separately against providers.json.",
"description": "Registry of known CDEvents domainId provider identifiers. Known providers are listed below. To register a new provider, submit a pull request adding an entry to the enum and the PROVIDERS.md table.",
0 commit comments