UNPKG

alwaysai

Version:

The alwaysAI command-line interface (CLI)

67 lines (64 loc) 1.98 kB
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; } } } }