#!/usr/bin/env python

# ZIP one file as "tendermint" into a ZIP like tendermint_VERSION_OS_ARCH.zip
# Use environment variables CIRCLE_TAG, GOOS and GOARCH for easy input parameters.
# Optimized for CircleCI

import os
import argparse
import zipfile
import hashlib


BLOCKSIZE = 65536


def zip_asset(file,destination,arcname,version,goos,goarch):
  filename = os.path.basename(file)
  output = "{0}/{1}_{2}_{3}_{4}.zip".format(destination,arcname,version,goos,goarch)

  with zipfile.ZipFile(output,'w') as f:
    f.write(filename=file,arcname=arcname)
    f.comment=filename
  return output


if __name__ == "__main__":
  parser = argparse.ArgumentParser()
  parser.add_argument("--file", default="build/tendermint_{0}_{1}".format(os.environ.get('GOOS'),os.environ.get('GOARCH')), help="File to zip")
  parser.add_argument("--destination", default="build", help="Destination folder for files")
  parser.add_argument("--version", default=os.environ.get('CIRCLE_TAG'), help="Version number for binary, e.g.: v1.0.0")
  parser.add_argument("--goos", default=os.environ.get('GOOS'), help="GOOS parameter")
  parser.add_argument("--goarch", default=os.environ.get('GOARCH'), help="GOARCH parameter")
  args = parser.parse_args()

  if args.version is None:
    raise parser.error("argument --version is required")
  if args.goos is None:
    raise parser.error("argument --goos is required")
  if args.goarch is None:
    raise parser.error("argument --goarch is required")

  file = zip_asset(args.file,args.destination,"tendermint",args.version,args.goos,args.goarch)
  print(file)