mirror of
https://github.com/Xe138/windmill-git-sync.git
synced 2026-04-01 17:27:23 -04:00
Initial commit: Windmill Git Sync service
Add containerized service for syncing Windmill workspaces to Git repositories. Features: - Flask webhook server for triggering syncs from Windmill - wmill CLI integration for pulling workspace content - Automated Git commits and push to remote repository - Network-isolated (only accessible within Docker network) - Designed to integrate with existing Windmill docker-compose files Key components: - Docker container with Python 3.11, wmill CLI, Git, and Flask - Sync engine with error handling and logging - External volume support for persistent workspace data - Comprehensive documentation (README.md and CLAUDE.md)
This commit is contained in:
91
README.md
Normal file
91
README.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# Windmill Git Sync
|
||||
|
||||
A containerized service for syncing Windmill workspaces to Git repositories via webhook triggers.
|
||||
|
||||
## Overview
|
||||
|
||||
This service provides automated backup of Windmill workspaces to Git. It runs a lightweight Flask web server that responds to webhook requests from Windmill, syncing the workspace content using the `wmill` CLI and pushing changes to a remote Git repository.
|
||||
|
||||
## Features
|
||||
|
||||
- **Webhook-triggered sync**: Windmill can trigger backups via HTTP POST requests
|
||||
- **Dockerized**: Runs as a container in the same network as Windmill
|
||||
- **Git integration**: Automatic commits and pushes to remote repository
|
||||
- **Authentication**: Supports Personal Access Token (PAT) authentication for Git
|
||||
- **Health checks**: Built-in health endpoint for monitoring
|
||||
|
||||
## Quick Start
|
||||
|
||||
This service is designed to be added to your existing Windmill docker-compose file.
|
||||
|
||||
1. Copy the example environment file:
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
2. Edit `.env` with your configuration:
|
||||
- Set `WINDMILL_TOKEN` to your Windmill API token
|
||||
- Set `GIT_REMOTE_URL` to your Git repository URL
|
||||
- Set `GIT_TOKEN` to your Git Personal Access Token
|
||||
- Set `WORKSPACE_VOLUME` to an external Docker volume name
|
||||
|
||||
3. Create the external volume:
|
||||
```bash
|
||||
docker volume create windmill-workspace-data
|
||||
```
|
||||
|
||||
4. Add the `windmill-git-sync` service block from `docker-compose.yml` to your existing Windmill docker-compose file.
|
||||
|
||||
5. Build and start the service:
|
||||
```bash
|
||||
docker-compose up -d windmill-git-sync
|
||||
```
|
||||
|
||||
6. Trigger a sync from Windmill (see Integration section below) or test from another container:
|
||||
```bash
|
||||
docker-compose exec windmill_server curl -X POST http://windmill-git-sync:8080/sync
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
All configuration is done via environment variables in `.env`:
|
||||
|
||||
| Variable | Required | Description |
|
||||
|----------|----------|-------------|
|
||||
| `WINDMILL_BASE_URL` | Yes | URL of Windmill instance (e.g., `http://windmill:8000`) |
|
||||
| `WINDMILL_TOKEN` | Yes | Windmill API token for authentication |
|
||||
| `WINDMILL_WORKSPACE` | No | Workspace name (default: `default`) |
|
||||
| `WORKSPACE_VOLUME` | Yes | External Docker volume name for workspace data |
|
||||
| `GIT_REMOTE_URL` | Yes | HTTPS Git repository URL |
|
||||
| `GIT_TOKEN` | Yes | Git Personal Access Token |
|
||||
| `GIT_BRANCH` | No | Branch to push to (default: `main`) |
|
||||
| `GIT_USER_NAME` | No | Git commit author name |
|
||||
| `GIT_USER_EMAIL` | No | Git commit author email |
|
||||
|
||||
## API Endpoints
|
||||
|
||||
This service is only accessible within the Docker network (not exposed to the host).
|
||||
|
||||
- `GET /health` - Health check endpoint
|
||||
- `POST /sync` - Trigger a workspace sync to Git
|
||||
|
||||
## Integration with Windmill
|
||||
|
||||
Create a scheduled flow or script in Windmill to trigger backups:
|
||||
|
||||
```typescript
|
||||
export async function main() {
|
||||
const response = await fetch('http://windmill-git-sync:8080/sync', {
|
||||
method: 'POST'
|
||||
});
|
||||
return await response.json();
|
||||
}
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
See [CLAUDE.md](CLAUDE.md) for development instructions and architecture details.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user