Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

166 lines
5.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ============================================
# COS发件箱自动上传工作流 · Awen仓库用
# COS Outbox Auto-Upload
# 签发: 铸渊 · ICE-GL-ZY001
# 版权: 国作登字-2026-A-00037559
# ============================================
#
# 用途: 放到Awen仓库的 .github/workflows/ 目录下
# 当知秋在 bridge/hldp-outbox/ 下创建新的HLDP消息文件时
# 自动上传到COS桶实现与铸渊的异步通信
#
# 使用说明:
# 1. 将此文件复制到 Awen仓库/.github/workflows/cos-upload-outbox.yml
# 2. 配置GitHub Secrets:
# - ZY_COS_SECRET_ID: 腾讯云COS SecretId
# - ZY_COS_SECRET_KEY: 腾讯云COS SecretKey
# - ZY_ZHUYUAN_COS_BUCKET: 铸渊主桶名称 (zy-team-hub-1317346199)
# - ZY_COS_REGION: COS区域 (ap-guangzhou)
name: COS发件箱上传 · Outbox Upload
on:
push:
paths:
- 'bridge/hldp-outbox/**'
permissions:
contents: read
env:
PERSONA_ID: zhiqiu
INDUSTRY_CODE: webnovel
jobs:
upload-outbox:
name: 上传HLDP消息到COS
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: 📥 检出仓库
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: 🟢 Node.js 环境
uses: actions/setup-node@v4
with:
node-version: '20'
- name: 📦 安装COS SDK
run: npm install cos-nodejs-sdk-v5@2
- name: 🔍 检测新的outbox文件
id: detect
run: |
# 获取本次推送新增/修改的outbox文件
NEW_FILES=$(git diff --name-only HEAD~1 HEAD -- 'bridge/hldp-outbox/' | grep '\.json$' || true)
if [ -z "$NEW_FILES" ]; then
echo "没有新的outbox文件"
echo "has_files=false" >> $GITHUB_OUTPUT
else
echo "发现新文件:"
echo "$NEW_FILES"
echo "$NEW_FILES" > /tmp/new-outbox-files.txt
echo "has_files=true" >> $GITHUB_OUTPUT
echo "count=$(echo "$NEW_FILES" | wc -l)" >> $GITHUB_OUTPUT
fi
- name: 📤 上传到COS桶
if: steps.detect.outputs.has_files == 'true'
env:
COS_SECRET_ID: ${{ secrets.ZY_COS_SECRET_ID }}
COS_SECRET_KEY: ${{ secrets.ZY_COS_SECRET_KEY }}
COS_BUCKET: ${{ secrets.ZY_ZHUYUAN_COS_BUCKET }}
COS_REGION: ${{ secrets.ZY_COS_REGION }}
run: |
node << 'UPLOAD_SCRIPT'
const COS = require('cos-nodejs-sdk-v5');
const fs = require('fs');
const path = require('path');
const cos = new COS({
SecretId: process.env.COS_SECRET_ID,
SecretKey: process.env.COS_SECRET_KEY
});
const BUCKET = process.env.COS_BUCKET || 'zy-team-hub-1317346199';
const REGION = process.env.COS_REGION || 'ap-guangzhou';
const PERSONA_ID = '${{ env.PERSONA_ID }}';
const INDUSTRY_CODE = '${{ env.INDUSTRY_CODE }}';
const files = fs.readFileSync('/tmp/new-outbox-files.txt', 'utf8')
.trim()
.split('\n')
.filter(f => f.length > 0);
async function uploadFile(localPath) {
const content = fs.readFileSync(localPath, 'utf8');
const fileName = path.basename(localPath);
// 解析HLDP消息判断类型
let cosPath;
try {
const msg = JSON.parse(content);
const msgType = msg.payload?.data?.submission_type;
if (msgType && ['dev_proposal', 'hotfix', 'dependency_update', 'architecture_change'].includes(msgType)) {
// 开发提交 → 走审核路径
cosPath = `industry/${INDUSTRY_CODE}/dev-submissions/${PERSONA_ID}/${fileName}`;
} else {
// 普通HLDP消息 → 走常规路径
cosPath = `team-reports/${PERSONA_ID}/${fileName}`;
}
} catch {
cosPath = `team-reports/${PERSONA_ID}/${fileName}`;
}
return new Promise((resolve, reject) => {
cos.putObject({
Bucket: BUCKET,
Region: REGION,
Key: cosPath,
Body: content
}, (err) => {
if (err) {
console.error(`❌ 上传失败: ${localPath} → ${cosPath}`, err.message);
resolve(false);
} else {
console.log(`✅ 上传成功: ${localPath} → ${cosPath}`);
resolve(true);
}
});
});
}
async function main() {
let success = 0;
let failed = 0;
for (const file of files) {
if (fs.existsSync(file)) {
const ok = await uploadFile(file);
if (ok) success++;
else failed++;
} else {
console.log(`⚠️ 文件不存在: ${file}`);
}
}
console.log(`\n上传完成: ${success} 成功, ${failed} 失败`);
if (failed > 0) process.exit(1);
}
main().catch(err => {
console.error('上传流程失败:', err);
process.exit(1);
});
UPLOAD_SCRIPT
- name: ✅ 完成
run: |
echo "知秋 · PER-ZQ001 · outbox上传完成"
echo "文件数: ${{ steps.detect.outputs.count || '0' }}"