#!/usr/bin/env python
# Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

# Utility script to make it easier to update what golem builds.

import gradle
import sys
import utils
import os

BUILD_TARGETS = ['downloadDeps', 'downloadAndroidCts', 'downloadDx']

def Main():
  gradle.RunGradle(BUILD_TARGETS)
  utils.DownloadFromX20(
      os.path.join(utils.THIRD_PARTY, 'gradle-plugin') + '.tar.gz.sha1')
  utils.DownloadFromX20(
      os.path.join(
          utils.THIRD_PARTY, 'benchmarks', 'android-sdk') + '.tar.gz.sha1')
  utils.DownloadFromX20(
      os.path.join(utils.THIRD_PARTY, 'remapper') + '.tar.gz.sha1')
  utils.DownloadFromGoogleCloudStorage(utils.SAMPLE_LIBRARIES_SHA_FILE)
  utils.DownloadFromGoogleCloudStorage(utils.OPENSOURCE_APPS_SHA_FILE)
  utils.DownloadFromGoogleCloudStorage(utils.ANDROID_SDK + '.tar.gz.sha1',
                                       bucket='r8-deps-internal',
                                       auth=True)
  utils.DownloadFromGoogleCloudStorage(
      os.path.join(utils.THIRD_PARTY, 'retrace_benchmark') + '.tar.gz.sha1')

if __name__ == '__main__':
  sys.exit(Main())
