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.
Input
application/jsonartifact
refat.happyproto.plugin.v1
Required
The plugin. Every blob it references must already be uploaded to the caller's repo.
changelog
string
Optional
Release notes as CommonMark. The registry writes them to the caller's repo as a site.standard.document and links it from the version.
maxLength: 200000 bytesmaxGraphemes: 20000 graphemesname
string
Required
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 bytesminLength: 1 bytestrack
string
Required
The channel to move to the new version.
validateOnly
boolean
Optional
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.
version
string
Required
A semver version without build metadata, with an optional lowercase prerelease, such as `1.2.0` or `1.2.0-beta.1`.
maxLength: 64 bytesminLength: 1 bytesOutput
application/jsonchangelog
refat.happyproto.registry.defs#ref
Optional
The changelog's site.standard.document, when a changelog was given.
channel
refat.happyproto.registry.defs#ref
Optional
The software.release.channel. Absent when validateOnly was set.
manifest
refat.happyproto.registry.defs#ref
Optional
The software.release.manifest. Absent when validateOnly was set.
resumed
boolean
Optional
True when the version already existed with this artifact, so this call only finished what an earlier one started.
valid
boolean
Required
Always true; invalid input is an error, not a result.
version
refat.happyproto.registry.defs#ref
Optional
The software.release.version. Absent when validateOnly was set.
Errors
AuthRequired
The caller's identity could not be determined, so there is no repo to write to. NotConfigured
The registry has no identity configured. An operator problem, not a caller's. InvalidRecord
The input breaks a rule the registry applies, so it would refuse the records. The message names the field. Upstream
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. ProjectMissing
The caller has no project of that name, or the registry has not indexed its at.happyproto.registry.project record. Call putProject first. VersionExists
That version is already published with a different artifact. A version never changes once published; publish a new one. NotInstallable
The project is unavailable or retired, so the channel cannot be moved to a new version. Try It
Requests are sent directly from your browser. Some servers may block requests due to CORS.
View raw schema
{
"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": "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"
}