# Description: # abilità di asjon di usare la shell *nix # # Requires: # None # # Commands: # asjon run/esegui/shell git/npm args... # # Author: # Enrico Fasoli (fazo96) cp = require 'child_process' nope = ['BZBZ 400-BAD-REQUEST', 'BZBZ DOES-NOT-COMPUTE', 'BZBZ ADMIN-NOT-DETECTED', 'BZBZ IS-NOT-AUTHORIZED', 'BZBZ ACCESS-DENIED'] isFromAdmin = (res) -> res.message.user.room is process.env.ADMIN_ROOM?.replace(':','#') or res.robot.adapterName is 'shell' runCmd = (cmd,res,cb) -> if res? then res.send 'Operazione in corso: '+cmd if process.env.TESTING_ASJON # Fingi di eseguire l'operazione if res? then res.send 'Operazione "completata": '+cmd else cp.exec cmd, (err,stdout,stderr) -> if res? if err res.send 'Operazione fallita:\n'+stdout+stderr else res.send 'Operazione completata:\n'+stdout if cb? then cb err,stdout,stderr module.exports = (robot) -> robot.respond /aggiornati|scarica (?:gli )?aggiornamenti/i, (res) -> if !isFromAdmin(res) then return res.send res.random nope runCmd 'git pull && npm install', res robot.respond /(?:controlla gli )?aggiornamenti/i, (res) -> if !isFromAdmin(res) then return res.send res.random nope runCmd 'git fetch && git status', res robot.respond /(?:installa (?:le )?)?dipendenze/i, (res) -> if !isFromAdmin(res) then return res.send res.random nope runCmd 'npm install', res robot.respond /(?:esegui (?:i )?)?test/i, (res) -> if !isFromAdmin(res) then return res.send res.random nope runCmd 'npm test', res # Run tests on boot and report to ADMIN if process.env.AUTO_RUN_TESTS and process.env.ADMIN_ROOM dest = room: process.env.ADMIN_ROOM.replace(':','#') robot.send dest, 'Operazione in corso: npm test' runCmd 'npm test', null, (err,stdout,stderr) -> if err robot.send dest, 'ATTENZIONE: TEST FAILURE\n'+stdout+stderr else robot.send dest, 'Test superati con successo:\n'+stdout robot.on 'githubhook', (data,params) -> if data.ref is 'refs/heads/master' and process.env.AUTO_KILL_ON_UPDATE runCmd 'git pull && npm install', null, -> dest = name: params.name, room: params.room.replace(':','#') robot.send dest, 'riavvio in 5 SECONDI' reboot = -> console.log 'AUTO IMPICCAGIONE IN CORSO!' process.exit 0 setTimeout reboot, 5000