1import chalk from 'chalk'; 2 3import logger from '../Logger'; 4import { getAndroidProjectReports, Revision } from './androidProjectReports'; 5import { promptForNativeDependenciesUpdates, promptForAndroidProjectsSelection } from './prompts'; 6import { AndroidProjectReport, GradleDependency } from './types'; 7import { addChangelogEntries } from './updateChangelogFiles'; 8import { updateGradleDependencies } from './updateGradleFiles'; 9import { addColorBasedOnSemverDiff, calculateSemverDiff, getChangelogLink } from './utils'; 10 11async function printAvailableUpdates(reports: AndroidProjectReport[]) { 12 const printDependency = (dependency: GradleDependency) => { 13 logger.log( 14 ` ▶︎ ${dependency.fullName}:${dependency.currentVersion} ➡️ ${addColorBasedOnSemverDiff( 15 dependency.availableVersion, 16 calculateSemverDiff(dependency.currentVersion, dependency.availableVersion) 17 )} ${getChangelogLink(dependency.fullName, dependency.projectUrl)}` 18 ); 19 }; 20 21 for (const { 22 projectName, 23 gradleReport: { exceeded, unresolved, outdated }, 24 } of reports) { 25 const unresolvedExceededDependencies = [...unresolved, ...exceeded]; 26 const noDependenciesIssues = unresolvedExceededDependencies.length + outdated.length === 0; 27 28 logger.log( 29 `\n● Project: ${chalk.blue(projectName)}${ 30 noDependenciesIssues ? chalk.green(` - no dependencies issues ✅`) : '' 31 }` 32 ); 33 34 if (outdated.length > 0) { 35 logger.log(chalk.cyan(' ◼︎ outdated dependencies:')); 36 outdated.forEach(printDependency); 37 } 38 39 if (unresolvedExceededDependencies.length > 0) { 40 logger.log(chalk.yellow(' ◼︎ unresolved/exceeded dependencies:')); 41 unresolvedExceededDependencies.forEach(printDependency); 42 } 43 } 44} 45 46export interface Options { 47 revision: Revision; 48 list: boolean; 49 clearCache: boolean; 50 platform: string; 51} 52 53export default async function androidUpdateNativeDependencies(options: Options) { 54 const reports = await getAndroidProjectReports(options); 55 if (options.list) { 56 return await printAvailableUpdates(reports); 57 } 58 const selectedReports = await promptForAndroidProjectsSelection(reports); 59 const selectedDependenciesUpdates = await promptForNativeDependenciesUpdates(selectedReports); 60 await updateGradleDependencies(selectedDependenciesUpdates); 61 await addChangelogEntries(selectedDependenciesUpdates); 62} 63