blob: 54b9dda9767d25138a7492aa87cf30464edf6243 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
#!/usr/bin/env bash
# サーバー上で root として手動実行する
# repos.txt に基づいてベアリポジトリとワークツリーを作成し、
# git/hooks/ のフックを /var/git/*/hooks/ に展開する
set -euo pipefail
APP_DIR="$(cd "$(dirname "$0")/.." && pwd)"
REPOS_FILE="$APP_DIR/git/repos.txt"
HOOKS_SRC="$APP_DIR/git/hooks"
AUTH_KEYS_SRC="$APP_DIR/server/authorized_keys"
if [[ "$(id -u)" -ne 0 ]]; then
echo "ERROR: root として実行してください" >&2
exit 1
fi
echo "=== SSH authorized_keys ==="
if [[ -f "$AUTH_KEYS_SRC" ]]; then
mkdir -p /root/.ssh
chmod 700 /root/.ssh
if diff -q "$AUTH_KEYS_SRC" /root/.ssh/authorized_keys >/dev/null 2>&1; then
echo " unchanged"
else
cp "$AUTH_KEYS_SRC" /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
echo " installed"
fi
fi
echo ""
echo "=== Repositories ==="
while IFS=: read -r repo_name work_tree; do
[[ "$repo_name" =~ ^#.*$ || -z "$repo_name" ]] && continue
bare_repo="/var/git/${repo_name}.git"
if [[ ! -d "$bare_repo" ]]; then
echo " create: $bare_repo"
mkdir -p "$bare_repo"
git init --bare "$bare_repo"
else
echo " exists: $bare_repo"
fi
if [[ ! -d "$work_tree" ]]; then
echo " mkdir: $work_tree"
mkdir -p "$work_tree"
fi
done < "$REPOS_FILE"
echo ""
echo "=== Hooks ==="
for repo_src in "$HOOKS_SRC"/*/; do
repo_name="$(basename "$repo_src")"
git_hooks_dir="/var/git/${repo_name}.git/hooks"
if [[ ! -d "$git_hooks_dir" ]]; then
echo " SKIP: $git_hooks_dir not found ($repo_name)"
continue
fi
for hook_file in "$repo_src"*; do
hook_name="$(basename "$hook_file")"
dst="$git_hooks_dir/$hook_name"
if diff -q "$hook_file" "$dst" >/dev/null 2>&1; then
echo " unchanged: $repo_name/$hook_name"
else
cp "$hook_file" "$dst"
chmod +x "$dst"
echo " installed: $repo_name/$hook_name"
fi
done
done
echo ""
echo "=== Cron jobs ==="
CRON_JOBS=(
"0 5 * * * docker exec tokyo-app node -e \"fetch('http://localhost:3000/api/scrape').then(r=>r.text()).then(console.log)\""
"0 8 * * * docker exec tokyo-livehouse-events-scraper-1 node --import tsx/esm /app/scripts/send-recap.ts >> /var/log/recap.log 2>&1"
)
current_cron="$(crontab -l 2>/dev/null || true)"
for job in "${CRON_JOBS[@]}"; do
if echo "$current_cron" | grep -qF "$job"; then
echo " exists: $job"
else
(echo "$current_cron"; echo "$job") | crontab -
current_cron="$(crontab -l)"
echo " added: $job"
fi
done
echo ""
echo "Done."
|