From 16e909cbfe39d42de0c51ef3bee5ac978a6a770d Mon Sep 17 00:00:00 2001 From: naskya Date: Sat, 22 Jul 2023 11:25:52 +0000 Subject: [PATCH] hotfix: handle migration failure --- packages/index.js | 264 ++++++++++++++++++++++++++++++++++++++++++++++ update.sh | 10 +- 2 files changed, 272 insertions(+), 2 deletions(-) create mode 100644 packages/index.js diff --git a/packages/index.js b/packages/index.js new file mode 100644 index 000000000..810cec865 --- /dev/null +++ b/packages/index.js @@ -0,0 +1,264 @@ +/* tslint:disable */ +/* eslint-disable */ +/* prettier-ignore */ + +/* auto-generated by NAPI-RS */ + +const { existsSync, readFileSync } = require('fs') +const { join } = require('path') + +const { platform, arch } = process + +let nativeBinding = null +let localFileExisted = false +let loadError = null + +function isMusl() { + // For Node 10 + if (!process.report || typeof process.report.getReport !== 'function') { + try { + const lddPath = require('child_process').execSync('which ldd').toString().trim() + return readFileSync(lddPath, 'utf8').includes('musl') + } catch (e) { + return true + } + } else { + const { glibcVersionRuntime } = process.report.getReport().header + return !glibcVersionRuntime + } +} + +switch (platform) { + case 'android': + switch (arch) { + case 'arm64': + localFileExisted = existsSync(join(__dirname, 'native-utils.android-arm64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.android-arm64.node') + } else { + nativeBinding = require('native-utils-android-arm64') + } + } catch (e) { + loadError = e + } + break + case 'arm': + localFileExisted = existsSync(join(__dirname, 'native-utils.android-arm-eabi.node')) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.android-arm-eabi.node') + } else { + nativeBinding = require('native-utils-android-arm-eabi') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Android ${arch}`) + } + break + case 'win32': + switch (arch) { + case 'x64': + localFileExisted = existsSync( + join(__dirname, 'native-utils.win32-x64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.win32-x64-msvc.node') + } else { + nativeBinding = require('native-utils-win32-x64-msvc') + } + } catch (e) { + loadError = e + } + break + case 'ia32': + localFileExisted = existsSync( + join(__dirname, 'native-utils.win32-ia32-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.win32-ia32-msvc.node') + } else { + nativeBinding = require('native-utils-win32-ia32-msvc') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, 'native-utils.win32-arm64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.win32-arm64-msvc.node') + } else { + nativeBinding = require('native-utils-win32-arm64-msvc') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Windows: ${arch}`) + } + break + case 'darwin': + localFileExisted = existsSync(join(__dirname, 'native-utils.darwin-universal.node')) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.darwin-universal.node') + } else { + nativeBinding = require('native-utils-darwin-universal') + } + break + } catch {} + switch (arch) { + case 'x64': + localFileExisted = existsSync(join(__dirname, 'native-utils.darwin-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.darwin-x64.node') + } else { + nativeBinding = require('native-utils-darwin-x64') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, 'native-utils.darwin-arm64.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.darwin-arm64.node') + } else { + nativeBinding = require('native-utils-darwin-arm64') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on macOS: ${arch}`) + } + break + case 'freebsd': + if (arch !== 'x64') { + throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) + } + localFileExisted = existsSync(join(__dirname, 'native-utils.freebsd-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.freebsd-x64.node') + } else { + nativeBinding = require('native-utils-freebsd-x64') + } + } catch (e) { + loadError = e + } + break + case 'linux': + switch (arch) { + case 'x64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'native-utils.linux-x64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.linux-x64-musl.node') + } else { + nativeBinding = require('native-utils-linux-x64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'native-utils.linux-x64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.linux-x64-gnu.node') + } else { + nativeBinding = require('native-utils-linux-x64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'native-utils.linux-arm64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.linux-arm64-musl.node') + } else { + nativeBinding = require('native-utils-linux-arm64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'native-utils.linux-arm64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.linux-arm64-gnu.node') + } else { + nativeBinding = require('native-utils-linux-arm64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm': + localFileExisted = existsSync( + join(__dirname, 'native-utils.linux-arm-gnueabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./native-utils.linux-arm-gnueabihf.node') + } else { + nativeBinding = require('native-utils-linux-arm-gnueabihf') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Linux: ${arch}`) + } + break + default: + throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) +} + +if (!nativeBinding) { + if (loadError) { + throw loadError + } + throw new Error(`Failed to load native binding`) +} + +const { nativeRandomStr, IdConvertType, convertId, nativeCreateId, nativeInitIdGenerator, nativePackAntennaById, NativeAntennaSrc, nativeInitDatabase } = nativeBinding + +module.exports.nativeRandomStr = nativeRandomStr +module.exports.IdConvertType = IdConvertType +module.exports.convertId = convertId +module.exports.nativeCreateId = nativeCreateId +module.exports.nativeInitIdGenerator = nativeInitIdGenerator +module.exports.nativePackAntennaById = nativePackAntennaById +module.exports.NativeAntennaSrc = NativeAntennaSrc +module.exports.nativeInitDatabase = nativeInitDatabase diff --git a/update.sh b/update.sh index b9fe931c2..ca1498e5c 100755 --- a/update.sh +++ b/update.sh @@ -1,4 +1,9 @@ #!/usr/bin/env bash +function copy_missing_file { + [ -f "packages/backend/native-utils/built/index.js" ] \ + || cp packages/index.js packages/backend/native-utils/built/index.js +} + git checkout -- package.json packages/backend/assets git pull --ff @@ -7,5 +12,6 @@ sed -i -r "s/\"version\": \"([^+]+).*\",$/\"version\": \"\\1+neko:${COMMIT}\",/" corepack prepare pnpm@latest --activate pnpm i -NODE_ENV=production pnpm run rebuild -pnpm run migrate +NODE_ENV=production pnpm run rebuild \ +&& copy_missing_file \ +&& pnpm run migrate