宝塔面板定时拉取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

# 发送消息到 Telegram
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"
}

# 获取 GitHub 仓库、文件夹路径和排除模式的环境变量
REPO="$REPO"                # GitHub 仓库,传递环境变量
LOCAL_DIR="$LOCAL_DIR"      # 本地文件夹路径,传递环境变量

# 检查并创建本地目录
mkdir -p "$LOCAL_DIR"  # 确保本地目录存在

# 获取最新版本号
LATEST_VERSION=$(gh release list --repo "$REPO" --limit 1 --json tagName --jq '.[0].tagName')
echo "Latest version: $LATEST_VERSION"

# 获取本地存储的版本
if [ -f "$LOCAL_DIR/version.txt" ]; then
    LOCAL_VERSION=$(cat "$LOCAL_DIR/version.txt")
else
    # 如果 version.txt 不存在,则初始化本地版本为一个初始值(如 v0.0.0)
    LOCAL_VERSION="v0.0.0"
fi

# 检查本地文件夹中是否只有 version.txt
if [ "$(ls -A "$LOCAL_DIR" | wc -l)" -eq 1 ] && [ "$(ls -A "$LOCAL_DIR")" == "version.txt" ]; then
    STATUS="$REPO本地文件夹只有 version.txt,直接开始下载更新文件..."\
    # 删除本地文件夹中的所有文件(保留 version.txt)
    rm -rf "$LOCAL_DIR"/*
    # 下载所有文件
    gh release download "$LATEST_VERSION" --repo "$REPO" --dir "$LOCAL_DIR"

    # 删除不需要的文件类型
    find "$LOCAL_DIR" -type f \( -name "*.yml" -o -name "*.sha256" -o -name "*.json" \) -delete
else
    # 初始化状态
    STATUS=""
    UPDATED_FOLDERS=""

    # 比较版本,如果不一致,则进行更新
    if [ "$LATEST_VERSION" != "$LOCAL_VERSION" ]; then
        STATUS="$REPO发现新版本: $LATEST_VERSION. 正在更新..."\
        # 删除本地文件夹中的所有文件
        rm -rf "$LOCAL_DIR"/*
            # 下载所有文件
        gh release download "$LATEST_VERSION" --repo "$REPO" --dir "$LOCAL_DIR"

        # 删除不需要的文件类型
        find "$LOCAL_DIR" -type f \( -name "*.yml" -o -name "*.sha256" \) -delete

    else
        STATUS="$REPO本地版本 ($LOCAL_VERSION) 已经是最新版本 ($LATEST_VERSION)。"
    fi
fi



# 获取更新后的文件夹内容(列出所有文件夹)
UPDATED_FOLDERS=$(find "$LOCAL_DIR" -type d)

# 更新本地版本信息
echo "$LATEST_VERSION" > "$LOCAL_DIR/version.txt"

STATUS="$STATUS 更新完成: $LATEST_VERSION"
# 组合信息:推送更新的状态和文件夹列表
FINAL_MESSAGE="$STATUS"
if [ -n "$UPDATED_FOLDERS" ]; then
    FINAL_MESSAGE="$FINAL_MESSAGE更新的文件夹:$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
小恐龙
花!
上一篇
下一篇