mirror of
https://github.com/certd/certd.git
synced 2026-04-03 14:10:54 +08:00
181 lines
3.7 KiB
JavaScript
181 lines
3.7 KiB
JavaScript
import fs from 'fs'
|
||
import axios from 'axios'
|
||
|
||
|
||
const AtomgitAccessToken = process.env.ATOMGIT_TOKEN
|
||
// CHANGELOG.md
|
||
const changelog = fs.readFileSync('./CHANGELOG.md', 'utf8')
|
||
// 解析CHANGELOG.md
|
||
let lines = changelog.split('\n')
|
||
const versionLineIndex = lines.findIndex(line => line.startsWith('## '))
|
||
const versionLine = lines[versionLineIndex]
|
||
// ## [1.37.16](https://github.com/certd/certd/compare/v1.37.15...v1.37.16) (2025-12-15)
|
||
const versionTitle = versionLine.match(/\[(.*?)\]/)[1]
|
||
|
||
const contentStart = versionLineIndex + 1
|
||
lines = lines.slice(contentStart)
|
||
const contentEnd = lines.findIndex(line => {
|
||
return line.startsWith('## ')
|
||
})
|
||
const content = lines.slice(0, contentEnd).join('\n')
|
||
console.log("-------title------/n")
|
||
console.log(versionTitle)
|
||
console.log("-------content------/n")
|
||
console.log(content)
|
||
|
||
/**
|
||
* 创建仓库Release
|
||
POST
|
||
https://api.atomgit.com/api/v5/repos/:owner/:repo/releases
|
||
Request
|
||
Path Parameters
|
||
owner
|
||
string
|
||
required
|
||
仓库所属空间地址(企业、组织或个人的地址path)
|
||
|
||
repo
|
||
string
|
||
required
|
||
仓库路径
|
||
|
||
Query Parameters
|
||
access_token
|
||
string
|
||
required
|
||
用户授权码
|
||
|
||
application/json
|
||
Body
|
||
tag_name
|
||
string
|
||
required
|
||
tag名称
|
||
|
||
name
|
||
string
|
||
required
|
||
release名称
|
||
|
||
body
|
||
string
|
||
required
|
||
release描述
|
||
|
||
target_commitish
|
||
string
|
||
分支名称或者commit SHA,如果tag不存在,需要新建tag则传入该参数,如果不传入该参数,则为默认分支的最新提交
|
||
*/
|
||
|
||
// 创建release
|
||
async function createRelease() {
|
||
const response = await axios.request({
|
||
method: 'POST',
|
||
url: `https://api.atomgit.com/api/v5/repos/certd/certd/releases`,
|
||
headers: {
|
||
"Content-Type": "application/json"
|
||
},
|
||
params: {
|
||
access_token: AtomgitAccessToken
|
||
},
|
||
data: {
|
||
tag_name: `v${versionTitle}`,
|
||
name: `v${versionTitle}`,
|
||
body: content,
|
||
target_commitish: 'v2'
|
||
},
|
||
}
|
||
)
|
||
console.log("createRelease success")
|
||
return response.data
|
||
}
|
||
|
||
/**
|
||
* 获取Release附件上传地址
|
||
GET
|
||
https://api.atomgit.com/api/v5/repos/:owner/:repo/releases/:tag/upload_url
|
||
Request
|
||
Path Parameters
|
||
owner
|
||
string
|
||
required
|
||
仓库所属空间地址(企业、组织或个人的地址path)
|
||
|
||
repo
|
||
string
|
||
required
|
||
仓库路径
|
||
|
||
tag
|
||
string
|
||
required
|
||
tag名称
|
||
|
||
Query Parameters
|
||
access_token
|
||
string
|
||
required
|
||
用户授权码
|
||
|
||
file_name
|
||
string
|
||
required
|
||
要上传的文件名称
|
||
|
||
Responses
|
||
200
|
||
Response Headers
|
||
application/json
|
||
Schema
|
||
Example (auto)
|
||
Schema
|
||
url
|
||
string
|
||
required
|
||
上传的地址,使用put请求
|
||
|
||
headers
|
||
object
|
||
|
||
*/
|
||
async function getUploadUrl() {
|
||
const response = await axios.request({
|
||
method: 'GET',
|
||
url: `https://api.atomgit.com/api/v5/repos/certd/certd/releases/v${versionTitle}/upload_url`,
|
||
headers: {
|
||
"Content-Type": "application/json"
|
||
},
|
||
params: {
|
||
access_token: AtomgitAccessToken,
|
||
file_name: `ui-${versionTitle}.zip`
|
||
},
|
||
}
|
||
)
|
||
console.log("getUploadUrl success:",response.data?.url)
|
||
return response.data // {url: string, headers: any}
|
||
}
|
||
|
||
async function uploadFile(url, headers, data) {
|
||
const response = await axios.request({
|
||
method: 'PUT',
|
||
url,
|
||
headers,
|
||
data,
|
||
}
|
||
)
|
||
return response.data
|
||
}
|
||
|
||
async function publishToAtomgit() {
|
||
const release = await createRelease()
|
||
const uploadUrl = await getUploadUrl()
|
||
const fileName = `ui.zip`
|
||
const fileData = fs.createReadStream(fileName)
|
||
const contentLength = fs.statSync(fileName).size
|
||
uploadUrl.headers['Content-Length'] = contentLength
|
||
const response = await uploadFile(uploadUrl.url, uploadUrl.headers, fileData)
|
||
console.log("uploadFile success:")
|
||
console.log("publishToAtomgit success")
|
||
}
|
||
|
||
publishToAtomgit() |