#!/usr/bin/env python3
# Copyright (c) 2023, 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.

import argparse
import sys

import gmaven

ARCHIVE_BUCKET = 'r8-releases'
REPO = 'https://github.com/google/smali'

def parse_options():
  result = argparse.ArgumentParser(description='Release Smali')
  result.add_argument('--version',
                      required=True,
                      metavar=('<version>'),
                      help='The version of smali to release.')
  result.add_argument('--dry-run',
                      default=False,
                      action='store_true',
                      help='Only perform non-commiting tasks and print others.')
  return result.parse_args()


def Main():
  options = parse_options()
  gfile = ('/bigstore/r8-releases/smali/%s/smali-maven-release-%s.zip'
       % (options.version, options.version))
  release_id = gmaven.publisher_stage([gfile], options.dry_run)

  print('Staged Release ID %s.\n' % release_id)
  gmaven.publisher_stage_redir_test_info(
      release_id, 'com.android.tools.smali:smali:%s' % options.version, 'smali.jar')

  print()
  answer = input('Continue with publishing [y/N]:')

  if answer != 'y':
    print('Aborting release to Google maven')
    sys.exit(1)

  gmaven.publisher_publish(release_id, options.dry_run)

  print()
  print('Published. Use the email workflow for approval.')

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