Files
pretix-plugins/README.md

143 lines
4.0 KiB
Markdown

# Pretix Plugins
A community-maintained mono-repository of custom pretix plugins and tooling to
build a bundled Docker image for use with the
[Co-op Cloud pretix recipe](https://git.coopcloud.tech/coop-cloud/pretix).
---
## How it works
```
plugins/ ← plugin source code lives here (Python packages)
my-plugin/
pretix_my_plugin/
setup.py
plugins.txt ← select which plugins go into the Docker image
Dockerfile ← builds the image from plugins.txt
.gitea/workflows/ ← CI: automatically builds & pushes image on every tag
```
Each plugin is a standard Python package inside `plugins/`. The `plugins.txt`
file controls which of those plugins (and optionally any PyPI or external
plugins) are installed into the final Docker image.
The resulting image is a drop-in replacement for `pretix/standalone` and is
used via the optional `compose.plugin.yml` override in the pretix recipe.
---
## Using the image in your pretix deployment
In your app `.env` file (managed by abra):
```bash
COMPOSE_FILE=compose.yml:compose.plugin.yml
PRETIX_PLUGIN_IMAGE=git.coopcloud.tech/<your-org>/pretix-plugins:1.0.0
```
If `PRETIX_PLUGIN_IMAGE` is not set, the standard `pretix/standalone` image
is used — operators who do not need plugins are not affected at all.
---
## Selecting plugins
Edit `plugins.txt` to choose which plugins are included in your image.
Each non-empty, non-comment line is passed directly to `pip install`.
```
# Local plugins from this repo (recommended for custom plugins):
./plugins/attendance_confirm_plugin/
./plugins/selective_export_plugin/
# Community plugins from PyPI:
pretix-pages
# External plugins via Git URL:
git+https://git.coopcloud.tech/other-org/pretix-some-plugin.git@1.0.0
```
Comment out or remove a line to exclude a plugin from the image.
---
## Building and publishing the image
### Automatic (recommended)
Push a Git tag to trigger the Gitea Actions workflow:
```bash
git tag 1.0.0
git push origin 1.0.0
```
The CI pipeline will build and push:
- `git.coopcloud.tech/<your-org>/pretix-plugins:1.0.0`
- `git.coopcloud.tech/<your-org>/pretix-plugins:latest`
### Manual
```bash
docker build -t git.coopcloud.tech/<your-org>/pretix-plugins:1.0.0 .
docker push git.coopcloud.tech/<your-org>/pretix-plugins:1.0.0
```
---
## Contributing a plugin
1. Create a new directory under `plugins/` named after your plugin:
```
plugins/my-new-plugin/
```
2. Add a valid pretix plugin Python package inside it (see structure below).
3. Add it to `plugins.txt` if you want it included in the default image build.
4. Open a pull request.
### Required plugin structure
```
plugins/my-new-plugin/
├── pretix_my_new_plugin/
│ ├── __init__.py
│ └── apps.py ← AppConfig + PretixPluginMeta required
└── setup.py ← entry_points for pretix.plugin required
```
See `plugins/attendance_confirm_plugin/` for a fully working reference implementation.
### Plugin checklist before opening a PR
- [ ] `setup.py` contains a valid `pretix.plugin` entry point
- [ ] `apps.py` contains `AppConfig` with a `PretixPluginMeta` inner class
- [ ] Plugin installs cleanly with `pip install ./plugins/my-new-plugin/`
- [ ] No hard-coded credentials or environment-specific configuration
---
## Repository structure
```
pretix-plugin-catalogue/
├── README.md
├── Dockerfile ← builds the bundle image
├── plugins.txt ← controls which plugins are included
├── .gitea/
│ └── workflows/
│ └── docker.yml ← CI: build & push on tag
└── plugins/
└── example-plugin/ ← reference plugin implementation
├── pretix_example_plugin/
│ ├── __init__.py
│ └── apps.py
└── setup.py
```
## Credits
The plugins attendance_confirm_plugin and selective_export_plugin were developed by make IT social (https://makeitsocial.net/). Thanks!