59 lines
2.3 KiB
Markdown
59 lines
2.3 KiB
Markdown
# git-build-triggers
|
|
|
|
Provides webhooks to deploy from git repositories.
|
|
|
|
* Setup `git-build-triggers.py` with config, providing a http backend
|
|
* Put some reverse proxy in front (apache, nginx)
|
|
* Configure webhook URL with bearer token in your favorite git hosting to trigger when a certain branch is pushed
|
|
|
|
Only one build per configured repository will run at a time; when more builds are triggered while a build is already running, it will only trigger a single further build after the current one.
|
|
|
|
A rebuild will first update the repository:
|
|
|
|
```
|
|
git clean force -d -x
|
|
git remote update origin
|
|
git reset --hard origin/$(git rev-parse --abbrev-ref HEAD)
|
|
```
|
|
|
|
If the top commit (`git rev-parse HEAD`) is the same as for the last build it won't trigger the build script.
|
|
|
|
Otherwise it will run the build script and store its output.
|
|
|
|
For consistency `git clean force -d -x` is run after the build again (a "recheck" would do that too without necessarily building anything, so this must not break your build results).
|
|
|
|
You can visit the webhook URL in a browser to get the output of the last finished run (this also triggers a check for new commits); it won't wait for the current build to finish.
|
|
|
|
`git-build-triggers.py` uses `http.server.HTTPServer` (https://docs.python.org/3/library/http.server.html), which isn't recommended for production, but should be good enough for this. But you might want to restrict access to somewhat trusted IP ranges.
|
|
|
|
## Install
|
|
|
|
Dependencies:
|
|
|
|
* python3 (probably >= 3.11)
|
|
* pyyaml (https://github.com/yaml/pyyaml)
|
|
* trio (https://github.com/python-trio/trio)
|
|
* git
|
|
|
|
Put the script `git-build-triggers.py` where you want (e.g. `~/bin` or `/usr/local/bin`).
|
|
|
|
## Config
|
|
|
|
See `example.yaml` in this repo for basic structure.
|
|
|
|
The configured repositories correspond to (different!) git checkouts on the local disk.
|
|
The repository name is used with the `base-path` to build the full URL.
|
|
A `base-path` of "/trigger-it", a repository name of "example" and `port: 8000` would provide `http://127.0.0.1:8000/trigger-it/example` as webhook.
|
|
|
|
Tokens must be at least 16 characters long.
|
|
|
|
A reverse proxy should be configured to add https.
|
|
|
|
## mypy linting
|
|
|
|
```
|
|
virtualenv --system-site-packages venv
|
|
./venv/bin/pip install trio-typing # and perhaps other dependencies
|
|
./venv/bin/python3 -m mypy git-build-triggers.py
|
|
```
|