宝塔面板定时拉取github releases版本文件

一、脚本文件

#!/bin/bash

# Telegram Bot 设置(写死在代码中)
TG_API_TOKEN="Bot API Token"  # 替换为你创建的 Bot API Token
TG_USER_ID="Telegram 用户 ID"          # 替换为你的 Telegram 用户 ID

# GitHub Token 设置(写死在代码中)
GH_TOKEN="GitHub API Token"  # 替换为你的 GitHub API Token

# 将 GitHub Token 设置为环境变量,以便 gh CLI 使用
export GH_TOKEN

REPO="$REPO"
LOCAL_DIR="$LOCAL_DIR"
TAG="$TAG"

# ========= 工具函数 =========
send_telegram_message() {
    local message="$1"
    curl -s -X POST "https://api.telegram.org/bot$TG_API_TOKEN/sendMessage" \
        -d chat_id="$TG_USER_ID" \
        -d text="$message"
}

mkdir -p "$LOCAL_DIR"

# 获取本地版本
if [ -f "$LOCAL_DIR/version.txt" ]; then
    LOCAL_VERSION=$(cat "$LOCAL_DIR/version.txt")
else
    LOCAL_VERSION="v0.0.0"
fi

STATUS=""
UPDATED_FOLDERS=""

# ========= 获取最新版本 =========
if [ -n "$TAG" ]; then
    LATEST_VERSION="$TAG"
    STATUS+="使用指定的版本: $TAG%0A"
else
    LATEST_VERSION=$(gh release list --repo "$REPO" --json tagName,isPrerelease,isDraft,publishedAt \
      --jq '[.[] | select(.isPrerelease == false and .isDraft == false)] | sort_by(.publishedAt) | reverse | .[0].tagName')

    if [ -z "$LATEST_VERSION" ]; then
        # 若没有 Release,尝试获取 tags
        LATEST_VERSION=$(gh api -H "Accept: application/vnd.github+json" /repos/$REPO/tags \
          | jq -r '.[0].name')
        STATUS+="未发现正式 Release,使用最新 tag: $LATEST_VERSION%0A"
    else
        STATUS+="使用最新 Release: $LATEST_VERSION%0A"
    fi
fi

# ========= 判断版本是否需更新 =========
if [ "$LATEST_VERSION" != "$LOCAL_VERSION" ]; then
    STATUS+="发现新版本: $LATEST_VERSION(当前: $LOCAL_VERSION)%0A开始下载...\n"
    rm -rf "$LOCAL_DIR"/*
    
    # 下载新版本
    gh release download "$LATEST_VERSION" --repo "$REPO" --dir "$LOCAL_DIR" 2>/dev/null || {
        # fallback:尝试直接下载 tag zip 包
        curl -L -o "$LOCAL_DIR/$LATEST_VERSION.zip" "https://github.com/$REPO/archive/refs/tags/$LATEST_VERSION.zip"
        unzip -q "$LOCAL_DIR/$LATEST_VERSION.zip" -d "$LOCAL_DIR"
        rm "$LOCAL_DIR/$LATEST_VERSION.zip"
    }

    # 清理无用文件
    find "$LOCAL_DIR" -type f \( -name "*.yml" -o -name "*.sha256" -o -name "*.json" \) -delete

    # 更新版本号
    echo "$LATEST_VERSION" > "$LOCAL_DIR/version.txt"
    STATUS+="更新完成: $LATEST_VERSION%0A"
else
    STATUS+="当前版本 $LOCAL_VERSION 已是最新,无需更新。%0A"
fi

# ========= 获取文件夹结构 =========
UPDATED_FOLDERS=$(find "$LOCAL_DIR" -type d | sed 's/^/📁 /')

# ========= 消息组合 =========
FINAL_MESSAGE="$REPO 更新状态:%0A$STATUS"
if [ -n "$UPDATED_FOLDERS" ]; then
    FINAL_MESSAGE+="文件夹列表:%0A$UPDATED_FOLDERS"
fi

# ========= 推送 =========
send_telegram_message "$FINAL_MESSAGE"

二、定时任务实例

# 设置 GitHub 仓库的名称,格式为 'username/repository',这里需要根据实际情况修改
export REPO="MetaCubeX/ClashMetaForAndroid"
# 设置本地存储文件的文件夹路径,用于下载并存储最新的 release 文件
export LOCAL_DIR="/www/wwwroot/网站域名/存放文件夹"
# 执行脚本,传递环境变量给脚本使用
/bin/bash 脚本文件.sh

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇