dev.knotless.release
Kept in the repository owner's account, keyed `<repo key>.<package hash>.<version hash>`, where each hash is the first 26 characters of the lowercase unpadded base32 SHA-256 of `package` or `version`, so a listing from the cursor `<repo key>/` walks one repository's releases, and from `<repo key>.<package hash>/` one package's. Created and never updated: creating it fails if that version was published, so a version's files never change. Deleting it unpublishes the version; to withdraw one that others may have pinned, a dev.knotless.releaseYank leaves it to read. Readers check every file against its `sha256`.
Details · record, key any
| Kind | record |
|---|---|
| Record key | any |
| Authority | knotless.dev |
| Indexed |
Checks
Validlarge-stringdefs.cargo.properties.indexmaxLength is over 20 KB. Use a blob for content that large.
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"cargo": {
"description": "A release as a crate.",
"properties": {
"description": {
"description": "What the crate says it is.",
"maxGraphemes": 1000,
"maxLength": 10000,
"type": "string"
},
"index": {
"description": "Its line of Cargo's registry index, as JSON, but for `yanked`, which a reader adds from the dev.knotless.releaseYank of its key. Kept as Cargo's format has it, which is Cargo's to change, and passed on as it is, since an index's line never changes.",
"maxLength": 100000,
"type": "string"
}
},
"required": [
"index"
],
"type": "object"
},
"file": {
"description": "One file of a release.",
"properties": {
"name": {
"description": "Its name, as it is downloaded: letters, digits, `.`, `_`, `+` and `-`, not first a `.`.",
"maxLength": 255,
"minLength": 1,
"type": "string"
},
"parts": {
"description": "The file, split over blobs in order, each no larger than its PDS takes.",
"items": {
"ref": "#part",
"type": "ref"
},
"minLength": 1,
"type": "array"
},
"sha256": {
"description": "The lowercase hex SHA-256 of the file.",
"maxLength": 64,
"minLength": 64,
"type": "string"
},
"size": {
"description": "Bytes in the file.",
"minimum": 1,
"type": "integer"
}
},
"required": [
"name",
"size",
"sha256",
"parts"
],
"type": "object"
},
"main": {
"description": "Kept in the repository owner's account, keyed `<repo key>.<package hash>.<version hash>`, where each hash is the first 26 characters of the lowercase unpadded base32 SHA-256 of `package` or `version`, so a listing from the cursor `<repo key>/` walks one repository's releases, and from `<repo key>.<package hash>/` one package's. Created and never updated: creating it fails if that version was published, so a version's files never change. Deleting it unpublishes the version; to withdraw one that others may have pinned, a dev.knotless.releaseYank leaves it to read. Readers check every file against its `sha256`.",
"key": "any",
"record": {
"properties": {
"cargo": {
"description": "What Cargo's registry says of it, when it is a crate: its one file then is `<name>-<version>.crate`.",
"ref": "#cargo",
"type": "ref"
},
"check": {
"description": "The dev.knotless.check, in its runner's account, of the run that built and published it. A reader trusts it only from a runner the repository names, and only once it has passed at `commit`.",
"format": "at-uri",
"type": "string"
},
"commit": {
"description": "The hex object ID of the commit the files were built from.",
"maxLength": 64,
"minLength": 40,
"type": "string"
},
"createdAt": {
"format": "datetime",
"type": "string"
},
"files": {
"description": "What it publishes, by distinct names.",
"items": {
"ref": "#file",
"type": "ref"
},
"maxLength": 64,
"minLength": 1,
"type": "array"
},
"notes": {
"description": "What changed since the version before, in Markdown, as the changelog says.",
"maxGraphemes": 5000,
"maxLength": 20000,
"type": "string"
},
"package": {
"description": "The package's name, as npm's rules have it: lowercase letters, digits, `-`, `.`, `_` and `~`, after an optional `@scope/`. A repository can publish several.",
"maxLength": 214,
"minLength": 1,
"type": "string"
},
"repo": {
"description": "The `key` of the dev.knotless.repo that publishes it.",
"format": "tid",
"type": "string"
},
"version": {
"description": "A Semantic Versioning 2.0 version, such as 1.4.0 or 2.0.0-rc.1. The highest version without a pre-release part that no dev.knotless.releaseYank withdraws is the package's latest.",
"maxLength": 256,
"minLength": 5,
"type": "string"
}
},
"required": [
"repo",
"package",
"version",
"files",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"part": {
"description": "One blob of a file, in order.",
"properties": {
"blob": {
"accept": [
"application/octet-stream"
],
"type": "blob"
}
},
"required": [
"blob"
],
"type": "object"
}
},
"description": "One version of a package a repository publishes: its files, and the commit they were built from.",
"id": "dev.knotless.release",
"lexicon": 1
}