From 6172e800c290b9680e3255d8e815141eabdd25f4 Mon Sep 17 00:00:00 2001 From: Akira Date: Sat, 21 Feb 2026 12:38:25 +0900 Subject: [PATCH] =?UTF-8?q?Windmill=E3=83=AF=E3=83=BC=E3=82=AF=E3=83=95?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E9=96=8B=E7=99=BA=E7=92=B0=E5=A2=83=E3=81=AE?= =?UTF-8?q?=E6=A7=8B=E7=AF=89=E7=B5=90=E6=9E=9C=E3=81=BE=E3=81=A8=E3=82=81?= =?UTF-8?q?=E3=80=82=E3=82=B5=E3=83=BC=E3=83=90=E3=83=BC=E6=8E=A5=E7=B6=9A?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D=E3=80=81REST=20API=E3=83=98=E3=83=AB?= =?UTF-8?q?=E3=83=91=E3=83=BC=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88?= =?UTF-8?q?=E4=BD=9C=E6=88=90=E3=80=81=E3=83=AF=E3=83=BC=E3=82=AF=E3=83=95?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E5=AE=9A=E7=BE=A9=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E4=BD=9C=E6=88=90=E3=80=81wmill=20CLI=E5=88=B6?= =?UTF-8?q?=E9=99=90=E3=81=AE=E7=99=BA=E8=A6=8B=E3=81=A8=E4=BB=A3=E6=9B=BF?= =?UTF-8?q?=E7=AD=96=E3=81=AE=E5=AE=9F=E8=A3=85=E3=82=92=E8=A8=98=E9=8C=B2?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .agent/workflows/windmill-new-script.md | 53 ++++++++++ .agent/workflows/windmill-pull.md | 39 ++++++++ .agent/workflows/windmill-push.md | 35 +++++++ wm-api.sh | 122 ++++++++++++++++++++++++ wmill.yaml | 1 + 5 files changed, 250 insertions(+) create mode 100644 .agent/workflows/windmill-new-script.md create mode 100644 .agent/workflows/windmill-pull.md create mode 100644 .agent/workflows/windmill-push.md create mode 100755 wm-api.sh create mode 100644 wmill.yaml diff --git a/.agent/workflows/windmill-new-script.md b/.agent/workflows/windmill-new-script.md new file mode 100644 index 0000000..2caf739 --- /dev/null +++ b/.agent/workflows/windmill-new-script.md @@ -0,0 +1,53 @@ +--- +description: 新しいWindmillスクリプトを作成する +--- + +# 新しいWindmillスクリプトの作成 + +Windmillに新しいスクリプトを追加する手順。 + +## 手順 + +1. **スクリプトファイルの作成**: スクリプトは以下のディレクトリ構造に従って作成する + - ユーザースクリプト: `u///` + - フォルダスクリプト: `f///` + +2. **ファイル構成**: 各スクリプトフォルダには以下のファイルが必要 + - `script.yaml` — メタデータ(言語、概要、スキーマなど) + - スクリプト本体(例: `script.py`, `script.ts`, `script.sh`) + +3. **script.yaml のテンプレート** +```yaml +summary: '<スクリプトの説明>' +description: '<詳細な説明>' +lock: [] +schema: + $schema: 'https://json-schema.org/draft/2020-12/schema' + type: object + properties: + param1: + type: string + description: '<パラメータの説明>' + required: + - param1 +kind: script +tag: '' +``` + +4. **Pythonスクリプト (`script.py`) のテンプレート** +```python +def main(param1: str): + """ + スクリプトの説明 + """ + return {"result": f"Hello, {param1}!"} +``` + +5. **TypeScriptスクリプト (`script.ts`) のテンプレート** +```typescript +export async function main(param1: string): Promise { + return { result: `Hello, ${param1}!` }; +} +``` + +6. **サーバーに反映**: `/windmill-push` ワークフローを実行してpush diff --git a/.agent/workflows/windmill-pull.md b/.agent/workflows/windmill-pull.md new file mode 100644 index 0000000..2291ed8 --- /dev/null +++ b/.agent/workflows/windmill-pull.md @@ -0,0 +1,39 @@ +--- +description: Windmillサーバーからワークフロー情報を取得する +--- + +# Windmill Pull ワークフロー + +Windmillサーバーから最新のスクリプトやフローの情報を取得する手順。 +wm-api.sh を使用してREST API経由で取得する。 + +// turbo-all + +1. サーバーバージョンを確認 +```bash +cd /home/akira/develop/windmill_workflow && ./wm-api.sh version +``` + +2. スクリプト一覧を取得 +```bash +cd /home/akira/develop/windmill_workflow && ./wm-api.sh scripts +``` + +3. フロー一覧を取得 +```bash +cd /home/akira/develop/windmill_workflow && ./wm-api.sh flows +``` + +4. 特定のスクリプトの詳細を取得 +```bash +cd /home/akira/develop/windmill_workflow && ./wm-api.sh get-script +``` + +5. 特定のフローの詳細を取得 +```bash +cd /home/akira/develop/windmill_workflow && ./wm-api.sh get-flow +``` + +## 注意 +- wmill CLIはCE版ではグローバルAPI認証の制限があるため使用できない +- 代わりに `wm-api.sh` を使用してREST APIで直接操作する diff --git a/.agent/workflows/windmill-push.md b/.agent/workflows/windmill-push.md new file mode 100644 index 0000000..e05f9e8 --- /dev/null +++ b/.agent/workflows/windmill-push.md @@ -0,0 +1,35 @@ +--- +description: ローカルのワークフローをWindmillサーバーにpushする +--- + +# Windmill Push ワークフロー + +ローカルで作成・編集したスクリプトやフローをWindmillサーバーに反映する手順。 +wm-api.sh を使用してREST API経由でpushする。 + +// turbo-all + +1. 現在のサーバー接続を確認 +```bash +cd /home/akira/develop/windmill_workflow && ./wm-api.sh version +``` + +2. 既存のスクリプト一覧を確認 +```bash +cd /home/akira/develop/windmill_workflow && ./wm-api.sh scripts +``` + +3. 既存のフロー一覧を確認 +```bash +cd /home/akira/develop/windmill_workflow && ./wm-api.sh flows +``` + +4. スクリプトを作成する場合 (JSONファイルを用意して実行) +```bash +cd /home/akira/develop/windmill_workflow && ./wm-api.sh create-script +``` + +## 注意 +- wmill CLIはCE版ではグローバルAPI認証の制限があるため使用できない +- 代わりに `wm-api.sh` を使用してREST APIで直接操作する +- Windmill MCP経由でも操作可能 diff --git a/wm-api.sh b/wm-api.sh new file mode 100755 index 0000000..b81b334 --- /dev/null +++ b/wm-api.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env bash +# Windmill REST API ヘルパースクリプト +# Usage: ./wm-api.sh [args...] + +set -euo pipefail + +# 設定 +WINDMILL_URL="${WINDMILL_URL:-https://windmill.keinafarm.net}" +WINDMILL_TOKEN="${WINDMILL_TOKEN:-qLJ3VPZ61kTDiIwaUPUu1dXszGrsN1Dh}" +WINDMILL_WORKSPACE="${WINDMILL_WORKSPACE:-admins}" + +API_BASE="${WINDMILL_URL}/api/w/${WINDMILL_WORKSPACE}" +AUTH_HEADER="Authorization: Bearer ${WINDMILL_TOKEN}" + +# ヘルパー関数 +api_get() { + curl -sk -H "${AUTH_HEADER}" "${API_BASE}$1" 2>/dev/null +} + +api_post() { + curl -sk -X POST -H "${AUTH_HEADER}" -H "Content-Type: application/json" -d "$2" "${API_BASE}$1" 2>/dev/null +} + +api_put() { + curl -sk -X PUT -H "${AUTH_HEADER}" -H "Content-Type: application/json" -d "$2" "${API_BASE}$1" 2>/dev/null +} + +api_delete() { + curl -sk -X DELETE -H "${AUTH_HEADER}" "${API_BASE}$1" 2>/dev/null +} + +# コマンド +case "${1:-help}" in + whoami) + api_get "/users/whoami" | python3 -m json.tool + ;; + scripts|list-scripts) + api_get "/scripts/list?per_page=${2:-100}" | python3 -m json.tool + ;; + flows|list-flows) + api_get "/flows/list?per_page=${2:-100}" | python3 -m json.tool + ;; + get-script) + if [ -z "${2:-}" ]; then + echo "Usage: $0 get-script " + exit 1 + fi + api_get "/scripts/get/p/$2" | python3 -m json.tool + ;; + get-flow) + if [ -z "${2:-}" ]; then + echo "Usage: $0 get-flow " + exit 1 + fi + api_get "/flows/get/$2" | python3 -m json.tool + ;; + create-script) + if [ -z "${2:-}" ]; then + echo "Usage: $0 create-script " + exit 1 + fi + api_post "/scripts/create" "$(cat "$2")" + ;; + run-script) + if [ -z "${2:-}" ]; then + echo "Usage: $0 run-script [json-args]" + exit 1 + fi + local_args="${3:-{\}}" + api_post "/jobs/run/p/$2" "${local_args}" + ;; + run-flow) + if [ -z "${2:-}" ]; then + echo "Usage: $0 run-flow [json-args]" + exit 1 + fi + local_args="${3:-{\}}" + api_post "/jobs/run/f/$2" "${local_args}" + ;; + job-status) + if [ -z "${2:-}" ]; then + echo "Usage: $0 job-status " + exit 1 + fi + api_get "/jobs_u/get/$2" | python3 -m json.tool + ;; + job-result) + if [ -z "${2:-}" ]; then + echo "Usage: $0 job-result " + exit 1 + fi + api_get "/jobs_u/completed/get_result/$2" | python3 -m json.tool + ;; + schedules|list-schedules) + api_get "/schedules/list?per_page=${2:-100}" | python3 -m json.tool + ;; + version) + curl -sk "${WINDMILL_URL}/api/version" 2>/dev/null + echo "" + ;; + help|*) + cat << 'EOF' +Windmill REST API ヘルパー + +使い方: ./wm-api.sh [args...] + +コマンド: + whoami - 現在のユーザー情報を表示 + version - サーバーバージョンを表示 + scripts - スクリプト一覧を表示 + flows - フロー一覧を表示 + get-script - スクリプトの詳細を取得 + get-flow - フローの詳細を取得 + create-script - JSONファイルからスクリプトを作成 + run-script [args] - スクリプトを実行 + run-flow [args] - フローを実行 + job-status - ジョブのステータスを確認 + job-result - ジョブの結果を取得 + schedules - スケジュール一覧を表示 +EOF + ;; +esac diff --git a/wmill.yaml b/wmill.yaml new file mode 100644 index 0000000..48cb913 --- /dev/null +++ b/wmill.yaml @@ -0,0 +1 @@ +defaultTs: bun