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