Skip to content
Snippets Groups Projects
Select Git revision
  • jw_sonar
  • v6.0.0 protected
  • interactive-mode-preference
  • bedran_exercise-list
  • main default protected
  • add_route_user
  • Jw_sonar_backup
  • exercise_list_filter
  • assignment_filter
  • add_route_assignments
  • move-to-esm-only
  • 6.0.0-dev
  • Pre-alpha
  • 5.0.0
  • Latest
  • 4.2.0
  • 4.1.1
  • 4.1.0
  • 4.0.1
  • 4.0.0
  • 3.5.0
  • 3.4.2
  • 3.4.1
  • 3.3.0
  • 3.2.3
  • 3.2.2
  • 3.2.0
  • 3.1.2
  • 3.1.1
  • 3.1.0
  • 3.0.1
31 results

UpgradeCommand.ts

Blame
  • UpgradeCommand.ts 2.62 KiB
    import CommanderCommand from './CommanderCommand.js';
    import ora              from 'ora';
    import TextStyle        from '../types/TextStyle.js';
    import os               from 'os';
    import { spawn }        from 'child_process';
    import Config           from '../config/Config';
    
    
    class UpgradeCommand extends CommanderCommand {
        protected commandName: string = 'upgrade';
    
        protected defineCommand() {
            this.command.description('upgrade the DojoCLI.')
                .option('--pre-alpha', 'upgrade to the latest pre-alpha (dev) version. Attention it\'s an unstable version without support.')
                .option('-o, --instructions', 'only display upgrade instructions.')
                .action(this.commandAction.bind(this));
        }
    
        private displayInstructions(upgradeCommand: string, preAlpha: boolean) {
            upgradeCommand = TextStyle.CODE(` ${ upgradeCommand } `);
    
            console.log(TextStyle.BLOCK(`You can upgrade DojoCLI on ${ os.platform() === 'darwin' ? 'macOS' : 'Linux' }:`));
            ora().start().info(`By executing this command: ${ upgradeCommand }`);
            console.log('or');
            ora().start().info(`By downloading the release from: ${ preAlpha ? Config.gitlab.cliPreAlphaReleasePage : Config.gitlab.cliReleasePage }`);
        }
    
        private upgrade(upgradeCommand: string) {
            const upgradeSpinner = ora().start('DojoCLI upgrade is in progress. Please wait...');
    
            const upgradeProcess = spawn(upgradeCommand, {
                shell: true
            });
    
            upgradeProcess.on('exit', code => {
                code === null || code !== 0 ? upgradeSpinner.fail('DojoCLI upgrade failed... Please try again manually.') : upgradeSpinner.succeed('DojoCLI upgrade is successful.');
            });
        }
    
        protected async commandAction(options: { preAlpha: boolean, instructions: boolean }): Promise<void> {
            if ( os.platform() === 'win32' ) {
                if ( !options.instructions ) {
                    ora().start().warn('Automatic upgrade is not supported on Windows. \n');
                }
    
                console.log(TextStyle.BLOCK('You can upgrade DojoCLI on Windows:'));
                ora().start().info(`By downloading the release from: ${ options.preAlpha ? Config.gitlab.cliPreAlphaReleasePage : Config.gitlab.cliReleasePage }`);
    
                return;
            }
    
            const upgradeCommand = `curl -L "https://dojo.isc-hesge.ch/installer.sh" | sh /dev/stdin${ options.preAlpha ? ' installer=pre-alpha' : '' }`;
    
            if ( options.instructions ) {
                this.displayInstructions(upgradeCommand, options.preAlpha);
            } else {
                this.upgrade(upgradeCommand);
            }
        }
    }
    
    
    export default new UpgradeCommand();