diff --git a/src/commands/pull.ts b/src/commands/pull.ts index 4686365..569f940 100644 --- a/src/commands/pull.ts +++ b/src/commands/pull.ts @@ -14,27 +14,64 @@ export default class Pull extends Command { public async run(message: Message) { try { - const updateMessage = await message.channel.createMessage(`${this.client.stores.emojis.loading} ***Fetching latest commit...***`); + const updateMessage = await message.channel.createMessage(`${this.client.stores.emojis.loading} ***Fetching latest commit...***\n\`\`\`sh\ngit pull\n\`\`\``); let pull: string; try { pull = await this.client.util.exec('git pull'); } catch (error) { - return updateMessage.edit(`${this.client.stores.emojis.error} ***Could not fetch latest commit***\n\`\`\`sh\n${error.message}\n\`\`\``); - } - if (pull.includes('Already up to date')) return updateMessage.edit(`${this.client.stores.emojis.success} ***No updates available***`); - if (!pull.includes('origin/master')) return updateMessage.edit(`${this.client.stores.emojis.error} ***Unexpected output:***\n\`\`\`sh\n${pull}\n\`\`\``); - - const passedPull = await updateMessage.edit(`${this.client.stores.emojis.success} ***Pulled latest commit***\n${this.client.stores.emojis.loading} ***Rebuilding files...***\n\`\`\`sh\n${pull}\n\`\`\``); - try { - await this.client.util.exec('cd ../ && tsc -p ./tsconfig.json'); - } catch (error) { - const updatedMessage = passedPull.content.replace(`${this.client.stores.emojis.loading} ***Rebuilding files...***`, `${this.client.stores.emojis.error} ***Failed to rebuild files***`) + const updatedMessage = updateMessage.content.replace(`${this.client.stores.emojis.loading} ***Fetching latest commit...***`, `${this.client.stores.emojis.error} ***Could not fetch latest commit***`) .replace(/```$/, `${error.message}\n\`\`\``); return updateMessage.edit(updatedMessage); } + if (pull.includes('Already up to date')) { + const updatedMessage = updateMessage.content.replace(`${this.client.stores.emojis.loading} ***Fetching latest commit...***`, `${this.client.stores.emojis.success} ***No updates available***`) + .replace(/```$/, `${pull}\n\`\`\``); + return updateMessage.edit(updatedMessage); + } + if (!pull.includes('origin/master')) { + const updatedMessage = updateMessage.content.replace(`${this.client.stores.emojis.loading} ***Fetching latest commit...***`, `${this.client.stores.emojis.error} ***Unexpected git output***`) + .replace(/```$/, `${pull}\n\`\`\``); + return updateMessage.edit(updatedMessage); + } + const continueMessage = updateMessage.content.replace(`${this.client.stores.emojis.loading} ***Fetching latest commit...***`, `${this.client.stores.emojis.success} ***Pulled latest commit***\n${this.client.stores.emojis.loading} ***Reinstalling dependencies...***`) + .replace(/```$/, `${pull}\nyarn install\n\`\`\``); + const passedPull = await updateMessage.edit(continueMessage); - const finalMessage = passedPull.content.replace(`${this.client.stores.emojis.loading} ***Rebuilding files...***`, `${this.client.stores.emojis.success} ***Files rebuilt***`); + + let install: string; + try { + install = await this.client.util.exec('yarn install'); + } catch (error) { + const updatedMessage = passedPull.content.replace(`${this.client.stores.emojis.loading} ***Reinstalling dependencies...***`, `${this.client.stores.emojis.error} ***Failed to reinstall dependencies***`) + .replace(/```$/, `${error.message}\n\`\`\``); + return updateMessage.edit(updatedMessage); + } + let updatedPackages: Message; + if (install.includes('Already up-to-date')) { + const updatedMessage = passedPull.content.replace(`${this.client.stores.emojis.loading} ***Reinstalling dependencies...***`, `${this.client.stores.emojis.success} ***No dependency updates available***\n${this.client.stores.emojis.loading} ***Rebuilding files...***`) + .replace(/```$/, `${install}\nyarn run build\n\`\`\``); + updatedPackages = await updateMessage.edit(updatedMessage); + } else if (install.includes('success Saved lockfile.')) { + const updatedMessage = passedPull.content.replace(`${this.client.stores.emojis.loading} ***Reinstalling dependencies...***`, `${this.client.stores.emojis.success} ***Updated dependencies***\n${this.client.stores.emojis.loading} ***Rebuilding files...***`) + .replace(/```$/, `${install}\nyarn run build\n\`\`\``); + updatedPackages = await updateMessage.edit(updatedMessage); + } else { + const updatedMessage = passedPull.content.replace(`${this.client.stores.emojis.loading} ***Reinstalling dependencies...***`, `${this.client.stores.emojis.error} ***Unexpected yarn install output***`) + .replace(/```$/, `${pull}\n\`\`\``); + return updateMessage.edit(updatedMessage); + } + + let build: string; + try { + build = await this.client.util.exec('yarn run build'); + } catch (error) { + const updatedMessage = updatedPackages.content.replace(`${this.client.stores.emojis.loading} ***Rebuilding files...***`, `${this.client.stores.emojis.error} ***Failed to rebuild files***`) + .replace(/```$/, `${error.message}\n\`\`\``); + return updateMessage.edit(updatedMessage); + } + const finalMessage = updatedPackages.content.replace(`${this.client.stores.emojis.loading} ***Rebuilding files...***`, `${this.client.stores.emojis.success} ***Files rebuilt***`) + .replace(/```$/, `${build}\n\`\`\``); return updateMessage.edit(finalMessage); } catch (error) {