1eeffdb10STomasz Sapetaimport fs from 'fs-extra'; 2eeffdb10STomasz Sapetaimport path from 'path'; 3eeffdb10STomasz Sapeta 4eeffdb10STomasz Sapetaimport { ANDROID_DIR } from '../Constants'; 5*d4613734SKudo Chienimport logger from '../Logger'; 6eeffdb10STomasz Sapetaimport { androidAppVersionAsync } from '../ProjectVersions'; 7eeffdb10STomasz Sapetaimport { spawnAsync } from '../Utils'; 8a2ffa225SBartłomiej Klocekimport { ClientBuilder, ClientBuildFlavor, Platform, S3Client } from './types'; 9eeffdb10STomasz Sapeta 10eeffdb10STomasz Sapetaexport default class AndroidClientBuilder implements ClientBuilder { 11eeffdb10STomasz Sapeta platform: Platform = 'android'; 12eeffdb10STomasz Sapeta 13eeffdb10STomasz Sapeta getAppPath(): string { 14ee004e86SBrent Vatne return path.join( 15ee004e86SBrent Vatne ANDROID_DIR, 16ee004e86SBrent Vatne 'app', 17ee004e86SBrent Vatne 'build', 18ee004e86SBrent Vatne 'outputs', 19ee004e86SBrent Vatne 'apk', 20ee004e86SBrent Vatne 'versioned', 21ee004e86SBrent Vatne 'release', 22ee004e86SBrent Vatne 'app-versioned-release.apk' 23ee004e86SBrent Vatne ); 24eeffdb10STomasz Sapeta } 25eeffdb10STomasz Sapeta 26eeffdb10STomasz Sapeta getClientUrl(appVersion: string): string { 27eeffdb10STomasz Sapeta return `https://d1ahtucjixef4r.cloudfront.net/Exponent-${appVersion}.apk`; 28eeffdb10STomasz Sapeta } 29eeffdb10STomasz Sapeta 30eeffdb10STomasz Sapeta async getAppVersionAsync(): Promise<string> { 31eeffdb10STomasz Sapeta return androidAppVersionAsync(); 32eeffdb10STomasz Sapeta } 33eeffdb10STomasz Sapeta 34a2ffa225SBartłomiej Klocek async buildAsync(flavor: ClientBuildFlavor = ClientBuildFlavor.VERSIONED) { 35a2ffa225SBartłomiej Klocek await spawnAsync('fastlane', ['android', 'build', 'build_type:Release', `flavor:${flavor}`], { 36a2ffa225SBartłomiej Klocek stdio: 'inherit', 37a2ffa225SBartłomiej Klocek }); 38*d4613734SKudo Chien 39*d4613734SKudo Chien if (flavor === ClientBuildFlavor.VERSIONED) { 40*d4613734SKudo Chien logger.info('Uploading Crashlytics symbols'); 41*d4613734SKudo Chien await spawnAsync('fastlane', ['android', 'upload_crashlytics_symbols', `flavor:${flavor}`], { 42*d4613734SKudo Chien stdio: 'inherit', 43*d4613734SKudo Chien }); 44*d4613734SKudo Chien } 45eeffdb10STomasz Sapeta } 46eeffdb10STomasz Sapeta 47eeffdb10STomasz Sapeta async uploadBuildAsync(s3Client: S3Client, appVersion: string) { 48eeffdb10STomasz Sapeta const file = fs.createReadStream(this.getAppPath()); 49eeffdb10STomasz Sapeta 50eeffdb10STomasz Sapeta await s3Client 51eeffdb10STomasz Sapeta .putObject({ 52eeffdb10STomasz Sapeta Bucket: 'exp-android-apks', 53eeffdb10STomasz Sapeta Key: `Exponent-${appVersion}.apk`, 54eeffdb10STomasz Sapeta Body: file, 55eeffdb10STomasz Sapeta ACL: 'public-read', 56eeffdb10STomasz Sapeta }) 57eeffdb10STomasz Sapeta .promise(); 58eeffdb10STomasz Sapeta } 59eeffdb10STomasz Sapeta} 60