From c1c3dc36d06534fd45e663ad56afd8ba615e35ab Mon Sep 17 00:00:00 2001 From: Eric Chiang Date: Fri, 22 Jul 2016 21:44:52 -0700 Subject: [PATCH] update release script to build in a container --- release.py | 77 ------------------------------------------------------ release.sh | 65 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 77 deletions(-) delete mode 100644 release.py create mode 100755 release.sh diff --git a/release.py b/release.py deleted file mode 100644 index bd966cf..0000000 --- a/release.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/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) diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..1d5fd33 --- /dev/null +++ b/release.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +set -e + +VERSION="0.4.0" + +rm -rf dist +mkdir dist + +for ENV in $( go tool dist list | grep -v 'android' | grep -v 'darwin/arm' | grep -v 's390x' | grep -v 'plan9/arm'); do + eval $( echo $ENV | tr '/' ' ' | xargs printf 'export GOOS=%s; export GOARCH=%s\n' ) + + GOOS=${GOOS:-linux} + GOARCH=${GOARCH:-amd64} + + BIN="pup" + if [ ${GOOS} == "windows" ]; then + BIN="pup.exe" + fi + + mkdir -p dist + + echo "Building for GOOS=$GOOS GOARCH=$GOARCH" + + sudo rkt run \ + --set-env=GOOS=${GOOS} \ + --set-env=GOARCH=${GOARCH} \ + --set-env=CGO_ENABLED=0 \ + --volume pup,kind=host,source=${PWD} \ + --mount volume=pup,target=/go/src/github.com/ericchiang/pup \ + --insecure-options=image \ + docker://golang:1.6.3 \ + --exec go -- build -v -a \ + -o /go/src/github.com/ericchiang/pup/dist/${BIN} \ + github.com/ericchiang/pup + + sudo rkt gc --grace-period=0s + + zip dist/pup_v${VERSION}_${GOOS}_${GOARCH}.zip -j dist/${BIN} + rm -f dist/${BIN} +done + +DARWIN_AMD64=pup_v${VERSION}_darwin_amd64.zip +DARWIN_386=pup_v${VERSION}_darwin_386.zip + +cat << EOF > pup.rb +# This file was generated by release.sh +require 'formula' +class Pup < Formula + homepage 'https://github.com/ericchiang/pup' + version '0.4.0' + + if Hardware.is_64_bit? + url 'https://github.com/ericchiang/pup/releases/download/${VERSION}/${DARWIN_AMD64}' + sha256 '$( sha256sum dist/${DARWIN_AMD64} | awk '{ print $1 }' | xargs printf )' + else + url 'https://github.com/ericchiang/pup/releases/download/${VERSION}/${DARWIN_386}' + sha256 '$( sha256sum dist/${DARWIN_386} | awk '{ print $1 }' | xargs printf )' + end + + def install + bin.install 'pup' + end +end +EOF