Repository navigation
Releases pipeline: publisher API, checks, review policy D6, admin API - #5
Merged
Merged
Conversation
Semver is now the one version comparator: normalize() pads loose versions (v1.2 -> 1.2.0), compare() normalizes before applying SemVer precedence, and isNewer() moves over from Compat. Compat keeps range evaluation and gains validRange() for the release checks.
Publisher API (publish scope, owner/admin/publisher role): create listings idempotently on package names with the namespace rules, edit listing fields, upload releases (manifest, engine, api, optional prebuilt dist), submit, withdraw, yank. RunReleaseChecks inspects each archive once and records release_checks for the manifest (extension.json JSON Schema shared with registry-bridge), compat ranges, package names against extension_packages, version order per channel, size limits, archive safety (traversal, links, devices, forbidden types, native binaries), secrets (built-in gitleaks-style rules, plus gitleaks when installed) and the build-engine-release dist manifest. Release state machine with a reviews row per transition; review policy D6 (human review for first releases and package name, pricing or permissions changes, auto-approve and publish otherwise); staff admin API for the queue, claim, approve, reject with reason and items, publish and suspend. Publishing sets published_at, lists draft extensions, flushes the catalog cache through a generation key, and emails the uploader.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 2 Workstream E of the registry plan, on top of
v2(#4).What's in it
publishscope; owner, admin or publisher role):POST /v1/publisher/extensions(idempotent on package names, namespace rules),GET/PATCHlistings,POST /v1/publisher/extensions/{slug}/releases(multipartmanifest,engine,api, optionaldist),GET /v1/publisher/releases/{id},submit,withdraw,yank.RunReleaseChecks: one queued job per release, each archive read once, eightrelease_checksrows:manifest(extension.json against the JSON Schema copied from registry-bridge),compat,package_names,version,size,archive(traversal, links, devices, forbidden types, native binaries, tar header checksums),secrets_scan(built-in gitleaks-style rules; gitleaks too when installed),dist(ember-ui/ember-corebuiltAgainst, name, version, file hashes).releaseswith areviewsrow per transition (from/to status, actor). D6: human review for first releases and package name, pricing orpermissionschanges; otherwise approved and published on submit.reviewscope,is_stafforganization member): queue, claim, approve, reject (reason and items required), publish, suspend.published_at, lists draft extensions, flushes the catalog cache (generation key, any cache store), emails the uploader. npm dist-tags and Composer metadata follow immediately.Compat::compare/normalizeVersionfolded intoSemver(separate commit)..env.example, Dockerfile upload limits, compose queue worker (storage disk, cache store,retry_afterabove the 900 s job timeout).233 Pest tests pass (75 new);
pint --testpasses.Decisions needed
uploaded("ready to submit"); withdraw returns there too.submit=1at upload submits once checks pass.publish: false. The plan reads "else goes to approved for a staff publish": should approve and publish be separate by default?events) because the unique (extension, version) index includes soft-deleted rows. Alternative: require a version bump.organizations.meta.namespaces; unscoped npm names allowed. Should verified domains count?reviewscope + any role in a staff organization. Restrict roles?-next.1) fails the version check when there is an api archive.retry_afterabove 900 s.