Files
2026-10-04 00:30:09 +07:00

24 lines
1.2 KiB
JavaScript

#!/usr/bin/env node
import { createInterface } from 'node:readline';
import { fileURLToPath } from 'node:url';
import { deployOnHost } from '../platform/deployment.mjs';
import { rollbackOnHost } from '../platform/rollback.mjs';
const input=createInterface({input:process.stdin,terminal:false});
const messages=input[Symbol.asyncIterator]();
const send=value=>process.stdout.write('MCPACK:'+JSON.stringify(value)+'\n');
try{
const first=await messages.next();
if(first.done)throw new Error('Missing deploy request');
const request=JSON.parse(first.value);
const repository=fileURLToPath(new URL('../',import.meta.url));
const state=request.operation==='rollback' ? rollbackOnHost({...request,repository}) : await deployOnHost({...request,repository,receive:async stage=>{
send({type:'ready',stage});
const next=await messages.next();
if(next.done)throw new Error('SSH upload/session interrupted');
const message=JSON.parse(next.value);
if(message.type!=='uploaded')throw new Error('Release transfer failed or aborted');
}});
send({type:'complete',state});
}catch(error){send({type:'error',message:error.message});process.exitCode=1;}
finally{input.close();}