diff --git a/SERVER_SETUP.md b/SERVER_SETUP.md index 81511db..c714734 100644 --- a/SERVER_SETUP.md +++ b/SERVER_SETUP.md @@ -42,16 +42,41 @@ nano .env docker-compose up -d ``` -## ステップ4: Git同期用ワークフローの確認 +## ステップ4: Git同期用ワークフローのセットアップ -Windmill内でGit同期スクリプトを設定する場合、コンテナ内の `/workspace` はホスト側の `./` (つまり `/home/windmill/windmill`)にマウントされています。 -これにより、Windmill内でのGit操作(コミット・プッシュ)がホスト側のリポジトリに対して行われます。 +Windmill上で「登録されたワークフローをGitに保存する」機能を有効にする手順です。 -初期同期スクリプト(`sync_to_git.sh`)を使用する場合は、実行権限を与えてください: +### 4-1. ワークフロー定義の取り込み(初回のみ) +サーバー上のリポジトリにあるワークフロー定義を、Windmillのデータベースに取り込みます。 ```bash -chmod +x sync_to_git.sh +# Windmillサーバーコンテナに入り、wmillコマンドを実行 +docker exec -it windmill_server /bin/bash + +# コンテナ内で実行 +export WM_TOKEN="<ステップ5で取得するトークン>" # まだ無ければGUIで作成してから +wmill sync push --workspace admins --deploy --yes +exit ``` +※ `admins` ワークスペースが存在しない場合は、GUIで作成するか、デフォルトのワークスペース名を確認してください。 + +### 4-2. 認証情報の準備 +Gitへのプッシュを行うため、Giteaのアクセストークンを含むリモートURLを設定します。 + +```bash +cd /home/windmill/windmill +# Giteaのアクセストークンを含んだURLを設定(git pushのため) +git remote set-url origin https://:@gitea.keinafarm.net/akira/windmill.git +``` +※ `` と `` は適切なものに置き換えてください。 + +### 4-3. Variableの設定 +WindmillのWeb画面(Variables)で、以下の変数を設定します。 +- **WM_TOKEN**: WindmillのService Token(Settings -> Tokensで作成)。`Sync` 権限が必要です。 +- **WM_WORKSPACE**: `admins` (または使用しているワークスペース名) + +### 4-4. スケジュール実行の確認 +`git_sync` フローが登録され、スケジュール設定(`git_sync.schedule.yaml`)も取り込まれていれば、自動的に同期が開始されます。Runsページで実行ログを確認してください。 ## トラブルシューティング diff --git a/sync_to_git.sh b/sync_to_git.sh index 1f10555..ed3c77d 100755 --- a/sync_to_git.sh +++ b/sync_to_git.sh @@ -50,10 +50,13 @@ if [[ -n $(git status --porcelain) ]]; then Synced workflows from Windmill workspace" + # Giteaにプッシュ echo -e "${YELLOW}Pushing to Gitea...${NC}" git push origin main || { echo -e "${RED}Failed to push to Gitea. Check credentials.${NC}" + # トークンや認証情報が設定されていない場合のヒント + echo -e "${YELLOW}Hint: Ensure you have set up git credentials or use a token in the remote URL.${NC}" exit 1 } @@ -63,36 +66,3 @@ else fi echo -e "${GREEN}=== Sync Complete ===${NC}" -NC='\033[0m' # No Color - -echo -e "${GREEN}=== Windmill Workflow Git Sync ===${NC}" - -# ディレクトリに移動 -cd /home/akira/develop/windmill/workflows - -# PATHを設定 -export PATH=~/.npm-global/bin:$PATH - -# Windmillから最新を取得 -echo -e "${YELLOW}Pulling from Windmill...${NC}" -wmill sync pull --skip-variables --skip-secrets --skip-resources --yes - -# 変更があるか確認 -if [[ -n $(git status --porcelain) ]]; then - echo -e "${YELLOW}Changes detected, committing to Git...${NC}" - - # 変更をステージング - git add -A - - # コミット - TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') - git commit -m "Auto-sync: ${TIMESTAMP} - -Synced workflows from Windmill workspace" - - echo -e "${GREEN}✓ Changes committed to Git${NC}" -else - echo -e "${GREEN}✓ No changes detected${NC}" -fi - -echo -e "${GREEN}=== Sync Complete ===${NC}" diff --git a/workflows/u/antigravity/git_sync__flow/a.sh b/workflows/u/antigravity/git_sync__flow/a.sh index 4784412..9464fb4 100644 --- a/workflows/u/antigravity/git_sync__flow/a.sh +++ b/workflows/u/antigravity/git_sync__flow/a.sh @@ -1,22 +1,62 @@ #!/bin/bash -set -x -export WM_BASE_URL="http://windmill_server:8000" -export WM_WORKSPACE="admins" -export PATH=$HOME/.npm-global/bin:$PATH +set -e -echo "=== START SYNC ===" +# 色付き出力 +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color +echo -e "${GREEN}=== Windmill Workflow Git Sync ===${NC}" + +# 作業ディレクトリ(リポジトリルート) +cd /workspace + +# Windmill CLIのセットアップ if ! command -v wmill &> /dev/null; then + echo -e "${YELLOW}Installing windmill-cli...${NC}" npm install -g windmill-cli fi -wmill sync pull --token "$WM_TOKEN" --base-url "$WM_BASE_URL" --workspace "$WM_WORKSPACE" --skip-variables --skip-secrets --skip-resources --yes --verbose || exit 1 +# 環境変数チェック +if [ -z "$WM_TOKEN" ]; then + echo -e "${RED}Error: WM_TOKEN is not set.${NC}" + exit 1 +fi +# WM_BASE_URLはWindmill内で自動設定される場合があるが、念のため +: "${WM_BASE_URL:=http://windmill_server:8000}" +# Workspaceは環境変数または引数で +: "${WM_WORKSPACE:=admins}" +# Git設定(コンテナ内での一時設定) git config --global --add safe.directory /workspace -git config --global user.email "bot@example.com" -git config --global user.name "Bot" +git config --global user.email "bot@keinafarm.net" +git config --global user.name "Windmill Bot" -git add . -git commit -m "Auto-sync $(date)" || echo "No changes" +# 1. Windmill(DB) -> Local Disk (Git Repo) +echo -e "${YELLOW}Pulling from Windmill...${NC}" +wmill sync pull --token "$WM_TOKEN" --base-url "$WM_BASE_URL" --workspace "$WM_WORKSPACE" --skip-variables --skip-secrets --skip-resources --yes || exit 1 -echo "=== END SYNC ===" +# 2. Local Disk -> Git Remote (Gitea) +if [[ -n $(git status --porcelain) ]]; then + echo -e "${YELLOW}Changes detected, committing to Git...${NC}" + + git add -A + TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') + git commit -m "Auto-sync: ${TIMESTAMP}" + + echo -e "${YELLOW}Pushing to Gitea...${NC}" + # リモートURLにトークンが含まれていない場合、プッシュに失敗する可能性がある + # ここでは既存のoriginを使用 + git push origin main || { + echo -e "${RED}Failed to push. Need credentials in git remote url or credential helper.${NC}" + echo -e "${YELLOW}Hint: git remote set-url origin https://@gitea.keinafarm.net/...${NC}" + exit 1 + } + + echo -e "${GREEN}✓ Changes pushed to Gitea${NC}" +else + echo -e "${GREEN}✓ No changes detected${NC}" +fi + +echo -e "${GREEN}=== Sync Complete ===${NC}"