@@ -148,6 +148,45 @@ jobs:
148148 target : /opt/Entropydecrease/downloads
149149 strip_components : 1
150150
151+ # ---------------------------------------------------------------
152+ # 同步至 OSS(CDN 源站)
153+ # 为何需要 OSS:ECS 出网仅约 6Mbps,而 CDN 预热需**每个边缘节点各
154+ # 拉一份完整文件**,回源总量 = 节点数 x 172MB,以 ECS 为源站时
155+ # 预热耗时达几十分钟至数小时且会打满带宽影响 API。
156+ # OSS 出网带宽极大,可使预热降至分钟级且完全不占用 ECS。
157+ #
158+ # 路径与 ECS 保持一致(downloads/ 前缀),因此无需改变
159+ # DOWNLOAD_BASE_URL,也无需改前端与 electron-updater 配置。
160+ # ECS 同步仍保留:存量客户端的更新源仍指向 ECS,且作为兜底。
161+ # ---------------------------------------------------------------
162+ - name : Upload to OSS (CDN origin)
163+ if : ${{ secrets.OSS_BUCKET != '' && secrets.ALIYUN_ACCESS_KEY_ID != '' }}
164+ env :
165+ AK_ID : ${{ secrets.ALIYUN_ACCESS_KEY_ID }}
166+ AK_SECRET : ${{ secrets.ALIYUN_ACCESS_KEY_SECRET }}
167+ OSS_BUCKET : ${{ secrets.OSS_BUCKET }}
168+ # 未配置时默认杭州(与 ECS 同地域)
169+ OSS_ENDPOINT : ${{ secrets.OSS_ENDPOINT || 'oss-cn-hangzhou.aliyuncs.com' }}
170+ FILE_NAME : ${{ steps.meta.outputs.file }}
171+ run : |
172+ set -eo pipefail
173+ curl -sL https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz -o /tmp/aliyun.tgz
174+ tar -xzf /tmp/aliyun.tgz -C /tmp
175+
176+ oss_cp() {
177+ /tmp/aliyun oss cp "$1" "oss://$OSS_BUCKET/downloads/$2" \
178+ --force -e "$OSS_ENDPOINT" -i "$AK_ID" -k "$AK_SECRET"
179+ }
180+
181+ cd release-windows-latest
182+ # 同 ECS 的顺序约定:先二进制后元数据,避免 latest.yml 率先就位
183+ # 而指向尚未上传完成的安装包
184+ oss_cp "$FILE_NAME" "$FILE_NAME"
185+ oss_cp "$FILE_NAME.blockmap" "$FILE_NAME.blockmap"
186+ oss_cp latest.yml latest.yml
187+ oss_cp latest.json latest.json
188+ echo "OSS sync done: oss://$OSS_BUCKET/downloads/"
189+
151190 # 保留策略:仅保留最近 3 个版本的安装包,防止磁盘增长
152191 - name : Prune old versions (keep last 3)
153192 uses : appleboy/ssh-action@v1
0 commit comments