Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: update Android SDK packages #62

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/commands/android/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ export const AVAILABLE_SUBCOMMANDS: AvailableSubcommands = {
]
}
]
},
update: {
description: 'Update Android SDK packages',
flags: []
}
};

Expand Down
3 changes: 3 additions & 0 deletions src/commands/android/subcommands/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {showHelp} from './help';
import {install} from './install';
import {list} from './list';
import {uninstall} from './uninstall';
import {update} from './update';

export class AndroidSubcommand {
sdkRoot: string;
Expand Down Expand Up @@ -81,6 +82,8 @@ export class AndroidSubcommand {
return await list(this.options, this.sdkRoot, this.platform);
} else if (this.subcommand === 'uninstall') {
return await uninstall(this.options, this.sdkRoot, this.platform);
} else if (this.subcommand === 'update') {
return await update(this.sdkRoot, this.platform);
}

return false;
Expand Down
87 changes: 87 additions & 0 deletions src/commands/android/subcommands/update/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import colors from 'ansi-colors';
import inquirer from 'inquirer';

import Logger from '../../../../logger';
import {Platform} from '../../interfaces';
import {getBinaryLocation} from '../../utils/common';
import {execBinarySync, spawnCommandSync} from '../../utils/sdk';
import {showMissingBinaryHelp} from '../common';

export async function update(sdkRoot: string, platform: Platform): Promise<boolean> {
try {
const sdkmanagerLocation = getBinaryLocation(sdkRoot, platform, 'sdkmanager', true);
if (!sdkmanagerLocation) {
showMissingBinaryHelp('sdkmanager');

return false;
}
const stdout = execBinarySync(sdkmanagerLocation, 'sdkmanager', platform, '--list --include_obsolete');
if (!stdout) {
Logger.log(colors.red('Failed to fetch packages. Please try again.\n'));

return false;
}

if (!stdout.includes('Available Updates:')) {
Logger.log(colors.yellow('No updates available.\n'));

return true;
}

const availableUpdates = stdout.split('Available Updates:')[1].trimEnd();

Logger.log(colors.bold('Available Updates:'));
Logger.log(availableUpdates);
Logger.log();

const availableUpdatesList = availableUpdates.split('\n').filter(line => line !== '').slice(2);
const availableUpdatesNames: string[] = [];

availableUpdatesList.forEach(updateInfo => {
const packageName = updateInfo.split('|')[0].trim();
availableUpdatesNames.push(packageName);
});

const updateAnswer = await inquirer.prompt({
type: 'list',
name: 'packageName',
message: 'Select the packages to update:',
choices: [...availableUpdatesNames, 'Update all']
});
const packageName = updateAnswer.packageName;

Logger.log();

const commandArgs: string[] = [];
if (packageName === 'Update all') {
Logger.log('Updating all packages... \n');
commandArgs.push('--update');
} else {
Logger.log(`Updating ${colors.cyan(packageName)}... \n`);
commandArgs.push(packageName);
}

const updateStatus = spawnCommandSync(sdkmanagerLocation, 'sdkmanager', platform, commandArgs);
if (updateStatus) {
if (packageName === 'Update all') {
Logger.log(colors.green('Packages updated successfully!\n'));
} else {
Logger.log(colors.green(`${packageName} updated successfully!\n`));
}

return true;
}

Logger.log(colors.red('Something went wrong.\n'));
Logger.log('To verify if the package was updated, run: npx @nightwatch/mobile-helper android.sdkmanager --list');
Logger.log('If the package is found listed in \'Available Updates\' section, please try updating again.\n');

return false;
} catch (err) {
Logger.log(colors.red('Error occured while updating the package.'));
console.error(err);

return false;
}
}

Loading