mirror of
https://github.com/Kuingsmile/PicList.git
synced 2026-05-07 05:42:40 +08:00
📦 Chore(custom): add prepare scripts and update action
This commit is contained in:
100
scripts/prepare.js
Normal file
100
scripts/prepare.js
Normal file
@@ -0,0 +1,100 @@
|
||||
import { execSync } from 'node:child_process'
|
||||
import fs from 'fs-extra'
|
||||
import path from 'node:path'
|
||||
import axios from 'axios'
|
||||
import AdmZip from 'adm-zip'
|
||||
|
||||
const cwd = process.cwd()
|
||||
let arch = process.arch
|
||||
const platform = process.platform
|
||||
|
||||
const args = process.argv.slice(2)
|
||||
const params = Object.fromEntries(
|
||||
args.map(arg => {
|
||||
const [key, value] = arg.replace(/^--/, '').split('=')
|
||||
return [key, value || true]
|
||||
}),
|
||||
)
|
||||
|
||||
const resolve7zip = () =>
|
||||
resolveResource({
|
||||
file: '7za.exe',
|
||||
downloadURL: `https://github.com/develar/7zip-bin/raw/master/win/${arch}/7za.exe`,
|
||||
})
|
||||
|
||||
async function fetchThemes() {
|
||||
try {
|
||||
const zipUrl = 'https://github.com/Kuingsmile/piclist-themeHub/releases/download/latest/themes.zip'
|
||||
const zipData = await axios.get(zipUrl, {
|
||||
responseType: 'arraybuffer',
|
||||
headers: { 'Content-Type': 'application/octet-stream' },
|
||||
})
|
||||
const zip = new AdmZip(zipData.data)
|
||||
zip.extractAllTo(path.join(cwd, 'resources', 'theme'), true)
|
||||
console.log('[INFO]: themes downloaded and extracted')
|
||||
return true
|
||||
} catch (e) {
|
||||
console.log('[WARN]: failed to download themes', e)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
async function downloadFile(url, path) {
|
||||
const response = await fetch(url, {
|
||||
method: 'GET',
|
||||
headers: { 'Content-Type': 'application/octet-stream' },
|
||||
})
|
||||
const buffer = await response.arrayBuffer()
|
||||
fs.writeFileSync(path, new Uint8Array(buffer))
|
||||
|
||||
console.log(`[INFO]: download finished "${url}"`)
|
||||
}
|
||||
|
||||
async function resolveResource(binInfo) {
|
||||
const { file, downloadURL, needExecutable = false } = binInfo
|
||||
|
||||
const resDir = path.join(cwd, 'resources')
|
||||
const targetPath = path.join(resDir, file)
|
||||
|
||||
if (fs.existsSync(targetPath)) {
|
||||
fs.removeSync(targetPath)
|
||||
}
|
||||
|
||||
fs.mkdirSync(resDir, { recursive: true })
|
||||
await downloadFile(downloadURL, targetPath)
|
||||
|
||||
if (needExecutable && platform !== 'win32') {
|
||||
execSync(`chmod 755 ${targetPath}`)
|
||||
console.log(`[INFO]: ${file} chmod finished`)
|
||||
}
|
||||
|
||||
console.log(`[INFO]: ${file} finished`)
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const tasks = []
|
||||
|
||||
if (params.type === '7zip' || params.all) {
|
||||
console.log('[INFO]: Resolving 7zip...')
|
||||
tasks.push(resolve7zip())
|
||||
}
|
||||
|
||||
if (params.type === 'themes' || params.all) {
|
||||
console.log('[INFO]: Resolving themes...')
|
||||
tasks.push(fetchThemes())
|
||||
}
|
||||
|
||||
if (tasks.length === 0) {
|
||||
console.log('请提供参数,例如: node script.js --type=7zip 或 --all')
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
await Promise.all(tasks)
|
||||
console.log('Selected resources have been resolved.')
|
||||
} catch (err) {
|
||||
console.error('Error:', err)
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
Reference in New Issue
Block a user