1
1
mirror of https://github.com/leon-ai/leon.git synced 2024-12-25 17:54:43 +03:00

feat(scripts): install Node.js skills packages

This commit is contained in:
louistiti 2023-05-08 21:23:33 +08:00
parent 2c2f49290a
commit 224158812f
4 changed files with 96 additions and 2 deletions

View File

@ -0,0 +1,84 @@
import path from 'node:path'
import fs from 'node:fs'
import { command } from 'execa'
import { isFileEmpty } from '@/utilities'
import { LogHelper } from '@/helpers/log-helper'
import { SkillDomainHelper } from '@/helpers/skill-domain-helper'
export default async function () {
try {
LogHelper.info('Installing Node.js skills npm packages...')
const skillDomains = await SkillDomainHelper.getSkillDomains()
for (const currentDomain of skillDomains.values()) {
const skillKeys = Object.keys(currentDomain.skills)
// Browse skills
for (let i = 0; i < skillKeys.length; i += 1) {
const skillFriendlyName = skillKeys[i]
const currentSkill = currentDomain.skills[skillFriendlyName]
if (currentSkill.bridge === 'nodejs') {
const skillSRCPath = path.join(currentSkill.path, 'src')
const skillPackageJSONPath = path.join(skillSRCPath, 'package.json')
if (fs.existsSync(skillPackageJSONPath)) {
const isPackageJSONEmpty = await isFileEmpty(skillPackageJSONPath)
if (!isPackageJSONEmpty) {
const packageJSONMtime = (
await fs.promises.stat(skillPackageJSONPath)
).mtime
const lastSkillNPMInstallFilePath = path.join(
skillSRCPath,
'.last-skill-npm-install'
)
if (fs.existsSync(lastSkillNPMInstallFilePath)) {
const lastSkillNPMInstallTime = new Date(
await fs.promises.readFile(
lastSkillNPMInstallFilePath,
'utf8'
)
)
if (packageJSONMtime <= lastSkillNPMInstallTime) {
LogHelper.success(
`${skillFriendlyName} skill npm packages are up-to-date`
)
continue
}
}
LogHelper.info(
`Installing npm packages for the ${skillFriendlyName} skill...`
)
await command(`npm install --prefix ${skillSRCPath}`, {
shell: true,
stdio: 'inherit'
})
await fs.promises.writeFile(
lastSkillNPMInstallFilePath,
`${Date.now()}`
)
LogHelper.success(
`${skillFriendlyName} skill npm packages installed`
)
}
}
}
}
}
LogHelper.success('npm packages for Node.js skills installed')
} catch (e) {
LogHelper.error(
`Failed to install Node.js skills third-party dependencies: ${e}`
)
}
}

View File

@ -19,8 +19,8 @@ export default () =>
const skillKeys = Object.keys(currentDomain.skills) const skillKeys = Object.keys(currentDomain.skills)
// Browse skills // Browse skills
for (let j = 0; j < skillKeys.length; j += 1) { for (let i = 0; i < skillKeys.length; i += 1) {
const skillFriendlyName = skillKeys[j] const skillFriendlyName = skillKeys[i]
const currentSkill = currentDomain.skills[skillFriendlyName] const currentSkill = currentDomain.skills[skillFriendlyName]
const configDir = path.join(currentSkill.path, 'src') const configDir = path.join(currentSkill.path, 'src')
const configFile = path.join(configDir, 'config.json') const configFile = path.join(configDir, 'config.json')

View File

@ -8,6 +8,7 @@ import generateJSONSchemas from '../generate/generate-json-schemas'
import setupDotenv from './setup-dotenv' import setupDotenv from './setup-dotenv'
import setupCore from './setup-core' import setupCore from './setup-core'
import setupSkillsConfig from './setup-skills-config' import setupSkillsConfig from './setup-skills-config'
import installNodeJSSkillsPackages from './install-nodejs-skills-packages'
import setupBinaries from './setup-binaries' import setupBinaries from './setup-binaries'
import createInstanceID from './create-instance-id' import createInstanceID from './create-instance-id'
@ -21,6 +22,7 @@ import createInstanceID from './create-instance-id'
await setupDotenv() await setupDotenv()
LoaderHelper.start() LoaderHelper.start()
await Promise.all([setupCore(), setupSkillsConfig()]) await Promise.all([setupCore(), setupSkillsConfig()])
await installNodeJSSkillsPackages()
LoaderHelper.stop() LoaderHelper.stop()
await setupBinaries() await setupBinaries()
await generateHTTPAPIKey() await generateHTTPAPIKey()

View File

@ -1,8 +1,16 @@
import path from 'node:path' import path from 'node:path'
import fs from 'node:fs'
import type { ShortLanguageCode } from '@/types' import type { ShortLanguageCode } from '@/types'
import { GLOBAL_DATA_PATH } from '@/constants' import { GLOBAL_DATA_PATH } from '@/constants'
/**
* Files
*/
export async function isFileEmpty(path: string): Promise<boolean> {
return (await fs.promises.readFile(path)).length === 0
}
/** /**
* Paths * Paths
*/ */