Metadata-Version: 2.4
Name: pyinstaller-plus
Version: 0.1.22
Summary: PyInstaller wrapper that runs DistroMate packaging/publish after build
License-Expression: LicenseRef-Proprietary
Keywords: pyinstaller,distromate,packaging,installer,publish
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: Build Tools
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: pyinstaller
Requires-Dist: tomli; python_version < "3.11"

# pyinstaller-plus

`pyinstaller-plus` is a PyInstaller-compatible wrapper that keeps your existing
PyInstaller workflow and then runs DistroMate packaging or publishing, with a
built-in login shortcut.
This README focuses on end-user packaging usage.

## Features

- Compatible with standard PyInstaller arguments
- Supports `login` mode (`distromate login`)
- Runs `distromate package` after a successful PyInstaller build
- Supports publish mode (`distromate publish`)
- Works on Windows, macOS, and Linux
- Auto-detects DistroMate CLI and falls back to installer scripts when needed
- Auto-creates `distromate.yaml` when missing and auto-syncs package fields

## Install

```bash
pip install pyinstaller-plus
```

## Quick Start

1. Log in to DistroMate:

```bash
pyinstaller-plus login
```

2. Optional: create a `distromate.yaml` (or `distromate.yml`) in your project root.
   If missing, `pyinstaller-plus` will create one with defaults.

3. Build and package:

```bash
pyinstaller-plus package -v 1.2.3 your.spec
```

4. Build and publish:

```bash
pyinstaller-plus publish -v 1.2.3 your.spec
```

## CLI Behavior

`pyinstaller-plus` executes one of these flows:

- `login`: resolve DistroMate CLI, then run `distromate login`
- `package` / `publish`:

  1. Run `python -m PyInstaller ...`
  2. Resolve DistroMate CLI from:
     - `PATH`
     - bundled binary in this package
     - OS-specific installer fallback
  3. Resolve release version from:
     - `package -v` / `package --version`
     - `publish -v` / `publish --version`
     - `pyproject.toml` -> `project.version`
  4. Ensure and auto-update `distromate.yaml`/`distromate.yml` from PyInstaller args/spec:
     - top-level `name` (only auto-fill when missing)
     - `package.name`
     - `package.executable`
     - `package.target`
     - `package.icon` (from `--icon` or `EXE(icon=...)`)
     - `package.description` (from `--version-file` or `EXE(version=...)` -> `FileDescription`)
     - `package.publisher` (from `--version-file` or `EXE(version=...)` -> `CompanyName`)
  5. Run one of:
     - `distromate package -v <version>`
     - `distromate publish -v <version>`

### Commands

- `login`: run `distromate login`
- `package -v <version>` / `package --version <version>`: build with PyInstaller, then run `distromate package`
- `publish -v <version>` / `publish --version <version>`: build with PyInstaller, then run `distromate publish`

Use `--` when you need to pass PyInstaller's own `--version` through the wrapper.

## Example `distromate.yml`

```yaml
appid: your_appid
name: MyApp
description: My desktop app

package:
  name: myapp
  executable: dist/myapp.exe
  target: dist
  publisher: MyApp Publisher
  language: english

preservePaths:
  - config
  - data

ignores:
  - "*.log"
  - temp/
  - "__pycache__/"
  - "*.pyc"
```
