/workspace はコンテナ内のパスです。 docker-compose.yml の - .:/workspace によって、サーバーのホスト上の ~/windmill/(リポジトリルート)がコンテナ内の /workspace にマウントされています。 a.sh はWindmillのWorkerコンテナ内で実行されるので、スクリプト内で使う /workspace はコンテナ内のパスとして正しいです。 ただし、問題は wmill.yaml がリポジトリルートではなく workflows/ サブディレクトリにある ことです。コンテナ内で言うと /workspace/workflows/ に wmill.yaml があるので、スクリプトの cd /workspace を cd /workspace/workflows に変更する必要があります。 修正します: Analyzed a.sh#L1-63 なるほど、ポイントは以下の通りです: cd /workspace → コンテナ内ではリポジトリルートです。しかし wmill.yaml はここにはなく、workflows/ の中にあります。 wmill sync pull は wmill.yaml がある場所で実行しなければ動きません。 git 操作(add, commit, push)はリポジトリルート(/workspace)で行う必要があります。 つまり、wmill sync pull は /workspace/workflows で、git 操作は /workspace で行う、という二段構えが必要です。修正します: Edited a.sh +9 -5 修正しました。最終的なスクリプトの流れを確認します: Analyzed a.sh#L1-67 修正後のスクリプトは以下の流れになっています: cd /workspace/workflows → wmill.yaml がある場所で wmill sync pull を実行(Windmill DB → ファイルに書き出し) cd /workspace → Gitリポジトリルートに戻って git add / commit / push(ファイル → Gitea) ここで重要な補足: /workspace はサーバーのホスト上のパスではなく、コンテナ内のパスです。 docker-compose.yml の - .:/workspace により、ホスト上の ~/windmill/(docker-composeを実行した場所)がコンテナ内の /workspace にマウントされます。 つまり、コンテナ内の /workspace/workflows/ = ホスト上の ~/windmill/workflows/ です。 a.sh はWindmillのWorkerコンテナ内で実行されるので、コンテナ内パス(/workspace)を使うのが正しいです。 この変更をGiteaにプッシュしますか?プッシュ後、サーバー側で git pull して再度お試しください。
67 lines
2.3 KiB
Bash
67 lines
2.3 KiB
Bash
#!/bin/bash
|
||
set -e
|
||
|
||
# 色付き出力
|
||
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}"
|
||
|
||
# リポジトリルート(コンテナ内: docker-compose.ymlの .:/workspace マウント)
|
||
REPO_ROOT="/workspace"
|
||
# wmill.yamlがあるディレクトリ(Windmill CLIはここで実行する)
|
||
WMILL_DIR="${REPO_ROOT}/workflows"
|
||
|
||
# Windmill CLIのセットアップ
|
||
if ! command -v wmill &> /dev/null; then
|
||
echo -e "${YELLOW}Installing windmill-cli...${NC}"
|
||
npm install -g windmill-cli
|
||
fi
|
||
|
||
# 環境変数チェック
|
||
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 "$REPO_ROOT"
|
||
git config --global user.email "bot@keinafarm.net"
|
||
git config --global user.name "Windmill Bot"
|
||
|
||
# 1. Windmill(DB) -> Local Disk(wmill.yamlがあるディレクトリで実行)
|
||
echo -e "${YELLOW}Pulling from Windmill...${NC}"
|
||
cd "$WMILL_DIR"
|
||
wmill sync pull --token "$WM_TOKEN" --base-url "$WM_BASE_URL" --workspace "$WM_WORKSPACE" --skip-variables --skip-secrets --skip-resources --yes || exit 1
|
||
|
||
# 2. Local Disk -> Git Remote(Gitリポジトリルートに戻ってgit操作)
|
||
cd "$REPO_ROOT"
|
||
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://<token>@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}"
|