#!/usr/bin/env python import hashlib import os import re import shutil import subprocess as sp from string import Template from zipfile import ZipFile brew_formula_template = Template(""" # This file was generated by release.py require 'formula' class Pup < Formula homepage 'https://github.com/EricChiang/pup' version '${version}' if Hardware.is_64_bit? url 'https://github.com/EricChiang/pup/releases/download/v${version}/pup_darwin_amd64.zip' sha1 '${darwin_amd64_sha1}' else url 'https://github.com/EricChiang/pup/releases/download/v${version}/pup_darwin_386.zip' sha1 '${darwin_386_sha1}' end def install bin.install 'pup' end end """.strip()) version_re = re.compile(r'\nvar VERSION string = \"([0-9\.]+)\"\n') if __name__ == "__main__": with open("pup.go", "r") as f: version = version_re.findall(f.read()) assert len(version) == 1, "[-] Failed to find current version %s" % (version,) version = version[0] print "[+] Version found:", version if os.path.isdir("./dist"): print "[+] Directory 'dist' exists. Removing it." shutil.rmtree("./dist") print "[+] Cross-compiling pup." sp.check_call(["gox", "-output", "dist/{{.Dir}}_{{.OS}}_{{.Arch}}"]) print "[+] Zipping executables." sha1sums = {} for fi in os.listdir("./dist"): exe = os.path.join("dist", "pup") zipname = os.path.join("dist", fi) if fi.endswith(".exe"): exe += ".exe" zipname = zipname.rstrip(".exe") zipname += ".zip" os.rename(os.path.join("dist", fi), exe) with ZipFile(zipname, "w") as z: z.write(exe, os.path.basename(exe)) os.remove(exe) h = hashlib.sha1() with open(zipname, "r") as z: h.update(z.read()) sha1sum = h.hexdigest() print "[+] %s: %s" % (sha1sum, zipname,) sha1sums[zipname] = sha1sum t = brew_formula_template.substitute( version=version, darwin_amd64_sha1 = sha1sums["dist/pup_darwin_amd64.zip"], darwin_386_sha1 = sha1sums["dist/pup_darwin_386.zip"], ) print "[+] Updating brew formula." with open("pup.rb", "w") as f: f.write(t)