alwaysai
Version:
The alwaysAI command-line interface (CLI)
67 lines (64 loc) • 1.98 kB
text/typescript
import { writeFileSync, existsSync } from 'fs';
import { CliTerseError } from '@alwaysai/alwayscli';
import { confirmWriteFilePromptComponent } from '../general';
import {
Spinner,
UnableToProceedWithoutMessage,
downloadJson
} from '../../util';
import { getSystemId } from '../../infrastructure';
import { DOCKER_EDGEIQ_REPOSITORY_NAME } from '../../constants';
import { DOCKERFILE } from '../../paths';
const WRITE_MESSAGE = `Write ${DOCKERFILE}`;
const FOUND_MESSAGE = `Found ${DOCKERFILE}`;
export async function findOrWriteDockerfileComponent(props: { yes: boolean }) {
const { yes } = props;
if (existsSync(DOCKERFILE)) {
Spinner(FOUND_MESSAGE).succeed();
} else {
// !exists
const confirmed =
yes || (await confirmWriteFilePromptComponent({ fileName: DOCKERFILE }));
if (!confirmed) {
throw new CliTerseError(UnableToProceedWithoutMessage(DOCKERFILE));
}
const spinner = Spinner(WRITE_MESSAGE);
let bucket: string;
switch (getSystemId()) {
case 'development': {
bucket = 'alwaysai-artifacts-dev';
break;
}
case 'qa': {
bucket = 'alwaysai-artifacts-qa';
break;
}
case 'production':
case 'local':
default:
bucket = 'alwaysai-artifacts-prod';
}
const parsed: { version: string; docker: string } = await downloadJson(
`https://${bucket}.s3.us-west-1.amazonaws.com/edgeiq/edgeiq.json`
);
const version = parsed.docker;
try {
writeFileSync(
DOCKERFILE,
`ARG ALWAYSAI_HW="default"\nFROM ${DOCKER_EDGEIQ_REPOSITORY_NAME}:$\{ALWAYSAI_HW}-${version}\n`,
{
flag: 'wx'
}
);
spinner.succeed();
} catch (exception) {
if (exception.code === 'EEXIST') {
// Unlikely scenario that the file did not exist but now does
spinner.succeed(FOUND_MESSAGE);
} else {
spinner.fail();
throw exception;
}
}
}
}