Files
MBTI_wang/scripts/push_to_main.mjs
Ghost a411bf7b21 高考版优化
审核模式优化
2026-04-29 18:01:26 +08:00

77 lines
2.6 KiB
JavaScript
Raw Permalink 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.

#!/usr/bin/env node
// 使用内置 https 模块,无需任何外部依赖
// 将 v0/fnvtk-6c860377 分支强制推送到 main
import https from 'https'
const TOKEN = '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'
const OWNER = 'fnvtk'
const REPO = 'MBTI_wang'
const SOURCE = 'v0/fnvtk-6c860377'
const TARGET = 'main'
function apiRequest(method, path, body) {
return new Promise((resolve, reject) => {
const data = body ? JSON.stringify(body) : null
const options = {
hostname: 'api.github.com',
port: 443,
path: `/repos/${OWNER}/${REPO}${path}`,
method,
headers: {
'Authorization': `token ${TOKEN}`,
'Accept': 'application/vnd.github.v3+json',
'User-Agent': 'v0-push-script',
'Content-Type': 'application/json',
...(data ? { 'Content-Length': Buffer.byteLength(data) } : {}),
},
}
const req = https.request(options, (res) => {
let raw = ''
res.on('data', chunk => raw += chunk)
res.on('end', () => resolve({ status: res.statusCode, body: raw ? JSON.parse(raw) : {} }))
})
req.on('error', reject)
if (data) req.write(data)
req.end()
})
}
async function main() {
// 1. 获取源分支最新 commit SHA
console.log(`[1] 获取 ${SOURCE} 最新 commit SHA...`)
const encodedBranch = encodeURIComponent(SOURCE)
const ref = await apiRequest('GET', `/git/ref/heads/${encodedBranch}`)
if (ref.status !== 200) {
console.error(` 失败 (${ref.status}):`, JSON.stringify(ref.body))
process.exit(1)
}
const sha = ref.body.object.sha
console.log(` SHA: ${sha}`)
// 2. 强制更新 main
console.log(`[2] 强制更新 ${TARGET} -> ${sha.slice(0, 12)}...`)
const update = await apiRequest('PATCH', `/git/refs/heads/${TARGET}`, { sha, force: true })
if (update.status === 200) {
console.log(` 成功!${TARGET} 已更新。`)
console.log(` 地址: https://github.com/${OWNER}/${REPO}/tree/${TARGET}`)
} else if (update.status === 422) {
// main 不存在,创建
console.log(` main 不存在,尝试创建...`)
const create = await apiRequest('POST', '/git/refs', { ref: `refs/heads/${TARGET}`, sha })
if (create.status === 201) {
console.log(` 创建成功!`)
} else {
console.error(` 创建失败 (${create.status}):`, JSON.stringify(create.body))
process.exit(1)
}
} else {
console.error(` 失败 (${update.status}):`, JSON.stringify(update.body))
process.exit(1)
}
console.log('\n完成v0 代码已推送到 main 分支。')
}
main().catch(e => { console.error(e); process.exit(1) })