43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import * as core from '@actions/core';
 | |
| import * as semver from 'semver';
 | |
| 
 | |
| export default class AndroidVersioning {
 | |
|   static determineVersionCode(version, inputVersionCode) {
 | |
|     if (!inputVersionCode) {
 | |
|       return AndroidVersioning.versionToVersionCode(version);
 | |
|     }
 | |
|     return inputVersionCode;
 | |
|   }
 | |
| 
 | |
|   static versionToVersionCode(version) {
 | |
|     if (version === 'none') {
 | |
|       core.info(`Versioning strategy is set to ${version}, so android version code should not be applied.`);
 | |
|       return 0;
 | |
|     }
 | |
| 
 | |
|     const parsedVersion = semver.parse(version);
 | |
| 
 | |
|     if (!parsedVersion) {
 | |
|       core.warning(`Could not parse "${version}" to semver, defaulting android version code to 1`);
 | |
|       return 1;
 | |
|     }
 | |
| 
 | |
|     // The greatest value Google Plays allows is 2100000000.
 | |
|     // Allow for 3 patch digits, 3 minor digits and 3 major digits.
 | |
|     const versionCode = parsedVersion.major * 1000000 + parsedVersion.minor * 1000 + parsedVersion.patch;
 | |
| 
 | |
|     if (versionCode >= 2050000000) {
 | |
|       throw new Error(
 | |
|         `Generated versionCode ${versionCode} is dangerously close to the maximum allowed number 2100000000. Consider a different versioning scheme to be able to continue updating your application.`,
 | |
|       );
 | |
|     }
 | |
|     core.info(`Using android versionCode ${versionCode}`);
 | |
|     return versionCode;
 | |
|   }
 | |
| 
 | |
|   static determineSdkManagerParameters(targetSdkVersion) {
 | |
|     const parsedVersion = Number.parseInt(targetSdkVersion.slice(-2), 10);
 | |
|     return Number.isNaN(parsedVersion) ? '' : `platforms;android-${parsedVersion}`;
 | |
|   }
 | |
| }
 |