at.happyproto.registry.publishRelease
Publish a version of a plugin to the caller's repo. Writes a software.release.manifest carrying the artifact, the changelog as a site.standard.document when one is given, the software.release.version, and the channel named by track, moved to the new version, in that order. A record is written only once everything it points at exists, so a failure part-way leaves no dangling reference. Calling again with the same input after such a failure finishes the release rather than refusing it.
Details · procedure
| Kind | procedure |
|---|---|
| Authority | registry.happyproto.at |
| Indexed |
Showing version bafyreiccjd6dykih6i6yj2heb6jyzceinjqv7ibyxpkqxzso5ejg3v34pq. Show the latest
Checks
Validlarge-stringdefs.main.input.schema.properties.changelogmaxLength is over 20 KB. Use a blob for content that large.unlimited-stringdefs.main.input.schema.properties.trackNo maxLength, maxGraphemes or format limits this string.
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"description": "Publish a version of a plugin to the caller's repo. Writes a software.release.manifest carrying the artifact, the changelog as a site.standard.document when one is given, the software.release.version, and the channel named by track, moved to the new version, in that order. A record is written only once everything it points at exists, so a failure part-way leaves no dangling reference. Calling again with the same input after such a failure finishes the release rather than refusing it.",
"errors": [
{
"description": "The caller's identity could not be determined, so there is no repo to write to.",
"name": "AuthRequired"
},
{
"description": "The registry has no identity configured. An operator problem, not a caller's.",
"name": "NotConfigured"
},
{
"description": "The input breaks a rule the registry applies, so it would refuse the records. The message names the field.",
"name": "InvalidRecord"
},
{
"description": "The input breaks the method's lexicon, such as a field of the wrong format or past its length, and HappyView refused it before the registry saw it. The message names the field.",
"name": "InvalidRequest"
},
{
"description": "A record could not be written to the caller's repo. Records written before the failure stay, and the same call can be made again.",
"name": "Upstream"
},
{
"description": "The caller has no project of that name, or the registry has not indexed its at.happyproto.registry.project record. Call putProject first.",
"name": "ProjectMissing"
},
{
"description": "That version is already published with a different artifact. A version never changes once published; publish a new one.",
"name": "VersionExists"
},
{
"description": "The project is unavailable or retired, so the channel cannot be moved to a new version.",
"name": "NotInstallable"
}
],
"input": {
"encoding": "application/json",
"schema": {
"properties": {
"artifact": {
"description": "The plugin. Every blob it references must already be uploaded to the caller's repo.",
"ref": "at.happyproto.plugin.v1",
"type": "ref"
},
"changelog": {
"description": "Release notes as CommonMark. The registry writes them to the caller's repo as a site.standard.document and links it from the version.",
"maxGraphemes": 20000,
"maxLength": 200000,
"type": "string"
},
"name": {
"description": "The project's name, which is the record key of its software.release.project: 1 to 64 lowercase letters, digits and interior hyphens.",
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"track": {
"description": "The channel to move to the new version.",
"knownValues": [
"latest",
"beta",
"alpha"
],
"type": "string"
},
"validateOnly": {
"default": false,
"description": "Check the input against every rule the registry applies, and write nothing. Works without authentication, but only a signed-in call is also checked against the caller's existing records.",
"type": "boolean"
},
"version": {
"description": "A semver version without build metadata, with an optional lowercase prerelease, such as `1.2.0` or `1.2.0-beta.1`.",
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"version",
"track",
"artifact"
],
"type": "object"
}
},
"output": {
"encoding": "application/json",
"schema": {
"properties": {
"changelog": {
"description": "The changelog's site.standard.document, when a changelog was given.",
"ref": "at.happyproto.registry.defs#ref",
"type": "ref"
},
"channel": {
"description": "The software.release.channel. Absent when validateOnly was set.",
"ref": "at.happyproto.registry.defs#ref",
"type": "ref"
},
"manifest": {
"description": "The software.release.manifest. Absent when validateOnly was set.",
"ref": "at.happyproto.registry.defs#ref",
"type": "ref"
},
"resumed": {
"description": "True when the version already existed with this artifact, so this call only finished what an earlier one started.",
"type": "boolean"
},
"valid": {
"description": "Always true; invalid input is an error, not a result.",
"type": "boolean"
},
"version": {
"description": "The software.release.version. Absent when validateOnly was set.",
"ref": "at.happyproto.registry.defs#ref",
"type": "ref"
}
},
"required": [
"valid"
],
"type": "object"
}
},
"type": "procedure"
}
},
"id": "at.happyproto.registry.publishRelease",
"lexicon": 1
}