The feelpp-aptly-publisher now supports publishing multiple components to the same
distribution/channel while preserving all components in the InRelease file.
Previously, each call to feelpp-apt-publish would replace the entire publication,
resulting in the InRelease file listing only the most recently published component:
# First publish
feelpp-apt-publish --component ktirio --distro noble --debs ./ktirio-packages/
# Result: InRelease has "Components: ktirio"
# Second publish
feelpp-apt-publish --component mmg --distro noble --debs ./mmg-packages/
# Result: InRelease has "Components: mmg" (ktirio is GONE!)This is because aptly publish switch replaces the publication, not adds to it.
The publisher now intelligently detects the current state and chooses the appropriate action:
- First Publication: Use
aptly publish snapshotto create initial publication - Update Existing Component: Use
aptly publish switchto update that component's packages - Add New Component: Use
aptly publish addto add a new component alongside existing ones
- Check if publication exists:
aptly publish show <distro> <prefix> - If exists, read the InRelease file to get existing components
- Determine if the current component is new or existing
- Choose appropriate aptly command
if publication exists:
if component in existing_components:
# Update existing component
aptly publish switch -component=<comp> <distro> <prefix> <snapshot>
else:
# Add new component
aptly publish add <distro> <prefix> <snapshot> <component>
aptly publish update <distro> <prefix>
else:
# First publish
aptly publish snapshot -distribution=<distro> -component=<comp> <snapshot> <prefix># Publish ktirio-urban-building
feelpp-apt-publish \
--component ktirio-urban-building \
--channel stable \
--distro noble \
--debs ./ktirio-packages/
# Result: InRelease has "Components: ktirio-urban-building"# Add mmg component
feelpp-apt-publish \
--component mmg \
--channel stable \
--distro noble \
--debs ./mmg-packages/
# Result: InRelease has "Components: ktirio-urban-building mmg"# Add parmmg component
feelpp-apt-publish \
--component parmmg \
--channel stable \
--distro noble \
--debs ./parmmg-packages/
# Result: InRelease has "Components: ktirio-urban-building mmg parmmg"# Update mmg with new version
feelpp-apt-publish \
--component mmg \
--channel stable \
--distro noble \
--debs ./mmg-packages-updated/
# Result: InRelease still has "Components: ktirio-urban-building mmg parmmg"
# But mmg packages are updated to new versionAfter publishing, verify all components are listed:
# Check InRelease
curl -s https://feelpp.github.io/apt/stable/dists/noble/InRelease | grep Components
# Should show: Components: ktirio-urban-building mmg parmmg
# Verify each component has packages
curl -s https://feelpp.github.io/apt/stable/dists/noble/mmg/binary-amd64/Packages | head
curl -s https://feelpp.github.io/apt/stable/dists/noble/parmmg/binary-amd64/Packages | headUsers can now use multiple components in a single sources.list entry:
# Single line with all components
deb [arch=amd64 signed-by=/usr/share/keyrings/feelpp.gpg] \
https://feelpp.github.io/apt/stable noble ktirio-urban-building mmg parmmgOr separate entries:
# Separate lines for each component
deb [arch=amd64 signed-by=/usr/share/keyrings/feelpp.gpg] \
https://feelpp.github.io/apt/stable noble mmg
deb [arch=amd64 signed-by=/usr/share/keyrings/feelpp.gpg] \
https://feelpp.github.io/apt/stable noble parmmg-
aptly publish snapshot: Creates a new publication with specified component(s)aptly publish snapshot -distribution=noble -component=mmg <snapshot> stable
-
aptly publish switch: Updates an existing component's packagesaptly publish switch -component=mmg noble stable <new-snapshot>
-
aptly publish add: Adds a new component to existing publicationaptly publish add noble stable <snapshot> <component>
-
aptly publish update: Regenerates publication metadata (InRelease, Release, etc.)aptly publish update noble stable
The InRelease file lists all available components:
Hash: SHA512
Origin: Feel++
Label: Feel++
Codename: noble
Date: Sat, 12 Oct 2025 12:00:00 UTC
Architectures: amd64
Components: ktirio-urban-building mmg parmmg
Description: Feel++ APT Repository
...
APT reads this file first and only looks for package indices in listed components.
If you've already published components separately and they're not all in InRelease:
-
Option A: Re-publish in order
# Publish first component (creates publication) feelpp-apt-publish --component ktirio-urban-building --distro noble --debs ./ktirio/ # Add remaining components feelpp-apt-publish --component mmg --distro noble --debs ./mmg/ feelpp-apt-publish --component parmmg --distro noble --debs ./parmmg/
-
Option B: Manual aptly commands
- Clone gh-pages branch
- Use aptly directly to add missing components
- Push changes back
The new behavior is fully backward compatible:
- Single-component publications work exactly as before
- Existing publications are detected and preserved
- Component updates work transparently
Run the test suite to verify multi-component behavior:
cd /nvme0/prudhomm/Devel/feelpp.quickfix/apt
pytest tests/ -v-
Parallel Component Publishing: Publish multiple components in one command
feelpp-apt-publish --components mmg,parmmg --distro noble --debs-dir ./packages/
-
Component Removal: Add ability to remove components
feelpp-apt-publish --remove-component old-project --distro noble
-
Component Listing: Show what components exist in a publication
feelpp-apt-publish --list-components --distro noble --channel stable
- Aptly documentation: https://www.aptly.info/doc/aptly/publish/
- APT repository format: https://wiki.debian.org/DebianRepository/Format
- Debian Policy Manual: https://www.debian.org/doc/debian-policy/