Metadata-Version: 2.4
Name: paperless-ngx
Version: 2.20.15
Summary: A community-supported supercharged document management system: scan, index and archive all your physical documents
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: babel>=2.18
Requires-Dist: bleach~=6.3.0
Requires-Dist: celery[redis]~=5.5.1
Requires-Dist: channels~=4.2.2
Requires-Dist: channels-redis~=4.3
Requires-Dist: concurrent-log-handler~=0.9.29
Requires-Dist: dateparser~=1.2.2
Requires-Dist: django~=5.2.15
Requires-Dist: django-allauth[mfa,socialaccount]~=65.18.0
Requires-Dist: django-auditlog~=3.3.0
Requires-Dist: django-cachalot~=2.8.0
Requires-Dist: django-celery-results~=2.6.0
Requires-Dist: django-compression-middleware~=0.5.0
Requires-Dist: django-cors-headers~=4.9.0
Requires-Dist: django-extensions~=4.1
Requires-Dist: django-filter~=25.2
Requires-Dist: django-guardian~=3.2.0
Requires-Dist: django-multiselectfield~=1.0.1
Requires-Dist: django-soft-delete~=1.0.23
Requires-Dist: django-treenode>=0.23.2
Requires-Dist: djangorestframework~=3.16
Requires-Dist: djangorestframework-guardian~=0.4.0
Requires-Dist: drf-spectacular~=0.29
Requires-Dist: drf-spectacular-sidecar~=2025.12.1
Requires-Dist: drf-writable-nested~=0.7.2
Requires-Dist: filelock~=3.29.4
Requires-Dist: flower~=2.0.1
Requires-Dist: gotenberg-client~=0.14.0
Requires-Dist: httpx-oauth~=0.17
Requires-Dist: imap-tools~=1.13.0
Requires-Dist: inotifyrecursive~=0.3
Requires-Dist: jinja2~=3.1.6
Requires-Dist: langdetect~=1.0.9
Requires-Dist: nltk~=3.9.4
Requires-Dist: ocrmypdf~=16.13.0
Requires-Dist: pathvalidate~=3.3.1
Requires-Dist: pdf2image~=1.17.0
Requires-Dist: python-dateutil~=2.9.0
Requires-Dist: python-dotenv~=1.2.2
Requires-Dist: python-gnupg~=0.5.6
Requires-Dist: python-ipware~=3.0.0
Requires-Dist: python-magic~=0.4.27
Requires-Dist: pyzbar~=0.1.9
Requires-Dist: rapidfuzz~=3.14.5
Requires-Dist: redis[hiredis]~=5.3.1
Requires-Dist: regex>=2025.11.3
Requires-Dist: scikit-learn~=1.7.2
Requires-Dist: setproctitle~=1.3.7
Requires-Dist: tika-client~=0.11.0
Requires-Dist: tqdm~=4.68.2
Requires-Dist: watchdog~=6.0
Requires-Dist: whitenoise~=6.12
Requires-Dist: whoosh-reloaded>=2.7.5
Requires-Dist: zxing-cpp~=2.3.0
Provides-Extra: mariadb
Requires-Dist: mysqlclient~=2.2.8; extra == "mariadb"
Provides-Extra: postgres
Requires-Dist: psycopg[c,pool]==3.2.13; extra == "postgres"
Requires-Dist: psycopg-c==3.2.13; extra == "postgres"
Requires-Dist: psycopg-pool==3.2.8; extra == "postgres"
Provides-Extra: webserver
Requires-Dist: granian[uvloop]~=2.7.6; extra == "webserver"

# Wheeler

A containerized [Python wheel](https://packaging.python.org/en/latest/glossary/#term-Built-Distribution) builder and publisher for private registries.

Built on **Alpine Linux**, powered by [`uv`](https://github.com/astral-sh/uv), and tailored for publishing packages to [Forgejo](https://forgejo.org/) PyPI registries.

---

## Overview

Wheeler packages Python applications into distributable wheels inside a reproducible Docker container. It handles dependency resolution, wheel building, and upload to private package registries — all in one image.

Key components:

| Component | Purpose |
|-----------|---------|
| `uv` | Fast Python package installer and resolver |
| `uv-migrator` | Migrate legacy Python projects to `uv` |
| `buildah` / `podman` | OCI-compliant image building and pushing |
| `twine` | Secure wheel upload to PyPI-compatible registries |

---

## Quick Start

### Build the image

```bash
docker build -t wheeler:latest .
```

### Run the builder

```bash
docker run --rm \
  -v $(pwd):/build \
  -e owner=your-org \
  -e username=your-user \
  -e password=your-token \
  wheeler:latest
```

The builder will:

1. Export locked dependencies from `pyproject.toml` / `uv.lock`
2. Build wheels for all packages
3. Upload them to the configured Forgejo PyPI registry

---

## Project Layout

```
.
├── Dockerfile                    # Multi-stage Alpine-based builder image
├── builder.sh                    # Entrypoint script (export, build, upload)
├── cliff.toml                    # git-cliff changelog configuration
├── pypirc.tmpl                   # twine/auth template with envsubst
├── pyproject.toml                # Primary project dependencies (PowerDNS-Admin)
├── pyproject.toml.paperless      # Alternate project profile (paperless-ngx)
├── .forgejo/workflows/           # CI/CD workflow definitions
│   └── build_image.yml           # Automated image build & registry push
└── .pre-commit-config.yaml       # Conventional commit enforcement
```

---

## Contributing

This repository follows [**Conventional Commits**](https://www.conventionalcommits.org/) for automated changelog generation and versioning.

### Commit Message Format

```
<type>(<scope>): <short summary>

[optional body]

[optional footer(s)]
```

**Common types:**

| Type | Description |
|------|-------------|
| `feat` | New feature or significant change |
| `fix` | Bug fix |
| `docs` | Documentation-only changes |
| `style` | Code style changes (formatting, no logic change) |
| `refactor` | Code restructuring without feature changes |
| `perf` | Performance improvements |
| `test` | Adding or correcting tests |
| `chore` | Maintenance tasks (build, deps, CI) |

**Scopes used in this project:**

- `alpine` — Alpine Linux base image version
- `uv` — uv tool version or configuration
- `python` — Python runtime or package changes
- `docker` — Dockerfile or image build changes
- `ci` — Forgejo workflow or CI configuration
- `changelog` — Changelog or release tooling

### Pre-commit Hooks

Install hooks to enforce conventions locally:

```bash
pre-commit install
pre-commit install --hook-type commit-msg
```

Hooks include:

- `commitizen` — Validate commit messages
- `conventional-pre-commit` — Commit-msg linting
- `gitleaks` — Secret scanning
- `yamlfmt` — YAML formatting

### Changelog

The changelog is generated with [git-cliff](https://git-cliff.org/):

```bash
git-cliff --config cliff.toml --output CHANGELOG.md
```

---

## CI/CD

The `.forgejo/workflows/build_image.yml` workflow:

- Builds the Wheeler image on every push to `main`
- Tags images with the Alpine version (e.g., `3.24.0`, `3.24`, `3`)
- Pushes to `git.desord.re/desordre/forgejo/wheeler`

---

## License

SPDX-License-Identifier: MIT
