alwaysai
Version:
The alwaysAI command-line interface (CLI)
55 lines (46 loc) • 1.49 kB
text/typescript
import difference = require('lodash.difference');
import { Spawner } from '../spawner/types';
import { InstallModels } from './install-models';
import { posix } from 'path';
const REQUIREMENTS_FILE_NAME = 'requirements.txt';
const VENV = 'venv';
export const ACTIVATE = posix.join(VENV, 'bin', 'activate');
const IGNORED_FILE_NAMES = ['models', 'node_modules', '.git', 'venv'];
export function AppInstaller(target: Spawner) {
const installModels = InstallModels(target);
return {
installSource,
installModels,
installVirtualenv,
installPythonDeps,
};
async function installSource(source: Spawner) {
const allFileNames = await source.readdir();
const filteredFileNames = difference(allFileNames, IGNORED_FILE_NAMES);
const readable = await source.tar(...filteredFileNames);
await target.untar(readable);
}
async function installVirtualenv() {
let changed = false;
if (!(await target.exists(VENV))) {
changed = true;
await target.run({
exe: 'virtualenv',
args: ['--system-site-packages', VENV],
cwd: '.',
});
}
return { changed };
}
async function installPythonDeps() {
let changed = false;
if (await target.exists(REQUIREMENTS_FILE_NAME)) {
changed = true;
await target.run({
exe: target.resolvePath(VENV, 'bin', 'pip'),
args: ['install', '--requirement', target.resolvePath(REQUIREMENTS_FILE_NAME)],
});
}
return changed;
}
}