Friday, 24 October 2025

✨3-step rookie: auto-update BPB VPN | 新手仅需3步,BPB VPN自动更新

Step1️⃣ 🏗️ Create new GitHub repo

Name it whatever like "my-auto-update"


Step2️⃣ 📁 Add workflow file

Must use exact path:

.github/workflows/{yourFileName}.yml

Paste the YAML config we provided

```

name: 晨更作业cf wop


on:

  push:

    branches:

      - main

  schedule:

    - cron: "0 3 * * 1"  # 每周一凌晨3点 UTC 执行(北京时间周一上午11点)

  workflow_dispatch:

    inputs:

      force_update:

        description: '是否强制更新(忽略版本检查)'

        required: false

        default: 'false'


permissions:

  contents: write


jobs:

  update:

    runs-on: ubuntu-latest

    timeout-minutes: 30

    steps:

      - name: 检出代码

        uses: actions/checkout@v4


      - name: 设置 Node.js 环境

        uses: actions/setup-node@v4

        with:

          node-version: "latest"


      - name: 安装依赖

        run: |

          npm install -g javascript-obfuscator

          sudo apt-get update

          sudo apt-get install -y jq curl unzip wget


      - name: 环境变量设置

        run: |

          echo "REPO_URL=https://api.github.com/repos/bia-pain-bache/BPB-Worker-Panel/releases" >> $GITHUB_ENV

          echo "TARGET_FILE=worker.js" >> $GITHUB_ENV  # 调整为 worker.js 以匹配混淆逻辑;如果需要 zip,可修改为 worker.zip 并添加解压后混淆


      - name: 检查与更新 Worker

        id: update_worker

        env:

          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

        run: |

          set -e

          log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"; }


          log "☀️ 清晨启程,检查更新中…"


          LOCAL_VERSION=$(cat version.txt 2>/dev/null || echo "")

          log "本地版本:${LOCAL_VERSION:-无}"


          log "请求最新 Release 信息…"

          RESPONSE=$(curl -s --retry 5 --retry-delay 2 --max-time 30 \

            -H "Authorization: token $GITHUB_TOKEN" \

            -H "Accept: application/vnd.github.v3+json" \

            "$REPO_URL")

          if [ $? -ne 0 ]; then

            log "❌ 无法访问 GitHub API"

            exit 1

          fi


          TAG_NAME=$(echo "$RESPONSE" | jq -r '.[0].tag_name')

          DOWNLOAD_URL=$(echo "$RESPONSE" | jq -r '.[0].assets[] | select(.name == "'"$TARGET_FILE"'") | .browser_download_url')


          if [ -z "$TAG_NAME" ] || [ "$TAG_NAME" = "null" ]; then

            log "❌ 获取版本号失败"

            exit 1

          fi


          if [ -z "$DOWNLOAD_URL" ] || [ "$DOWNLOAD_URL" = "null" ]; then

            # 备用下载方式:从 repo 下载文件(假设文件在 repo 根目录)

            DOWNLOAD_URL="https://github.com/bia-pain-bache/BPB-Worker-Panel/raw/${TAG_NAME}/${TARGET_FILE}"

            log "⚠️ 未找到 Release 资产,使用 raw 文件下载 URL: $DOWNLOAD_URL"

          fi


          log "最新版本:$TAG_NAME"


          FORCE_UPDATE="${{ github.event.inputs.force_update || 'false' }}"

          if [ "$LOCAL_VERSION" = "$TAG_NAME" ] && [ "$FORCE_UPDATE" != "true" ]; then

            log "✅ 已是最新版本,无需更新"

            exit 0

          fi


          log "⬇️ 下载 $TARGET_FILE…"

          wget -q --tries=5 --timeout=30 -O "origin.js" "$DOWNLOAD_URL"

          if [ $? -ne 0 ]; then

            log "❌ 下载失败"

            exit 1

          fi


          # 如果是 zip,添加解压(当前假设 js;如果 zip,取消注释并调整)

          # log "📦 解压中…"

          # unzip -o "origin.js" > /dev/null  # 实际为 zip 时改名

          # rm "origin.js"

          # mv worker.js origin.js  # 假设 zip 内有 worker.js


          log "🔒 混淆 JS 代码…"

          javascript-obfuscator origin.js --output _worker.js \

            --compact true \

            --identifier-names-generator hexadecimal \

            --rename-globals false \

            --string-array false \

            --transform-object-keys false \

            --self-defending false \

            --simplify true

          echo "// Auto obfuscated at $(date -u)" >> _worker.js

          rm origin.js


          echo "$TAG_NAME" > version.txt

          log "✨ 更新完成,当前版本:$TAG_NAME"


          echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT


      - name: 提交同步结果

        if: success()

        uses: stefanzweifel/git-auto-commit-action@v5

        with:

          commit_message: "🔄 自动同步 Worker 版本: ${{ steps.update_worker.outputs.tag_name }}"

          commit_author: "github-actions[bot] <github-actions[bot]@users.noreply.github.com>"

```


Step3️⃣ 🚀 Let magic happen

GitHub Actions auto-triggers

Monitors source repo changes

Completes Build & Deploy automatically


💡 Tech highlights:

✅ Webhook auto-monitoring

✅ CI/CD pipeline

✅ Real-time GitHub sync

✅ Zero manual operation


Result preview👉

Every time source updates

Your VPS auto-pulls latest code

Runs Build Script for new version

Totally hands-free!




Step1️⃣ 🏗️ 新建GitHub仓库

创建你的专属代码库 Repository

命名超随意~比如"my-auto-update"


Step2️⃣ 📁 创建Workflow文件

路径必须严格按:

.github/workflows/{你的文件名}.yml

复制提供的YAML配置 一键粘贴就行


Step3️⃣ 🚀 坐等自动化执行

GitHub Actions自动触发

实时监控源Repo更新

自动完成Build & Deploy


💡 核心科技:

✅ Webhook自动监听

✅ CI/CD无缝衔接

✅ 实时同步GitHub源

✅ 完全告别手动操作


效果预览👉

每次源仓库更新

你的VPS都会自动拉取最新代码

执行Build Script生成新版本

全程无需人工干预!


Referencing this/参考了这个 https://github.com/DuolaD/BPB-Auto-update-and-obfuscate/blob/main/.github/workflows/update_worker.yml

No comments:

Post a Comment