mirror of
https://github.com/Kuingsmile/PicList.git
synced 2026-05-07 05:32:52 +08:00
87 lines
2.5 KiB
JavaScript
87 lines
2.5 KiB
JavaScript
import dotenv from 'dotenv'
|
|
import packagej from '../package.json' with { type: 'json' }
|
|
import * as fsWalk from '@nodelib/fs.walk'
|
|
import fs from 'fs-extra'
|
|
import path from 'node:path'
|
|
import yaml from 'yaml'
|
|
import axios from 'axios'
|
|
import { exec } from 'node:child_process'
|
|
|
|
dotenv.config()
|
|
|
|
const version = packagej.version
|
|
const walkPath = fsWalk.walkSync('.winget').slice(-1)[0]?.dirent.parentPath
|
|
const oldVersion = path.basename(walkPath)
|
|
const targetPath = path.resolve(`${path.dirname(walkPath)}/${version}`)
|
|
fs.renameSync(walkPath, targetPath)
|
|
|
|
const fileList = [
|
|
path.join(targetPath, 'Kuingsmile.PicList.installer.yaml'),
|
|
path.join(targetPath, 'Kuingsmile.PicList.locale.en-US.yaml'),
|
|
path.join(targetPath, 'Kuingsmile.PicList.yaml'),
|
|
]
|
|
|
|
function relaceVersion(filePath) {
|
|
let content = fs.readFileSync(filePath, 'utf-8')
|
|
content = content.replaceAll(oldVersion, version)
|
|
fs.writeFileSync(filePath, content, 'utf-8')
|
|
}
|
|
|
|
fileList.forEach(filePath => {
|
|
relaceVersion(filePath)
|
|
})
|
|
|
|
const releaseAPI = 'https://api.github.com/repos/Kuingsmile/piclist/releases/latest'
|
|
|
|
const response = await axios.get(releaseAPI, {
|
|
headers: {
|
|
Accept: 'application/vnd.github+json',
|
|
},
|
|
})
|
|
|
|
const releaseData = response.data
|
|
|
|
const fileNameList = [`PicList-Setup-${version}-arm64.exe`, `PicList-Setup-${version}.exe`]
|
|
const sha256List = []
|
|
|
|
fileNameList.forEach(fileName => {
|
|
const asset = releaseData.assets.find(a => a.name === fileName)
|
|
if (asset) {
|
|
sha256List.push({
|
|
fileName,
|
|
sha256: asset.digest.replace('sha256:', '').toUpperCase(),
|
|
})
|
|
}
|
|
})
|
|
|
|
const insatllerContent = yaml.parseDocument(fs.readFileSync(fileList[0], 'utf-8'))
|
|
const installers = insatllerContent.get('Installers')
|
|
const updatedInstallers = installers.toJSON().map(installer => {
|
|
const matched = sha256List.find(
|
|
item => installer.Architecture === (item.fileName.includes('arm64') ? 'arm64' : 'x64'),
|
|
)
|
|
if (matched) {
|
|
return {
|
|
...installer,
|
|
InstallerSha256: matched.sha256,
|
|
}
|
|
}
|
|
return installer
|
|
})
|
|
insatllerContent.set('Installers', updatedInstallers)
|
|
fs.writeFileSync(fileList[0], insatllerContent.toString(), 'utf-8')
|
|
|
|
const cmd = `wingetcreate.exe submit -p "PicList v${version}" -t "${process.env.GH_TOKEN}" .\\.winget\\manifests\\k\\Kuingsmile\\PicList\\${version}\\`
|
|
|
|
exec(cmd, (error, stdout, stderr) => {
|
|
if (error) {
|
|
console.error(`Error executing command: ${error.message}`)
|
|
return
|
|
}
|
|
if (stderr) {
|
|
console.error(`Command stderr: ${stderr}`)
|
|
return
|
|
}
|
|
console.log(`Command stdout: ${stdout}`)
|
|
})
|