6.2 KiB
6.2 KiB
Windmill Workflow プロジェクト
白皇集落営農組合 統合システム向けの Windmill ワークフロー管理リポジトリ。
環境
| 項目 | 値 |
|---|---|
| Windmillサーバー | https://windmill.keinafarm.net |
| ワークスペース | admins |
| APIトークン | wm-api.sh に設定済み |
| Gitリモート | https://gitea.keinafarm.net/akira/windmill_workflow.git |
重要な制約
wmillCLIは使用不可(CE版のグローバルAPI認証制限)→wm-api.shまたは curl で直接REST APIを叩く- フローの PUT更新は 405(Windmill CE版の制限)→ DELETE してから POST で再作成する
wmill.get_state()はインラインフロースクリプトで永続化されない→ 状態管理は必ずwmill.get_variable()/set_variable()を使うpython3コマンドは Windows環境で失敗する→ curl の出力は grep等で直接処理する
ディレクトリ構成
windmill_workflow/
├── flows/ # フロー定義JSON
│ ├── system_heartbeat.flow.json # Windmill自己診断フロー
│ ├── shiraou_notification.flow.json # 白皇集落 変更通知フロー
│ └── mail_filter.flow.json # メールフィルタリングフロー
├── docs/
│ └── shiraou/ # 白皇集落営農組合関連ドキュメント
│ ├── 19_windmill_通知ワークフロー連携仕様.md # API仕様書
│ └── 20_マスタードキュメント_Windmill通知ワークフロー編.md # マスタードキュメント
├── .agent/workflows/ # エージェント作業手順
│ ├── windmill-push.md # サーバーへのpush手順
│ ├── windmill-pull.md # サーバーからのpull手順
│ └── windmill-new-script.md # 新規スクリプト作成手順
├── wm-api.sh # Windmill REST APIヘルパー
└── wmill.yaml # wmill設定(defaultTs: bun)
登録済みワークフロー
| パス | 概要 | スケジュール |
|---|---|---|
f/app_custom/system_heartbeat |
Windmill自己診断 | なし(手動) |
f/shiraou/shiraou_notification |
白皇集落営農 変更通知 | 5分毎(JST) |
f/mail/mail_filter |
メールフィルタリング(IMAP→LLM→LINE) | 10分毎(JST)予定 |
u/antigravity/git_sync |
Git同期 | 30分毎 |
wm-api.sh コマンド一覧
./wm-api.sh version # サーバーバージョン確認
./wm-api.sh flows # フロー一覧
./wm-api.sh schedules # スケジュール一覧
./wm-api.sh get-flow <path> # フロー詳細取得
./wm-api.sh create-flow <json-file> # フロー作成
./wm-api.sh create-schedule <json-file> # スケジュール作成
./wm-api.sh run-flow <path> # フロー手動実行
./wm-api.sh job-status <job-id> # ジョブ状態確認
フローのデプロイ手順
# 1. flows/*.flow.json を編集
# 2. 削除して再作成(PUTは405のため)
curl -sk -X DELETE \
-H "Authorization: Bearer qLJ3VPZ61kTDiIwaUPUu1dXszGrsN1Dh" \
"https://windmill.keinafarm.net/api/w/admins/flows/delete/<path>"
curl -sk -X POST \
-H "Authorization: Bearer qLJ3VPZ61kTDiIwaUPUu1dXszGrsN1Dh" \
-H "Content-Type: application/json" \
-d @flows/<file>.flow.json \
"https://windmill.keinafarm.net/api/w/admins/flows/create"
# 3. コミット&プッシュ
git add flows/<file>.flow.json
git commit -m "..."
git push origin main
Windmill Variables
| 変数パス | Secret | 説明 |
|---|---|---|
u/admin/NOTIFICATION_API_KEY |
✅ | shiraou APIキー |
u/admin/LINE_CHANNEL_ACCESS_TOKEN |
✅ | LINE Messaging APIトークン |
u/admin/LINE_TO |
✅ | LINE通知先ID(ユーザーまたはグループ) |
u/admin/SHIRAOU_LAST_CHECKED_AT |
❌ | 前回確認時刻(ワークフローが自動更新) |
u/admin/KEINASYSTEM_API_KEY |
✅ | Keinasystem MAIL_API_KEY(.envと同じ値) |
u/admin/KEINASYSTEM_API_URL |
❌ | https://keinafarm.net |
u/admin/GEMINI_API_KEY |
✅ | Google Gemini API キー(LLM判定用) |
u/admin/GMAIL_IMAP_USER |
✅ | GmailアカウントのIMAPユーザー名(メールアドレス) |
u/admin/GMAIL_IMAP_PASSWORD |
✅ | GmailのアプリパスワードIMAPパスワード) |
u/admin/MAIL_FILTER_GMAIL_LAST_UID |
❌ | Gmail最終処理UID(ワークフローが自動更新) |
u/admin/HOTMAIL_IMAP_USER |
✅ | Hotmail IMAPユーザー名(有効化時に登録) |
u/admin/HOTMAIL_IMAP_PASSWORD |
✅ | Hotmail IMAPパスワード(有効化時に登録) |
u/admin/MAIL_FILTER_HOTMAIL_LAST_UID |
❌ | Hotmail最終処理UID(有効化時に登録) |
u/admin/XSERVER_IMAP_USER |
✅ | Xserver IMAPユーザー名(有効化時に登録) |
u/admin/XSERVER_IMAP_PASSWORD |
✅ | Xserver IMAPパスワード(有効化時に登録) |
u/admin/MAIL_FILTER_XSERVER_LAST_UID |
❌ | Xserver最終処理UID(有効化時に登録) |
マスタードキュメント
メールフィルタリング — アカウント有効化手順
Gmail → Hotmail → Xserver の順で段階的に有効化する。
Gmail 初期設定
- GoogleアカウントでIMAPを有効化(Googleアカウント設定 → セキュリティ → アプリパスワード)
- Windmill Variables に
GMAIL_IMAP_USER,GMAIL_IMAP_PASSWORDを登録 - フローを手動実行(初回: 既存メールスキップ、最大UIDを記録)
- スケジュール登録(10分毎)
Hotmail/Xserver 追加時
- Windmill Variables に対応する変数を登録
flows/mail_filter.flow.jsonの該当アカウントの"enabled": falseをtrueに変更- フローを DELETE → POST で再デプロイ