Skip to content

Commit 858cc76

Browse files
committed
feat: add 'all' mode to run all loops sequentially in one cron job
- run-loop.sh all: runs upstream-sync -> dependency-upgrade -> ci-fix -> issue-triage -> pr-review sequentially with 10s pause between - install-cron.sh: simplified to single cron entry at 01:00 - One loop failure does not block subsequent loops
1 parent 3d23c9e commit 858cc76

2 files changed

Lines changed: 29 additions & 25 deletions

File tree

.codebuddy/scripts/install-cron.sh

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
11
#!/usr/bin/env bash
22
#
3-
# Install cron jobs for Loop Engineering
4-
# All loops run once daily during nighttime (Beijing time, UTC+8),
5-
# staggered to avoid API rate limits.
6-
#
7-
# Schedule (Beijing time):
8-
# 01:00 upstream-sync (check upstream changes first)
9-
# 02:00 dependency-upgrade
10-
# 03:00 ci-fix (fix any CI failures)
11-
# 04:00 issue-triage (triage new issues)
12-
# 05:00 pr-review (review open PRs)
3+
# Install cron job for Loop Engineering
4+
# Runs all 5 loops sequentially once daily at 01:00 (Beijing time, UTC+8).
5+
# Loops run in order: upstream-sync -> dependency-upgrade -> ci-fix -> issue-triage -> pr-review
136
#
147
# Usage: ./install-cron.sh
158
# To uninstall: ./install-cron.sh --remove
@@ -51,24 +44,16 @@ fi
5144

5245
remove_existing
5346

54-
# Add new cron jobs (Beijing time = UTC+8)
47+
# Add cron job — runs all loops sequentially at 01:00 Beijing time
5548
# Cron uses system local timezone — ensure server is in CST/Asia-Shanghai
5649
(
5750
crontab -l 2>/dev/null || true
5851
echo "$MARKER"
59-
echo "0 1 * * * ${RUN_SCRIPT} upstream-sync $MARKER"
60-
echo "0 2 * * * ${RUN_SCRIPT} dependency-upgrade $MARKER"
61-
echo "0 3 * * * ${RUN_SCRIPT} ci-fix $MARKER"
62-
echo "0 4 * * * ${RUN_SCRIPT} issue-triage $MARKER"
63-
echo "0 5 * * * ${RUN_SCRIPT} pr-review $MARKER"
52+
echo "0 1 * * * ${RUN_SCRIPT} all $MARKER"
6453
) | crontab -
6554

66-
echo "Installed 5 loop cron jobs (daily, Beijing time):"
67-
echo " 01:00 upstream-sync"
68-
echo " 02:00 dependency-upgrade"
69-
echo " 03:00 ci-fix"
70-
echo " 04:00 issue-triage"
71-
echo " 05:00 pr-review"
55+
echo "Installed loop cron job (daily, Beijing time):"
56+
echo " 01:00 all (upstream-sync -> dependency-upgrade -> ci-fix -> issue-triage -> pr-review)"
7257
echo ""
7358
echo "Logs: \$LOOP_LOG_DIR (default: /tmp/loop-logs/)"
7459
echo "Uninstall: ${SCRIPT_DIR}/install-cron.sh --remove"

.codebuddy/scripts/run-loop.sh

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,37 @@
55
# reads STATE.md for context, executes the loop, writes back STATE.md.
66
#
77
# Usage: ./run-loop.sh <loop_type>
8-
# loop_type: ci-fix | issue-triage | pr-review | dependency-upgrade | upstream-sync
8+
# loop_type: ci-fix | issue-triage | pr-review | dependency-upgrade | upstream-sync | all
9+
#
10+
# When "all" is specified, runs all 5 loops sequentially:
11+
# upstream-sync -> dependency-upgrade -> ci-fix -> issue-triage -> pr-review
12+
#
13+
# Crontab example (Beijing time, UTC+8):
14+
# 0 1 * * * <repo-root>/.codebuddy/scripts/run-loop.sh all
915

1016
set -euo pipefail
1117

12-
LOOP_TYPE="${1:?Usage: run-loop.sh <ci-fix|issue-triage|pr-review|dependency-upgrade|upstream-sync>}"
18+
LOOP_TYPE="${1:?Usage: run-loop.sh <ci-fix|issue-triage|pr-review|dependency-upgrade|upstream-sync|all>}"
1319
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
1420
REPO_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
1521
LOG_DIR="${LOOP_LOG_DIR:-/tmp/loop-logs}"
1622
mkdir -p "$LOG_DIR"
1723

1824
cd "$REPO_DIR"
1925

26+
# "all" mode: run all loops sequentially
27+
if [[ "$LOOP_TYPE" == "all" ]]; then
28+
echo "=== Running all loops sequentially at $(date) ==="
29+
for lt in upstream-sync dependency-upgrade ci-fix issue-triage pr-review; do
30+
echo "--- Starting: $lt ---"
31+
"$0" "$lt" || echo "WARNING: $lt exited with error, continuing..."
32+
echo "--- Finished: $lt ---"
33+
sleep 10 # brief pause between loops to avoid API rate limits
34+
done
35+
echo "=== All loops completed at $(date) ==="
36+
exit 0
37+
fi
38+
2039
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
2140
LOG_FILE="$LOG_DIR/${LOOP_TYPE}-${TIMESTAMP}.log"
2241

@@ -41,7 +60,7 @@ case "$LOOP_TYPE" in
4160
;;
4261
*)
4362
echo "Unknown loop type: $LOOP_TYPE" | tee -a "$LOG_FILE"
44-
echo "Valid types: ci-fix, issue-triage, pr-review, dependency-upgrade, upstream-sync"
63+
echo "Valid types: ci-fix, issue-triage, pr-review, dependency-upgrade, upstream-sync, all"
4564
exit 1
4665
;;
4766
esac

0 commit comments

Comments
 (0)