You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pup/release.py

78 lines
2.2 KiB

#!/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)