tilelang-submodule-pull

star 312

Automatically pull tilelang repository and its third-party code. Provides scheduled pull script supporting git pull --recurse-submodules and git submodule update --init --recursive with automatic error detection and retry. Triggers when user mentions "重新拉取三方库", "自动重拉", "重新拉取子模块", "auto retry pull", "pull submodules", "update third-party libs", "retry pulling third-party libs", "auto pull code" or similar keywords.

tile-ai By tile-ai schedule Updated 3/25/2026

name: tilelang-submodule-pull description: Automatically pull tilelang repository and its third-party code. Provides scheduled pull script supporting git pull --recurse-submodules and git submodule update --init --recursive with automatic error detection and retry. Triggers when user mentions "重新拉取三方库", "自动重拉", "重新拉取子模块", "auto retry pull", "pull submodules", "update third-party libs", "retry pulling third-party libs", "auto pull code" or similar keywords.

Tilelang Third-Party Repository Auto-Pull

Overview

This skill provides automatic pulling of tilelang repository and its third-party code:

  • Scheduled Pull: Executes pull every hour
  • Error Handling: Automatically detects network errors, access failures, etc.
  • Multiple Methods: Supports two pull methods with automatic switching
  • Real-time Output: Pull process printed to terminal and log file in real-time
  • Timeout Protection: Automatically stops after 10 hours of background running to prevent forgetting to close

Script Paths

All paths are relative to the current project root directory:

Assuming the current project is at /mnt/workspace/tilelang-ascend, then:

File Path Description
Pull Script .agents/skills/tilelang-custom-skill/tilelang-submodule-pull/scripts/auto_pull.sh Main script
Log File .agents/skills/tilelang-custom-skill/tilelang-submodule-pull/logs/git_pull.log Pull log

The script automatically detects the project root directory, no manual configuration needed.

Usage

1. Direct Run (Foreground)

bash .agents/skills/tilelang-custom-skill/tilelang-submodule-pull/scripts/auto_pull.sh

2. Background Run

nohup .agents/skills/tilelang-custom-skill/tilelang-submodule-pull/scripts/auto_pull.sh &

3. View Logs

tail -f .agents/skills/tilelang-custom-skill/tilelang-submodule-pull/logs/git_pull.log

Workflow

1. Configure git mirror source (using ghfast.top for acceleration)
2. Check if running time exceeds 10 hours (background run only)
    ↓ Exceeds 10 hours
3. Automatically stop script and log
    ↓ Not exceeded
4. Execute two commands simultaneously:
   - git submodule update --init --recursive
   - git pull --recurse-submodules
    ↓ If either fails
5. Wait 1 hour then retry the entire process
    ↓ Both succeed
6. Stop script

Error Detection

The script automatically detects the following errors:

  • Could not access: Cannot access submodule
  • error: General error
  • fatal: Fatal error
  • Failed to clone: Clone failed
  • unable to access: Cannot access URL

Script Content

#!/bin/bash

# SKILL directory
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
LOG_DIR="$SKILL_DIR/logs"
LOG_FILE="$LOG_DIR/git_pull.log"
# Project root directory (parent of parent of SKILL directory)
PROJECT_DIR="$(dirname "$(dirname "$(dirname "$SKILL_DIR")")")"

# Create log directory
mkdir -p "$LOG_DIR"

# Configure git mirror source
echo "Configuring git mirror source..." | tee -a "$LOG_FILE"
git config --global url."https://ghfast.top/https://github.com/".insteadOf "https://github.com/" 2>&1 | tee -a "$LOG_FILE"

cd "$PROJECT_DIR" || exit 1

# Record script start time (for 10-hour timeout check)
START_TIME=$(date +%s)
MAX_RUNTIME_SECONDS=36000

while true; do
    # Check if running time exceeds 10 hours
    CURRENT_TIME=$(date +%s)
    RUNTIME=$((CURRENT_TIME - START_TIME))
    if [ "$RUNTIME" -ge "$MAX_RUNTIME_SECONDS" ]; then
        echo "========================================" | tee -a "$LOG_FILE"
        echo "⚠ Script running for over 10 hours, auto-stopping: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOG_FILE"
        echo "Runtime: $((RUNTIME / 3600)) hours $((RUNTIME % 3600 / 60)) minutes" | tee -a "$LOG_FILE"
        exit 0
    fi
    
    echo "========================================" | tee -a "$LOG_FILE"
    echo "Starting pull: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOG_FILE"
    
    # Execute two commands
    echo "Executing two commands..." | tee -a "$LOG_FILE"
    
    # Command 1: git submodule update --init --recursive
    echo "1. Executing command \`git submodule update --init --recursive\`" | tee -a "$LOG_FILE"
    TMP_FILE1=$(mktemp)
    git submodule update --init --recursive 2>&1 | tee -a "$LOG_FILE" | tee "$TMP_FILE1"
    OUTPUT1=$(cat "$TMP_FILE1")
    rm "$TMP_FILE1"
    
    # Command 2: git pull --recurse-submodules
    echo "2. Executing command \`git pull --recurse-submodules\`" | tee -a "$LOG_FILE"
    TMP_FILE2=$(mktemp)
    git pull --recurse-submodules 2>&1 | tee -a "$LOG_FILE" | tee "$TMP_FILE2"
    OUTPUT2=$(cat "$TMP_FILE2")
    rm "$TMP_FILE2"
    
    # Check if command 1 has errors
    HAS_ERROR1=false
    if echo "$OUTPUT1" | grep -q "Could not access\|error\|fatal\|Failed to clone\|unable to access"; then
        echo "✗ git submodule update --init --recursive failed" | tee -a "$LOG_FILE"
        HAS_ERROR1=true
    else
        echo "✓ git submodule update --init --recursive succeeded" | tee -a "$LOG_FILE"
    fi
    
    # Check if command 2 has errors
    HAS_ERROR2=false
    if echo "$OUTPUT2" | grep -q "Could not access\|error\|fatal\|Failed to clone\|unable to access"; then
        echo "✗ git pull --recurse-submodules failed" | tee -a "$LOG_FILE"
        HAS_ERROR2=true
    else
        echo "✓ git pull --recurse-submodules succeeded" | tee -a "$LOG_FILE"
    fi
    
    # If either command fails, wait 1 hour then retry
    if [ "$HAS_ERROR1" = true ] || [ "$HAS_ERROR2" = true ]; then
        echo "✗ Pull failed: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOG_FILE"
        echo "Waiting 1 hour before retry..."
        sleep 3600
        continue
    fi
    
    # Both commands succeeded
    echo "✓ All code successfully pulled: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOG_FILE"
    echo "Script stopped"
    break
done

Notes

  1. The script automatically stops after all code is successfully pulled
  2. If the network is unstable, the script will automatically retry
  3. All output is displayed in both terminal and log file
  4. The log file records detailed process of each pull
Install via CLI
npx skills add https://github.com/tile-ai/tilelang-ascend --skill tilelang-submodule-pull
Repository Details
star Stars 312
call_split Forks 121
navigation Branch main
article Path SKILL.md
More from Creator