Skip to content

Add PyPI packaging (pyproject.toml, console entry point, publish workflow) #46

@rosspeili

Description

@rosspeili

Problem Statement

Rooms is installable only via git clone + pip install -r requirements.txt. Skillware ships as a proper Python package on PyPI with:

  • pyproject.toml (metadata, dependencies, optional extras)
  • [project.scripts] console entry (skillware = skillware.cli:main)
  • MANIFEST.in / package-data for non-Python assets
  • GitHub Actions publish.yml on release (trusted PyPI publishing)

Rooms has cli.py at the repository root (not importable after install), no rooms/__init__.py, and rooms.settings.example.yaml would not ship in a wheel without explicit packaging config. This blocks pip install rooms, CI parity with editable installs, and ARPA-wide consistency with Skillware.

Proposed Solution

  1. Add pyproject.toml modeled on Skillware:

    • name = "rooms" (or arpa-rooms if PyPI name taken — verify on PyPI)
    • requires-python = ">=3.10" (align with README badge or document 3.13+ explicitly)
    • Core deps: litellm, rich, pydantic, pyyaml, prompt_toolkit
    • Optional extras: [memory] → current requirements-memory.txt; [dev]pytest, flake8, black (optional)
    • [project.scripts] e.g. rooms = "rooms.cli:main" after moving or re-exporting CLI into the package
  2. Package layout:

    • Add rooms/__init__.py with __version__
    • Move cli.pyrooms/cli.py (or thin wrapper at root for backward compat — document breaking change)
    • Include rooms.settings.example.yaml via MANIFEST.in and/or [tool.setuptools.package-data]
  3. Convert requirements.txt to a dev pointer (Skillware pattern):

    start bash

    Development convenience — same install CI uses (see pyproject.toml).

    -e ".[dev,memory]"
    end bash

  4. Add .github/workflows/publish.yml — trigger on GitHub Release published, build with python -m build, publish via pypa/gh-action-pypi-publish + PyPI trusted publisher (maintainer setup).

  5. Update README Quick Start with pip install rooms (once published) and keep clone path for contributors.

  6. Tests still pass with pip install -e ".[dev]" and pytest tests/.

Acceptance criteria

  • pip install -e . from repo root installs package and rooms (or chosen) CLI command works
  • Example settings YAML ships in wheel and is discoverable via documented path
  • CI installs from pyproject.toml editable install
  • Publish workflow documented for maintainers (PyPI project + trusted publisher)
  • CHANGELOG entry under [Unreleased] when merged

Alternatives Considered

  • Keep clone-only — rejected; inconsistent with Skillware and limits adoption.
  • Publish without moving cli.py — rejected; root scripts do not install cleanly.
  • Poetry instead of setuptools — rejected; match Skillware's setuptools + pyproject.toml stack.

Priority

High 🔴

Additional Context

Skillware refs: pyproject.toml, MANIFEST.in, .github/workflows/publish.yml, requirements.txt as dev pointer.

Rooms today: cli.py at root, rooms/ without __init__.py, split requirements-memory.txt (#42).

Coordinate with any headless/API embedding work (#6, #7) so entry points stay stable.

Metadata

Metadata

Assignees

No one assigned

    Labels

    cliImprovements to the interactive wizard or terminal output.enhancementNew feature or request
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions