Publish and activate remaining official plugin registry releases #188
Labels
No labels
abandoned
active
audit
blocked
data-safety
difficulty:easy
difficulty:hard
difficulty:high
difficulty:medium
docs
done
duplicate
notebook-v0
open
priority:high
ready
release-critical
safe-mode
spec
spec-backlog
subsystem:api
subsystem:backlog
subsystem:bases
subsystem:ci
subsystem:command
subsystem:configuration
subsystem:consolidate
subsystem:dependencies
subsystem:desktop-electron
subsystem:diffmerge
subsystem:docker
subsystem:docs
subsystem:fuzzy
subsystem:graph
subsystem:hotkeys
subsystem:lapis
subsystem:maint
subsystem:maintenance
subsystem:markdown
subsystem:markdown-lint
subsystem:md018
subsystem:notebook
subsystem:notifications
subsystem:opfs
subsystem:package
subsystem:plugin-markdown
subsystem:plugin-tasks
subsystem:plugins
subsystem:registry
subsystem:release
subsystem:renovate
subsystem:restore
subsystem:scripts
subsystem:search
subsystem:settings
subsystem:spec
subsystem:tasks
subsystem:testing
subsystem:ui
subsystem:web
subsystem:workspace
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
lapis-notes/lapis#188
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
The app-side registry contract and plugin IDs are ready for the remaining
first-party official plugins, but the registry entries are still pending because
the immutable release assets do not exist as Forgejo release downloads.
Without a local and CI-backed asset publication path, maintainers have to build,
sign, upload, and audit release files manually before registry metadata can be
promoted to active.
Goal
Provide a repeatable app-repo path to build, sign, stage, and publish official
plugin release assets to Forgejo releases, then use those assets to activate
the remaining official registry entries.
Scope
lapis-docslapis-pdflapis-slideslapis-canvaslapis-graphlapis-notebooklapis-telemetrylapis-markdown-lintpnpm registry-assets:publishscript that builds plugin packages,stages normalized release inputs, packages and signs
release.json, verifiesrelease.signed.json, and creates a Forgejo-release-ready flat asset set.package.jsoninstead of stamping one batch version across all officialplugins.
package.jsonversionand
manifest.jsonversion differ.pnpm registry-assets:versionso maintainers can bump specific officialpublishable plugins or the default publishable plugin set to CalVer before
publishing. Default version is the current local date (
YYYY.M.D, for example2026.6.1) and--patch/--patch-suffixadds a semver-compatible patchsuffix.
detects already-published plugin/version assets, skips those versions for the
default publish-all selection, and fails for explicit
--pluginsselectionsthat already exist.
publish the staged assets to an immutable release tag.
signing key set under
~/.lapis/for local publishing./Users/stevejuma/code/lapis-plugin-registry.lapis-basespending, hidden, or otherwise non-installable.Non-goals
workspaceCorePlugins; that belongs to #189.Acceptance Criteria
pnpm registry-assets:publish -- --dry-runstages release assets locallywithout requiring production secrets and uses each plugin package version.
pnpm registry-assets:publishrejects mismatchedpackage.jsonandmanifest.jsonversions before building or uploading plugin release assets.pnpm registry-assets:versionupdates package-localpackage.jsonandmanifest.jsonversions for the same official publishable plugin set asregistry-assets:publishby default, supports--plugins <ids>, supportsexplicit
--version, supports dry runs, and writes patch builds asYYYY.M.D-patch.N.LAPIS_PLUGIN_RELEASE_KEY_IDand an officialrelease private key from
LAPIS_PLUGIN_RELEASE_PRIVATE_KEY_PEMor--private-key-file, unless a local key set generated bypnpm plugin-release:keygenexists under~/.lapis/.pnpm plugin-release:keygenwrites a private PEM, public PEM, raw base64public key, and metadata file under
~/.lapis/, refuses to overwrite thosefiles by default, and prints the public key material needed for trust-list
updates.
--verifyrequiresFORGEJO_TOKENand checks Forgejo release assets foralready-published plugin/version prefixes.
--publishrequiresFORGEJO_TOKEN, performs the same Forgejo availabilitycheck before building, and uploads to a Forgejo release tag such as
official-plugin-assets-2026-06-01.forgejo-assets/output tree.publish-official-plugin-assets.ymlcan stage assets as adry run or verify and publish them to the app repo Forgejo release.
and sizes and validated with
pnpm registry:validate:remotein the registryrepo.
Implementation Notes
signatures, and final registry publication.
signed release manifests and release files.
lapis-docsto the defaultpnpm registry-assets:publishofficial asset set so default publish-all runskeep docs coverage consistent with other official plugins.
--verifywithoutexplicit
--release-tag/--outnow uses default values and emittedreleaseManifestUrlvalues no longer include/releases/download//....(
--upload-batch-size, default20) and updatedscripts/forgejo-release.mjswith per-asset progress output,
--resumeskip behavior for already uploadedassets, and retry-with-exponential-backoff for transient HTTP/network failures
(including 504 timeouts).
pnpm registry-assets:publishnow exposes a top-level--resumeflag, stages local release work under the single ignored rootrelease-artifacts/official-plugin-assets/, clears stale staged assets beforeeach run so old versions do not leak into later publishes, and deletes the
per-run
tmp/packaging subtree infinallycleanup.Suggested Files or Specs To Inspect
scripts/publish-official-plugin-assets.mjsscripts/update-core-plugin-versions.mjsscripts/generate-plugin-release-key.mjs.forgejo/workflows/publish-official-plugin-assets.ymlscripts/plugin-release.mjsspec/src/30-cross-package-contracts/plugin-registry.md/Users/stevejuma/code/lapis-plugin-registry/docs/publishing-official-plugins.mdValidation Commands
pnpm registry-assets:publish -- --dry-runpnpm registry-assets:version -- --dry-runpnpm registry-assets:publish -- --verifypnpm plugin-release:keygen -- --dir /tmp/lapis-release-key-testnode --test scripts/plugin-release.test.mjs scripts/generate-plugin-release-key.test.mjs scripts/publish-official-plugin-assets.test.mjs scripts/update-core-plugin-versions.test.mjspnpm test:scriptspnpm check:allmake spec-lintmdbook build specRelated Issues
Follow-up Tasks
Implementation Summary
Added top-level publish resume support, consolidated local release work under release-artifacts/official-plugin-assets, cleaned stale/legacy temp assets, and documented the new behavior.