Add deb repository and remote pages - #347
Open
warisshaikh1 wants to merge 1 commit into
Open
Conversation
Adds a "Pulp deb" menu section with Repositories and Remotes, mirroring the structure of Pulp file: list, detail and edit for each, plus the versions and distributions tabs on a repository. Deliberately scoped to repositories and remotes. Publications are left out because deb has two publication endpoints rather than a field -- publications/deb/apt generates fresh metadata and needs a signing service, publications/deb/verbatim republishes upstream's Release byte for byte -- so a publications tab needs a design decision rather than just wiring. Content browsing is left out for the same reason: deb has a dozen content endpoints where rpm has one. RemoteForm gains the APT fields, which have no equivalent in the other plugins: distributions (suites), components, architectures, gpgkey, and the sync_sources/sync_udebs/sync_installer switches. `distributions` is added to requiredFields for deb only -- pulp_deb answers a remote without it with "This field is required.", unlike every other plugin where url alone is enough. gpgkey reuses the FileUpload treatment the certificate fields already use, since it is an armoured key file. The remaining changes are registry entries: plugin2api, the plugin unions on LazyRepositories/LazyDistributions/RepositoryForm, and the deb-only fields on the shared RemoteType. All are additive; ansible, container and file behaviour is unchanged. Refs pulp#277
warisshaikh1
marked this pull request as ready for review
September 1, 2026 09:51
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.
Addresses part of #277 (deb in the side menu).
Draft on purpose — I asked three scoping questions in #277 and haven't heard back yet. This is here so there's something concrete to react to rather than to pre-empt the answers. Happy to cut it down, extend it, or restructure it entirely.
What this adds
A
Pulp debmenu section gated onhasPlugin('deb'), with Repositories and Remotes, mirroringPulp file:remotes/deb/aptrepositories/deb/aptWhat it deliberately leaves out
publications/deb/aptgenerates fresh metadata and needs a signing service to be consumable, whilepublications/deb/verbatimrepublishes upstream'sRelease/InReleasebyte for byte so an ordinaryubuntu-archive-keyringverifies it. A publications tab has to either show both or ask which to create, which is a design decision rather than wiring, so it seemed better to agree it first.content/deb/packagesis the useful one, but there are a dozen deb content endpoints where rpm has one. Easy follow-up once the shape here is agreed.The one place deb genuinely differs from file
RemoteFormneeded the APT fields, which have no equivalent elsewhere:distributions(suites),components,architectures,gpgkey, and thesync_sources/sync_udebs/sync_installerswitches.distributionsis required, for deb only. Every other plugin's remote needs just a URL; pulp_deb rejects one without suites:So
requiredFieldsbecomes conditional.gpgkeyreuses theFileUploadtreatmentca_certandclient_certalready get, since it's an armoured key file rather than a one-line value.Everything else is registry entries —
plugin2api, the plugin unions onLazyRepositories/LazyDistributions/RepositoryForm, and deb-only optional fields on the sharedRemoteType. All additive; ansible, container and file behaviour is unchanged (theRemoteFormdiff is worth a look on that point specifically).Testing
Verified against a live pulpcore 3.116.0 / pulp_deb 3.10.0 mirroring Ubuntu noble, with the dev server proxied at it (
API_PROXY):ordering/name__icontains/pulp_label_select/remotefilters,…/versions/,…/versions/?number=N, anddistributions/deb/apt/?repository=<href>DebRemoteEditsends → 201; thesmartUpdatePUT with all APT fields → 202, and the fields read back verbatimpluginRepositoryBasePath('deb', …)resolves the base_path the Repository URL field showsnpm run lint:js,lint:ts,lint:ls, thethis-without-classcheck andnpm run buildare all clean (build warnings unchanged at 18, all pre-existing bundle-size ones). NoCHANGES.mdentry, since that's generated from PR titles at release.Two things I'd flag for review
SyncModal.ansible-repository-sync.tsxandfile-repository-sync.tsxalready carry identical copies and I've followed suit rather than refactoring inside a feature PR. Happy to extract all three into a shared component, here or separately, if you'd prefer.mirrordefaults totruein the sync modal, matching the other plugins, though pulp_deb's own API default isfalse. I kept UI consistency, but say the word and I'll flip it — mirroring is the destructive direction.@bmbouter @himdel @dkliban @ipanova