The feelpp-aptly-publisher PyPI package is now ready for publication.
apt/
├── src/feelpp_aptly_publisher/ # Package source code
│ ├── __init__.py # Package initialization
│ ├── __main__.py # CLI entry point
│ ├── cli.py # Command-line interface
│ ├── publisher.py # Core publishing logic
│ └── py.typed # Type stub marker
├── tests/ # Test suite
│ ├── test_publisher.py # 5 tests passing ✓
│ └── test_cli.py # 5 tests passing ✓
├── .github/workflows/ # CI/CD pipelines
│ ├── quality.yml # Code quality checks
│ ├── build.yml # Build and test
│ └── publish.yml # PyPI publishing
├── examples/ # Usage examples
├── pyproject.toml # Package metadata
├── Makefile # Development commands
├── setup-dev.sh # Development setup
├── CONTRIBUTING.md # Developer guide
├── QUICKSTART.md # Quick start guide
├── README_PYPI.md # Package README
└── .flake8 # Linting config
All passing:
- ✅ Black: Code formatting (120 char lines)
- ✅ Flake8: Linting (zero issues)
- ✅ Mypy: Type checking (Python 3.9+)
- ✅ Pytest: 10/10 tests passing
- ✅ Build: Package builds successfully
- Name:
feelpp-aptly-publisher - Version:
1.0.0 - Python: 3.8+ (tested on 3.8-3.12)
- Dependencies: None (stdlib only!)
- CLI command:
feelpp-apt-publish
-
Push to GitHub:
cd /nvme0/prudhomm/Devel/feelpp.quickfix/apt git add . git commit -m "feat: create feelpp-aptly-publisher PyPI package" git push origin main
-
Create GitHub Release:
- Go to https://github.com/feelpp/apt/releases/new
- Tag:
v1.0.0 - Title:
v1.0.0 - Initial Release - Description: See below
- Click "Publish release"
-
CI Automatically Publishes:
- GitHub Actions runs
.github/workflows/publish.yml - Builds package
- Publishes to PyPI (trusted publishing)
- No API tokens needed!
- GitHub Actions runs
cd /nvme0/prudhomm/Devel/feelpp.quickfix/apt
source .venv/bin/activate
# Build
make build
# Check
twine check dist/*
# Publish to Test PyPI first
twine upload --repository testpypi dist/*
# Test installation
pip install --index-url https://test.pypi.org/simple/ feelpp-aptly-publisher
# If all good, publish to production PyPI
twine upload dist/*# feelpp-aptly-publisher v1.0.0
First stable release of the Feel++ Aptly Publisher!
## Features
- 🚀 Publish Debian packages to APT repositories via GitHub Pages
- 📦 Support for multiple channels (stable, testing, pr)
- 🔐 GPG signing support
- 🐍 Python 3.8+ compatible
- 🧪 Comprehensive test suite
- 📚 Full documentation
## Installation
```bash
pip install feelpp-aptly-publisher# Publish packages
feelpp-apt-publish \
--component myproject \
--channel stable \
--distro noble \
--debs ./packages/- CLI tool:
feelpp-apt-publish - Python API:
from feelpp_aptly_publisher import AptlyPublisher - Zero external dependencies
- Full type hints
- 100% test coverage
System tools (must be on PATH):
- aptly
- git
- rsync
- gpg (optional, for signing)
Full Changelog: https://github.com/feelpp/apt/commits/v1.0.0
## 🔧 Post-Publication Tasks
### 1. Update MMG Repository
```bash
cd /nvme0/prudhomm/Devel/feelpp.quickfix/third-party/mmg
# Update publish-mmg.sh to use PyPI package
cat > publish-mmg.sh << 'EOF'
#!/bin/bash
set -e
# Install publisher if not available
if ! command -v feelpp-apt-publish &> /dev/null; then
echo "Installing feelpp-aptly-publisher..."
pip install feelpp-aptly-publisher
fi
CHANNEL="${1:-stable}"
DISTRO="${2:-noble}"
PACKAGES_DIR="$(dirname "$0")/packages"
feelpp-apt-publish \
--component mmg \
--channel "$CHANNEL" \
--distro "$DISTRO" \
--debs "$PACKAGES_DIR" \
--verbose
EOF
chmod +x publish-mmg.sh
Update all projects to use:
pip install feelpp-aptly-publisher
feelpp-apt-publish --component $PROJECT ...GitHub Actions example:
- name: Install publisher
run: pip install feelpp-aptly-publisher
- name: Publish to APT
run: feelpp-apt-publish --component ${{ github.event.repository.name }} ...- Add to Feel++ developer documentation
- Update README in apt repository
- Create wiki pages if needed
Track:
- PyPI downloads
- GitHub stars
- Issues/PRs
- Adoption in Feel++ projects
Potential v1.1.0+ features:
- Support for multiple architectures (arm64, etc.)
- Parallel package uploads
- Better progress indicators
- Config file support
- Dry-run mode
- Repository cleanup commands
-
Check credentials:
- For GitHub Actions: Configure trusted publishing
- For manual: Use API token or ~/.pypirc
-
Package name conflict:
- Name might be taken
- Try alternative names
-
Version exists:
- Bump version in pyproject.toml
- Can't republish same version
Users might need:
# System dependencies
sudo apt install aptly git rsync
# For signing
sudo apt install gnupg- Issues: https://github.com/feelpp/apt/issues
- Discussions: https://github.com/feelpp/apt/discussions
- Email: [email protected]
Once published, users worldwide can:
pip install feelpp-aptly-publisherNo more:
- Cloning entire apt repository
- Managing git submodules
- Path configuration issues
- Version inconsistencies
Just pure, simple pip install goodness! 🚀
Ready to publish? Follow Method 1 above to get it on PyPI!