#!/usr/bin/env python
# -*- coding: utf-8 -*-
import argparse
import tempfile
import subprocess
import sys
import os

def die(message=''):
    sys.stderr.write("%s\n" % message)
    exit(1)

def my_tee(cmd, verbose=True):
    if verbose:
        print("going to exec: %s\n" % cmd)
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    lines = []
    while True:
        line = proc.stdout.readline()
        if not line:
            break
        line = line.rstrip()
        lines.append(line)
        print line
    proc.wait()
    if proc.returncode != 0:
        die("cmd failed, stop (%s)" % cmd)
    return lines

repo = 'https://github.yandex-team.ru/direct/dna.git'
defaultBranch = 'master'

def run():
    parser = argparse.ArgumentParser(add_help=True, description=u'Сборка пакета верстки dna.')
    parser.add_argument('--release', dest='release', action='store_true', help=u'собрать версию из master')
    parser.add_argument('--commit', dest='commit', action='store', help=u'собрать версию из указанного коммита')
    parser.add_argument('--s3', dest='s3', action='store_true', help=u'выложить релиз на s3')
    args = parser.parse_args()

    if len(sys.argv) == 1:
        parser.print_help()
        die()

    tmpdir = tempfile.mkdtemp(prefix='dna-release')
    os.chdir(tmpdir)
    print tmpdir
    my_tee(['git', 'clone', '-b', defaultBranch, repo])

    os.chdir('./dna')

    if args.commit:
        my_tee(['git', 'checkout', args.commit])

    version = my_tee(['git', 'describe', '--dirty', '--tag'])[0][1:]
    print 'version: %s' % version
    print 'tmpdir: %s' % tmpdir

    os.environ["NEWVERSION"] = version
    os.environ["TMPDIR"] = tmpdir
    my_tee(['make', 'deb'])

    if args.s3:
        # my_tee не позволяет переключить virtualenv
        os.system('virtualenv virtualenv && source virtualenv/bin/activate && pip install awscli==1.15.60')
        os.system('source virtualenv/bin/activate && aws s3 --endpoint-url=https://s3.mds.yandex.net sync build s3://direct-dna/releases')

if __name__ == '__main__':
    run();
