generated from coop-cloud/example
143 lines
4.0 KiB
Markdown
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! |