feat: 增加构建 sqlite3 二进制文件的脚本

This commit is contained in:
qier222 2022-04-03 13:41:08 +08:00
parent e748155032
commit 9971418b8c
No known key found for this signature in database
GPG key ID: 9C85007ED905F14D
6 changed files with 73 additions and 20 deletions

View file

@ -33,24 +33,23 @@ module.exports = {
target: 'nsis', target: 'nsis',
arch: ['arm64'], arch: ['arm64'],
}, },
{
target: 'nsis',
arch: ['ia32'],
},
{ {
target: 'portable', target: 'portable',
arch: ['x64'], arch: ['x64'],
}, },
], ],
artifactName: '${productName}-${os}-${version}-${arch}-Setup.${ext}',
publisherName: 'qier222', publisherName: 'qier222',
icon: 'build/icons/icon.ico', icon: 'build/icons/icon.ico',
}, },
nsis: { nsis: {
oneClick: false, oneClick: false,
perMachine: false, perMachine: true,
allowToChangeInstallationDirectory: true, allowToChangeInstallationDirectory: true,
deleteAppDataOnUninstall: true, deleteAppDataOnUninstall: true,
artifactName: '${productName}-${version}-${os}-${arch}-Setup.${ext}',
},
portable: {
artifactName: '${productName}-${version}-${os}-${arch}-Portable.${ext}',
}, },
mac: { mac: {
target: [ target: [
@ -59,7 +58,7 @@ module.exports = {
arch: ['x64', 'arm64', 'universal'], arch: ['x64', 'arm64', 'universal'],
}, },
], ],
artifactName: '${productName}-${os}-${version}-${arch}.${ext}', artifactName: '${productName}-${version}-${os}-${arch}.${ext}',
darkModeSupport: true, darkModeSupport: true,
category: 'public.app-category.music', category: 'public.app-category.music',
}, },
@ -93,7 +92,7 @@ module.exports = {
arch: ['x64'], arch: ['x64'],
}, },
], ],
artifactName: '${productName}-${os}-${version}.${ext}', artifactName: '${productName}-${version}-${os}.${ext}',
category: 'Music', category: 'Music',
icon: './build/icon.icns', icon: './build/icon.icns',
}, },

View file

@ -32,10 +32,15 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: pnpm install --frozen-lockfile false run: pnpm install --frozen-lockfile false
- name: Electron rebuild - name: Build sqlite3 binaries (macOS, Windows)
run: pnpm electron-rebuild if: runner.os == 'macOS'
run: node ./scripts/build.sqlite3.mjs --arm64 --x64
- name: Install RPM & Pacman (on Ubuntu) - name: Build sqlite3 binaries (Linux)
if: runner.os == 'Linux'
run: node ./scripts/build.sqlite3.mjs --arm64 --arm --x64
- name: Install RPM & Pacman (Linux)
if: runner.os == 'Linux' if: runner.os == 'Linux'
run: | run: |
sudo apt-get update && sudo apt-get update &&
@ -43,7 +48,7 @@ jobs:
sudo apt-get install --no-install-recommends -y bsdtar && sudo apt-get install --no-install-recommends -y bsdtar &&
sudo apt-get install --no-install-recommends -y libopenjp2-tools sudo apt-get install --no-install-recommends -y libopenjp2-tools
- name: Install Snapcraft (on Ubuntu) - name: Install Snapcraft (Linux)
uses: samuelmeuli/action-snapcraft@v1 uses: samuelmeuli/action-snapcraft@v1
if: startsWith(matrix.os, 'ubuntu') if: startsWith(matrix.os, 'ubuntu')
# with: # with:
@ -79,7 +84,7 @@ jobs:
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:
name: YesPlayMusic-win name: YesPlayMusic-win
path: release/*-Setup.exe path: release/*x64-Setup.exe
if-no-files-found: ignore if-no-files-found: ignore
- name: Upload Artifact (Linux) - name: Upload Artifact (Linux)

View file

@ -17,6 +17,9 @@
"build": "npm run typecheck && cross-env-shell IS_ELECTRON=true npm run build:renderer && npm run build:main", "build": "npm run typecheck && cross-env-shell IS_ELECTRON=true npm run build:renderer && npm run build:main",
"build:app": "npm run build && electron-builder --config .electron-builder.config.js", "build:app": "npm run build && electron-builder --config .electron-builder.config.js",
"build:app-dir": "npm run build && electron-builder --config .electron-builder.config.js --dir", "build:app-dir": "npm run build && electron-builder --config .electron-builder.config.js --dir",
"build:app-win": "npm run build && electron-builder --config .electron-builder.config.js --win",
"build:app-mac": "npm run build && electron-builder --config .electron-builder.config.js --mac",
"build:app-linux": "npm run build && electron-builder --config .electron-builder.config.js --linux",
"typecheck": "tsc --noEmit --project src/renderer/tsconfig.json", "typecheck": "tsc --noEmit --project src/renderer/tsconfig.json",
"debug": "cross-env-shell NODE_ENV=debug \"npm run typecheck && node scripts/build.mjs && vite ./src/renderer\"", "debug": "cross-env-shell NODE_ENV=debug \"npm run typecheck && node scripts/build.mjs && vite ./src/renderer\"",
"eslint": "eslint --ext .ts,.js ./", "eslint": "eslint --ext .ts,.js ./",
@ -29,7 +32,7 @@
"@sentry/node": "^6.19.3", "@sentry/node": "^6.19.3",
"@sentry/tracing": "^6.19.3", "@sentry/tracing": "^6.19.3",
"NeteaseCloudMusicApi": "^4.5.10", "NeteaseCloudMusicApi": "^4.5.10",
"better-sqlite3": "7.4.6", "better-sqlite3": "7.5.0",
"change-case": "^4.1.2", "change-case": "^4.1.2",
"cookie-parser": "^1.4.6", "cookie-parser": "^1.4.6",
"electron-log": "^4.4.6", "electron-log": "^4.4.6",

15
pnpm-lock.yaml generated
View file

@ -21,7 +21,7 @@ specifiers:
NeteaseCloudMusicApi: ^4.5.10 NeteaseCloudMusicApi: ^4.5.10
autoprefixer: ^10.4.4 autoprefixer: ^10.4.4
axios: ^0.26.1 axios: ^0.26.1
better-sqlite3: 7.4.6 better-sqlite3: 7.5.0
change-case: ^4.1.2 change-case: ^4.1.2
classnames: ^2.3.1 classnames: ^2.3.1
color.js: ^1.2.0 color.js: ^1.2.0
@ -80,7 +80,7 @@ dependencies:
'@sentry/node': 6.19.3 '@sentry/node': 6.19.3
'@sentry/tracing': 6.19.3 '@sentry/tracing': 6.19.3
NeteaseCloudMusicApi: 4.5.10 NeteaseCloudMusicApi: 4.5.10
better-sqlite3: 7.4.6 better-sqlite3: 7.5.0
change-case: 4.1.2 change-case: 4.1.2
cookie-parser: 1.4.6 cookie-parser: 1.4.6
electron-log: 4.4.6 electron-log: 4.4.6
@ -1541,13 +1541,12 @@ packages:
/base64-js/1.5.1: /base64-js/1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
/better-sqlite3/7.4.6: /better-sqlite3/7.5.0:
resolution: {integrity: sha512-LB/UxnMhcJY12bRCDXl2jTk0lsbXHCHOLn3cPjGhy3GCcVPGq45sCGJPUdfBZnfXGN14tYTJyq0ztUI3lGng8A==} resolution: {integrity: sha512-6FdG9DoytYGDhLW7VWW1vxjEz7xHkqK6LnaUQYA8d6GHNgZhu9PFX2xwKEEnSBRoT1J4PjTUPeg217ShxNmuPg==}
requiresBuild: true requiresBuild: true
dependencies: dependencies:
bindings: 1.5.0 bindings: 1.5.0
prebuild-install: 7.0.1 prebuild-install: 7.0.1
tar: 6.1.11
dev: false dev: false
/big-integer/1.6.51: /big-integer/1.6.51:
@ -1990,6 +1989,7 @@ packages:
/chownr/2.0.0: /chownr/2.0.0:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
dev: true
/chromium-pickle-js/0.2.0: /chromium-pickle-js/0.2.0:
resolution: {integrity: sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=} resolution: {integrity: sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=}
@ -3694,6 +3694,7 @@ packages:
engines: {node: '>= 8'} engines: {node: '>= 8'}
dependencies: dependencies:
minipass: 3.1.6 minipass: 3.1.6
dev: true
/fs.realpath/1.0.0: /fs.realpath/1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
@ -5140,6 +5141,7 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dependencies: dependencies:
yallist: 4.0.0 yallist: 4.0.0
dev: true
/minizlib/2.1.2: /minizlib/2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
@ -5147,6 +5149,7 @@ packages:
dependencies: dependencies:
minipass: 3.1.6 minipass: 3.1.6
yallist: 4.0.0 yallist: 4.0.0
dev: true
/mixin-deep/1.3.2: /mixin-deep/1.3.2:
resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==}
@ -5170,6 +5173,7 @@ packages:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
dev: true
/ms/2.0.0: /ms/2.0.0:
resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=}
@ -7076,6 +7080,7 @@ packages:
minizlib: 2.1.2 minizlib: 2.1.2
mkdirp: 1.0.4 mkdirp: 1.0.4
yallist: 4.0.0 yallist: 4.0.0
dev: true
/temp-file/3.4.0: /temp-file/3.4.0:
resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==}

39
scripts/build.sqlite3.mjs Normal file
View file

@ -0,0 +1,39 @@
import { rebuild } from 'electron-rebuild'
import fs from 'fs'
import minimist from 'minimist'
import pc from 'picocolors'
const pkg = JSON.parse(await fs.readFileSync('./package.json', 'utf8'))
const electronVersion = pkg.devDependencies.electron.replaceAll('^', '')
const argv = minimist(process.argv.slice(2))
const build = async arch => {
console.log(pc.blue(`Building for ${arch}...`))
await rebuild({
buildPath: process.cwd(),
electronVersion,
arch: arch,
})
.then(() => {
console.info('Rebuild succeeded')
if (!fs.existsSync('./dist/main')) {
fs.mkdirSync('./dist/main', { recursive: true })
}
fs.copyFileSync(
'./node_modules/better-sqlite3/build/Release/better_sqlite3.node',
`./dist/main/better_sqlite3_${arch}.node`
)
})
.catch(e => {
console.error(pc.red('Rebuild failed!'))
console.error(pc.red(e))
})
}
const main = async () => {
if (argv.x64) await build('x64')
if (argv.arm64) await build('arm64')
if (argv.arm) await build('arm')
}
main()

View file

@ -27,7 +27,9 @@ const dbFilePath = path.resolve(
) )
createFileIfNotExist(dbFilePath) createFileIfNotExist(dbFilePath)
const sqlite = new SQLite3(dbFilePath) const sqlite = new SQLite3(dbFilePath, {
nativeBinding: path.join(__dirname, `./better_sqlite3_${process.arch}.node`),
})
sqlite.pragma('auto_vacuum = FULL') sqlite.pragma('auto_vacuum = FULL')
// Init tables if not exist // Init tables if not exist