import { logger } from '../npmci.logging.js'; import * as plugins from './mod.plugins.js'; import * as paths from '../npmci.paths.js'; import { bash } from '../npmci.bash.js'; import { Npmci } from '../npmci.classes.npmci.js'; export class NpmciCloudronManager { public npmciRef: Npmci; constructor(npmciArg: Npmci) { this.npmciRef = npmciArg; } /** * handle cli input * @param argvArg */ public handleCli = async (argvArg: any) => { if (argvArg._.length >= 2) { const action: string = argvArg._[1]; switch (action) { case 'deploy': await this.deploy(); break; default: logger.log('error', `>>npmci cloudron ...<< action >>${action}<< not supported`); } } else { logger.log( 'info', `>>npmci cloudron ...<< cli arguments invalid... Please read the documentation.` ); } }; /** * Replaces the version string in CloudronManifest file * @param versionArg */ public deploy = async () => { logger.log('info', 'now deploying to cloudron...'); logger.log('info', 'installing cloudron cli...'); await bash(`pnpm install -g cloudron`); logger.log('ok', 'cloudron cli installed'); // lets set the version in the CloudronManifest file await this.prepareCloudronManifest(this.npmciRef.npmciConfig.getConfig().projectInfo.npm.version); logger.log('ok', 'CloudronManifest prepared'); // lets figure out the docker image tag const dockerImageTag = await this.npmciRef.npmciConfig.kvStorage.readKey('latestPushedDockerTag'); const appName = this.npmciRef.npmciConfig.getConfig().cloudronAppName; const cloudronEnvVar = process.env.NPMCI_LOGIN_CLOUDRON; const cloudronServer = cloudronEnvVar.split('|')[0]; const cloudronToken = cloudronEnvVar.split('|')[1]; await bash(`cloudron update --server ${cloudronServer} --token ${cloudronToken} --image ${dockerImageTag} --app ${appName}`); }; private prepareCloudronManifest = async (versionArg: string) => { const manifestPath = plugins.path.join(paths.cwd, 'CloudronManifest.json'); let manifestFile = plugins.smartfile.fs.toStringSync(manifestPath); manifestFile = manifestFile.replace(/##version##/g, versionArg); plugins.smartfile.memory.toFsSync(manifestFile, manifestPath); logger.log('info', 'Version replaced in CloudronManifest file'); } }