Restructure repo layout, wiring src/ and packaging for local and distro builds
- Add dev runner main.py that prefers local src/ over installed pkgmgr - Move Arch/Debian/Fedora packaging files under packaging/* and update build scripts - Adjust .gitignore/.dockerignore for new packaging paths and src/source/ - Improve config defaults discovery to support src/ layout and installed packages - Update architecture diagram and add TODO overview for TAGS/MIRROR/SIGNING_KEY https://chatgpt.com/share/693a76a0-e408-800f-9939-868524cbef4d
This commit is contained in:
@@ -28,4 +28,4 @@ Thumbs.db
|
|||||||
# Arch pkg artifacts
|
# Arch pkg artifacts
|
||||||
*.pkg.tar.*
|
*.pkg.tar.*
|
||||||
*.log
|
*.log
|
||||||
package-manager-*
|
packaging/arch/package-manager-*
|
||||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -15,16 +15,9 @@ dist/
|
|||||||
build/*
|
build/*
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
pkg
|
pkg
|
||||||
src/source
|
src/source/
|
||||||
package-manager-*
|
package-manager-*
|
||||||
|
|
||||||
# debian
|
|
||||||
debian/package-manager/
|
|
||||||
debian/debhelper-build-stamp
|
|
||||||
debian/files
|
|
||||||
debian/.debhelper/
|
|
||||||
debian/package-manager.substvars
|
|
||||||
|
|
||||||
# Editor files
|
# Editor files
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
.idea/
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ installation layers, and setup controller flow:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
**Diagram status:** *Stand: 10. Dezember 2025*
|
**Diagram status:** *Stand: 11. Dezember 2025*
|
||||||
**Always-up-to-date version:** https://s.veen.world/pkgmgrmp
|
**Always-up-to-date version:** https://s.veen.world/pkgmgrmp
|
||||||
|
|
||||||
## Installation ⚙️
|
## Installation ⚙️
|
||||||
|
|||||||
7
TODO.md
Normal file
7
TODO.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# to-dos
|
||||||
|
|
||||||
|
For the following checkout the implementation map:
|
||||||
|
|
||||||
|
- Implement TAGS
|
||||||
|
- Implement MIRROR
|
||||||
|
- Implement SIGNING_KEY
|
||||||
BIN
assets/map.png
BIN
assets/map.png
Binary file not shown.
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
10
main.py
10
main.py
@@ -1,6 +1,14 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
# Ensure local src/ overrides installed package
|
||||||
|
ROOT = Path(__file__).resolve().parent
|
||||||
|
SRC = ROOT / "src"
|
||||||
|
if SRC.is_dir():
|
||||||
|
sys.path.insert(0, str(SRC))
|
||||||
|
|
||||||
from pkgmgr.cli import main
|
from pkgmgr.cli import main
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
6
packaging/debian/.gitignore
vendored
Normal file
6
packaging/debian/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# debian
|
||||||
|
package-manager/
|
||||||
|
debhelper-build-stamp
|
||||||
|
files
|
||||||
|
.debhelper/
|
||||||
|
package-manager.substvars
|
||||||
@@ -39,13 +39,14 @@ pkgmgr = "pkgmgr.cli:main"
|
|||||||
# -----------------------------
|
# -----------------------------
|
||||||
# setuptools configuration
|
# setuptools configuration
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# We use find_packages(), not a fixed list,
|
# Source layout: all packages live under "src/"
|
||||||
# and explicitly include pkgmgr* and config*
|
[tool.setuptools]
|
||||||
|
package-dir = { "" = "src", "config" = "config" }
|
||||||
|
|
||||||
[tool.setuptools.packages.find]
|
[tool.setuptools.packages.find]
|
||||||
where = ["."]
|
where = ["src", "."]
|
||||||
include = ["pkgmgr*", "config*"]
|
include = ["pkgmgr*", "config*"]
|
||||||
|
|
||||||
# Ensure defaults.yaml is shipped inside wheels & nix builds
|
|
||||||
[tool.setuptools.package-data]
|
[tool.setuptools.package-data]
|
||||||
"config" = ["defaults.yaml"]
|
"config" = ["defaults.yaml"]
|
||||||
|
|
||||||
|
|||||||
@@ -3,10 +3,21 @@ set -euo pipefail
|
|||||||
|
|
||||||
echo "[arch/package] Building Arch package (makepkg --nodeps)..."
|
echo "[arch/package] Building Arch package (makepkg --nodeps)..."
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
||||||
|
PKG_DIR="${PROJECT_ROOT}/packaging/arch"
|
||||||
|
|
||||||
|
if [[ ! -f "${PKG_DIR}/PKGBUILD" ]]; then
|
||||||
|
echo "[arch/package] ERROR: PKGBUILD not found in ${PKG_DIR}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "${PKG_DIR}"
|
||||||
|
|
||||||
if id aur_builder >/dev/null 2>&1; then
|
if id aur_builder >/dev/null 2>&1; then
|
||||||
echo "[arch/package] Using 'aur_builder' user for makepkg..."
|
echo "[arch/package] Using 'aur_builder' user for makepkg..."
|
||||||
chown -R aur_builder:aur_builder "$(pwd)"
|
chown -R aur_builder:aur_builder "${PKG_DIR}"
|
||||||
su aur_builder -c "cd '$(pwd)' && rm -f package-manager-*.pkg.tar.* && makepkg --noconfirm --clean --nodeps"
|
su aur_builder -c "cd '${PKG_DIR}' && rm -f package-manager-*.pkg.tar.* && makepkg --noconfirm --clean --nodeps"
|
||||||
else
|
else
|
||||||
echo "[arch/package] WARNING: user 'aur_builder' not found, running makepkg as current user..."
|
echo "[arch/package] WARNING: user 'aur_builder' not found, running makepkg as current user..."
|
||||||
rm -f package-manager-*.pkg.tar.*
|
rm -f package-manager-*.pkg.tar.*
|
||||||
|
|||||||
@@ -4,8 +4,17 @@ set -euo pipefail
|
|||||||
echo "[centos/package] Setting up rpmbuild directories..."
|
echo "[centos/package] Setting up rpmbuild directories..."
|
||||||
mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
|
mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
||||||
|
SPEC_PATH="${PROJECT_ROOT}/packaging/fedora/package-manager.spec"
|
||||||
|
|
||||||
|
if [[ ! -f "${SPEC_PATH}" ]]; then
|
||||||
|
echo "[centos/package] ERROR: SPEC file not found: ${SPEC_PATH}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "[centos/package] Extracting version from package-manager.spec..."
|
echo "[centos/package] Extracting version from package-manager.spec..."
|
||||||
version="$(grep -E '^Version:' package-manager.spec | awk '{print $2}')"
|
version="$(grep -E '^Version:' "${SPEC_PATH}" | awk '{print $2}')"
|
||||||
if [[ -z "${version}" ]]; then
|
if [[ -z "${version}" ]]; then
|
||||||
echo "ERROR: Version missing!"
|
echo "ERROR: Version missing!"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -15,13 +24,13 @@ srcdir="package-manager-${version}"
|
|||||||
echo "[centos/package] Preparing source tree: ${srcdir}"
|
echo "[centos/package] Preparing source tree: ${srcdir}"
|
||||||
rm -rf "/tmp/${srcdir}"
|
rm -rf "/tmp/${srcdir}"
|
||||||
mkdir -p "/tmp/${srcdir}"
|
mkdir -p "/tmp/${srcdir}"
|
||||||
cp -a . "/tmp/${srcdir}/"
|
cp -a "${PROJECT_ROOT}/." "/tmp/${srcdir}/"
|
||||||
|
|
||||||
echo "[centos/package] Creating source tarball..."
|
echo "[centos/package] Creating source tarball..."
|
||||||
tar czf "/root/rpmbuild/SOURCES/${srcdir}.tar.gz" -C /tmp "${srcdir}"
|
tar czf "/root/rpmbuild/SOURCES/${srcdir}.tar.gz" -C /tmp "${srcdir}"
|
||||||
|
|
||||||
echo "[centos/package] Copying SPEC..."
|
echo "[centos/package] Copying SPEC..."
|
||||||
cp package-manager.spec /root/rpmbuild/SPECS/
|
cp "${SPEC_PATH}" /root/rpmbuild/SPECS/
|
||||||
|
|
||||||
echo "[centos/package] Running rpmbuild..."
|
echo "[centos/package] Running rpmbuild..."
|
||||||
cd /root/rpmbuild/SPECS
|
cd /root/rpmbuild/SPECS
|
||||||
|
|||||||
@@ -3,6 +3,25 @@ set -euo pipefail
|
|||||||
|
|
||||||
echo "[debian/package] Building Debian package..."
|
echo "[debian/package] Building Debian package..."
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
||||||
|
|
||||||
|
BUILD_ROOT="/tmp/package-manager-debian-build"
|
||||||
|
rm -rf "${BUILD_ROOT}"
|
||||||
|
mkdir -p "${BUILD_ROOT}"
|
||||||
|
|
||||||
|
echo "[debian/package] Syncing project sources to ${BUILD_ROOT}..."
|
||||||
|
rsync -a \
|
||||||
|
--exclude 'packaging/debian' \
|
||||||
|
"${PROJECT_ROOT}/" "${BUILD_ROOT}/"
|
||||||
|
|
||||||
|
echo "[debian/package] Overlaying debian/ metadata from packaging/debian..."
|
||||||
|
mkdir -p "${BUILD_ROOT}/debian"
|
||||||
|
cp -a "${PROJECT_ROOT}/packaging/debian/." "${BUILD_ROOT}/debian/"
|
||||||
|
|
||||||
|
cd "${BUILD_ROOT}"
|
||||||
|
|
||||||
|
echo "[debian/package] Running dpkg-buildpackage..."
|
||||||
dpkg-buildpackage -us -uc -b
|
dpkg-buildpackage -us -uc -b
|
||||||
|
|
||||||
echo "[debian/package] Installing generated DEB package..."
|
echo "[debian/package] Installing generated DEB package..."
|
||||||
|
|||||||
@@ -4,8 +4,17 @@ set -euo pipefail
|
|||||||
echo "[fedora/package] Setting up rpmbuild directories..."
|
echo "[fedora/package] Setting up rpmbuild directories..."
|
||||||
mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
|
mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
||||||
|
SPEC_PATH="${PROJECT_ROOT}/packaging/fedora/package-manager.spec"
|
||||||
|
|
||||||
|
if [[ ! -f "${SPEC_PATH}" ]]; then
|
||||||
|
echo "[fedora/package] ERROR: SPEC file not found: ${SPEC_PATH}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "[fedora/package] Extracting version from package-manager.spec..."
|
echo "[fedora/package] Extracting version from package-manager.spec..."
|
||||||
version="$(grep -E '^Version:' package-manager.spec | awk '{print $2}')"
|
version="$(grep -E '^Version:' "${SPEC_PATH}" | awk '{print $2}')"
|
||||||
if [[ -z "${version}" ]]; then
|
if [[ -z "${version}" ]]; then
|
||||||
echo "ERROR: Version missing!"
|
echo "ERROR: Version missing!"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -15,13 +24,13 @@ srcdir="package-manager-${version}"
|
|||||||
echo "[fedora/package] Preparing source tree: ${srcdir}"
|
echo "[fedora/package] Preparing source tree: ${srcdir}"
|
||||||
rm -rf "/tmp/${srcdir}"
|
rm -rf "/tmp/${srcdir}"
|
||||||
mkdir -p "/tmp/${srcdir}"
|
mkdir -p "/tmp/${srcdir}"
|
||||||
cp -a . "/tmp/${srcdir}/"
|
cp -a "${PROJECT_ROOT}/." "/tmp/${srcdir}/"
|
||||||
|
|
||||||
echo "[fedora/package] Creating source tarball..."
|
echo "[fedora/package] Creating source tarball..."
|
||||||
tar czf "/root/rpmbuild/SOURCES/${srcdir}.tar.gz" -C /tmp "${srcdir}"
|
tar czf "/root/rpmbuild/SOURCES/${srcdir}.tar.gz" -C /tmp "${srcdir}"
|
||||||
|
|
||||||
echo "[fedora/package] Copying SPEC..."
|
echo "[fedora/package] Copying SPEC..."
|
||||||
cp package-manager.spec /root/rpmbuild/SPECS/
|
cp "${SPEC_PATH}" /root/rpmbuild/SPECS/
|
||||||
|
|
||||||
echo "[fedora/package] Running rpmbuild..."
|
echo "[fedora/package] Running rpmbuild..."
|
||||||
cd /root/rpmbuild/SPECS
|
cd /root/rpmbuild/SPECS
|
||||||
|
|||||||
@@ -3,6 +3,25 @@ set -euo pipefail
|
|||||||
|
|
||||||
echo "[ubuntu/package] Building Ubuntu (Debian-style) package..."
|
echo "[ubuntu/package] Building Ubuntu (Debian-style) package..."
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
||||||
|
|
||||||
|
BUILD_ROOT="/tmp/package-manager-ubuntu-build"
|
||||||
|
rm -rf "${BUILD_ROOT}"
|
||||||
|
mkdir -p "${BUILD_ROOT}"
|
||||||
|
|
||||||
|
echo "[ubuntu/package] Syncing project sources to ${BUILD_ROOT}..."
|
||||||
|
rsync -a \
|
||||||
|
--exclude 'packaging/debian' \
|
||||||
|
"${PROJECT_ROOT}/" "${BUILD_ROOT}/"
|
||||||
|
|
||||||
|
echo "[ubuntu/package] Overlaying debian/ metadata from packaging/debian..."
|
||||||
|
mkdir -p "${BUILD_ROOT}/debian"
|
||||||
|
cp -a "${PROJECT_ROOT}/packaging/debian/." "${BUILD_ROOT}/debian/"
|
||||||
|
|
||||||
|
cd "${BUILD_ROOT}"
|
||||||
|
|
||||||
|
echo "[ubuntu/package] Running dpkg-buildpackage..."
|
||||||
dpkg-buildpackage -us -uc -b
|
dpkg-buildpackage -us -uc -b
|
||||||
|
|
||||||
echo "[ubuntu/package] Installing generated DEB package..."
|
echo "[ubuntu/package] Installing generated DEB package..."
|
||||||
|
|||||||
@@ -197,13 +197,8 @@ def _load_layer_dir(
|
|||||||
|
|
||||||
def _load_defaults_from_package_or_project() -> Dict[str, Any]:
|
def _load_defaults_from_package_or_project() -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Fallback: Versuche Defaults aus dem installierten Paket ODER
|
Fallback: load default configs from various possible install or development
|
||||||
aus dem Projekt-Root zu laden:
|
layouts (pip-installed, editable install, source repo with src/ layout).
|
||||||
|
|
||||||
<pkg_root>/config_defaults
|
|
||||||
<pkg_root>/config
|
|
||||||
<project_root>/config_defaults
|
|
||||||
<project_root>/config
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
import pkgmgr # type: ignore
|
import pkgmgr # type: ignore
|
||||||
@@ -211,14 +206,25 @@ def _load_defaults_from_package_or_project() -> Dict[str, Any]:
|
|||||||
return {"directories": {}, "repositories": []}
|
return {"directories": {}, "repositories": []}
|
||||||
|
|
||||||
pkg_root = Path(pkgmgr.__file__).resolve().parent
|
pkg_root = Path(pkgmgr.__file__).resolve().parent
|
||||||
project_root = pkg_root.parent
|
roots = set()
|
||||||
|
|
||||||
candidates = [
|
# Case 1: installed package (site-packages/pkgmgr)
|
||||||
pkg_root / "config_defaults",
|
roots.add(pkg_root)
|
||||||
pkg_root / "config",
|
|
||||||
project_root / "config_defaults",
|
# Case 2: parent directory (site-packages/, src/)
|
||||||
project_root / "config",
|
roots.add(pkg_root.parent)
|
||||||
]
|
|
||||||
|
# Case 3: src-layout during development:
|
||||||
|
# repo_root/src/pkgmgr -> repo_root
|
||||||
|
parent = pkg_root.parent
|
||||||
|
if parent.name == "src":
|
||||||
|
roots.add(parent.parent)
|
||||||
|
|
||||||
|
# Candidate config dirs
|
||||||
|
candidates = []
|
||||||
|
for root in roots:
|
||||||
|
candidates.append(root / "config_defaults")
|
||||||
|
candidates.append(root / "config")
|
||||||
|
|
||||||
for cand in candidates:
|
for cand in candidates:
|
||||||
defaults = _load_layer_dir(cand, skip_filename=None)
|
defaults = _load_layer_dir(cand, skip_filename=None)
|
||||||
@@ -227,7 +233,6 @@ def _load_defaults_from_package_or_project() -> Dict[str, Any]:
|
|||||||
|
|
||||||
return {"directories": {}, "repositories": []}
|
return {"directories": {}, "repositories": []}
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Hauptfunktion
|
# Hauptfunktion
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
Reference in New Issue
Block a user