@ -5,6 +5,9 @@ import os
import subprocess
import sys
gsigs = ' https://github.com/monero-project/gitian.sigs.git '
gbrepo = ' https://github.com/devrandom/gitian-builder.git '
def setup ( ) :
global args , workdir
programs = [ ' apt-cacher-ng ' , ' ruby ' , ' git ' , ' make ' , ' wget ' ]
@ -14,14 +17,21 @@ def setup():
programs + = [ ' lxc ' , ' debootstrap ' ]
if not args . no_apt :
subprocess . check_call ( [ ' sudo ' , ' apt-get ' , ' install ' , ' -qq ' ] + programs )
if not os . path . isdir ( ' gitian. sigs' ) :
subprocess . check_call ( [ ' git ' , ' clone ' , ' https://github.com/monero-project/gitian. sigs.git ' ] )
if not os . path . isdir ( ' gitian- builder' ) :
subprocess . check_call ( [ ' git ' , ' clone ' , ' https://github.com/devrandom/gitian- builder.git ' ] )
if not os . path . isdir ( ' monero ' ) :
subprocess . check_call ( [ ' git ' , ' c lone' , ' https://github.com/monero-project/monero.gi t' ] )
os. chdir ( ' gitian-builder ' )
if not os . path . isdir ( ' sigs' ) :
subprocess . check_call ( [ ' git ' , ' clone ' , gsigs , ' sigs' ] )
if not os . path . isdir ( ' builder' ) :
subprocess . check_call ( [ ' git ' , ' clone ' , gbrepo , ' builder' ] )
os . chdir ( ' builder ' )
subprocess . check_call ( [ ' git ' , ' c onfig' , ' user.email ' , ' gitianuser@localhos t' ] )
subprocess. check_call ( [ ' git ' , ' config ' , ' user.name ' , ' gitianuser ' ] )
subprocess . check_call ( [ ' git ' , ' checkout ' , ' 963322de8420c50502c4cc33d4d7c0d84437b576 ' ] )
subprocess . check_call ( [ ' git ' , ' fetch ' , ' origin ' , ' 72c51f0bd2adec4eedab4dbd06c9229b9c4eb0e3 ' ] )
subprocess . check_call ( [ ' git ' , ' cherry-pick ' , ' 72c51f0bd2adec4eedab4dbd06c9229b9c4eb0e3 ' ] )
os . makedirs ( ' inputs ' , exist_ok = True )
os . chdir ( ' inputs ' )
if not os . path . isdir ( ' monero ' ) :
subprocess . check_call ( [ ' git ' , ' clone ' , args . url , ' monero ' ] )
os . chdir ( ' .. ' )
make_image_prog = [ ' bin/make-base-vm ' , ' --suite ' , ' bionic ' , ' --arch ' , ' amd64 ' ]
if args . docker :
if not subprocess . call ( [ ' docker ' , ' --help ' ] , shell = False , stdout = subprocess . DEVNULL ) :
@ -39,40 +49,40 @@ def setup():
def build ( ) :
global args , workdir
os . makedirs ( ' monero-binaries /' + args . version , exist_ok = True )
os . makedirs ( ' out /' + args . version , exist_ok = True )
print ( ' \n Building Dependencies \n ' )
os . chdir ( ' gitian- builder' )
os . chdir ( ' builder' )
os . makedirs ( ' inputs ' , exist_ok = True )
subprocess . check_call ( [ ' wget ' , ' -N ' , ' -P ' , ' inputs ' , ' https://downloads.sourceforge.net/project/osslsigncode/osslsigncode/osslsigncode-1.7.1.tar.gz ' ] )
subprocess . check_call ( [ ' wget ' , ' -N ' , ' -P ' , ' inputs ' , ' https://bitcoincore.org/cfields/osslsigncode-Backports-to-1.7.1.patch ' ] )
subprocess . check_output ( [ " echo ' a8c4e9cafba922f89de0df1f2152e7be286aba73f78505169bc351a7938dd911 inputs/osslsigncode-Backports-to-1.7.1.patch ' | sha256sum -c " ] , shell = True )
subprocess . check_output ( [ " echo ' f9a8cdb38b9c309326764ebc937cba1523a3a751a7ab05df3ecc99d18ae466c9 inputs/osslsigncode-1.7.1.tar.gz ' | sha256sum -c " ] , shell = True )
subprocess . check_call ( [ ' make ' , ' -C ' , ' .. /monero/contrib/depends' , ' download ' , ' SOURCES_PATH= ' + os . getcwd ( ) + ' /cache/common ' ] )
subprocess . check_call ( [ ' make ' , ' -C ' , ' inputs /monero/contrib/depends' , ' download ' , ' SOURCES_PATH= ' + os . getcwd ( ) + ' /cache/common ' ] )
if args . linux :
print ( ' \n Compiling ' + args . version + ' Linux ' )
subprocess . check_call ( [ ' bin/gbuild ' , ' -j ' , args . jobs , ' -m ' , args . memory , ' --commit ' , ' monero= ' + args . commit , ' --url ' , ' monero= ' + args . url , ' .. /monero/contrib/gitian/gitian-linux.yml' ] )
subprocess . check_call ( [ ' bin/gsign ' , ' -p ' , args . sign_prog , ' --signer ' , args . signer , ' --release ' , args . version + ' -linux ' , ' --destination ' , ' ../ gitian. sigs/' , ' .. /monero/contrib/gitian/gitian-linux.yml' ] )
subprocess . check_call ( ' mv build/out/monero-*.tar.bz2 ../ monero-binaries /' + args . version , shell = True )
subprocess . check_call ( [ ' bin/gbuild ' , ' -j ' , args . jobs , ' -m ' , args . memory , ' --commit ' , ' monero= ' + args . commit , ' --url ' , ' monero= ' + args . url , ' inputs /monero/contrib/gitian/gitian-linux.yml' ] )
subprocess . check_call ( [ ' bin/gsign ' , ' -p ' , args . sign_prog , ' --signer ' , args . signer , ' --release ' , args . version + ' -linux ' , ' --destination ' , ' ../ sigs/' , ' inputs /monero/contrib/gitian/gitian-linux.yml' ] )
subprocess . check_call ( ' mv build/out/monero-*.tar.bz2 ../ out /' + args . version , shell = True )
if args . windows :
print ( ' \n Compiling ' + args . version + ' Windows ' )
subprocess . check_call ( [ ' bin/gbuild ' , ' -j ' , args . jobs , ' -m ' , args . memory , ' --commit ' , ' monero= ' + args . commit , ' --url ' , ' monero= ' + args . url , ' .. /monero/contrib/gitian/gitian-win.yml' ] )
subprocess . check_call ( [ ' bin/gsign ' , ' -p ' , args . sign_prog , ' --signer ' , args . signer , ' --release ' , args . version + ' -win ' , ' --destination ' , ' ../ gitian. sigs/' , ' .. /monero/contrib/gitian/gitian-win.yml' ] )
subprocess . check_call ( ' mv build/out/monero*.zip ../ monero-binaries /' + args . version , shell = True )
subprocess . check_call ( [ ' bin/gbuild ' , ' -j ' , args . jobs , ' -m ' , args . memory , ' --commit ' , ' monero= ' + args . commit , ' --url ' , ' monero= ' + args . url , ' inputs /monero/contrib/gitian/gitian-win.yml' ] )
subprocess . check_call ( [ ' bin/gsign ' , ' -p ' , args . sign_prog , ' --signer ' , args . signer , ' --release ' , args . version + ' -win ' , ' --destination ' , ' ../ sigs/' , ' inputs /monero/contrib/gitian/gitian-win.yml' ] )
subprocess . check_call ( ' mv build/out/monero*.zip ../ out /' + args . version , shell = True )
if args . macos :
print ( ' \n Compiling ' + args . version + ' MacOS ' )
subprocess . check_call ( [ ' bin/gbuild ' , ' -j ' , args . jobs , ' -m ' , args . memory , ' --commit ' , ' monero= ' + args . commit , ' --url ' , ' monero = ' + args . url , ' .. /monero/contrib/gitian/gitian-osx.yml' ] )
subprocess . check_call ( [ ' bin/gsign ' , ' -p ' , args . sign_prog , ' --signer ' , args . signer , ' --release ' , args . version + ' -osx ' , ' --destination ' , ' ../ gitian. sigs/' , ' .. /monero/contrib/gitian/gitian-osx.yml' ] )
subprocess . check_call ( ' mv build/out/monero*.tar.bz2 ../ monero-binaries /' + args . version , shell = True )
subprocess . check_call ( [ ' bin/gbuild ' , ' -j ' , args . jobs , ' -m ' , args . memory , ' --commit ' , ' monero= ' + args . commit , ' --url ' , ' monero ' + args . url , ' inputs /monero/contrib/gitian/gitian-osx.yml' ] )
subprocess . check_call ( [ ' bin/gsign ' , ' -p ' , args . sign_prog , ' --signer ' , args . signer , ' --release ' , args . version + ' -osx ' , ' --destination ' , ' ../ sigs/' , ' inputs /monero/contrib/gitian/gitian-osx.yml' ] )
subprocess . check_call ( ' mv build/out/monero*.tar.bz2 ../ out /' + args . version , shell = True )
os . chdir ( workdir )
if args . commit_files :
print ( ' \n Committing ' + args . version + ' Unsigned Sigs \n ' )
os . chdir ( ' gitian. sigs' )
os . chdir ( ' sigs' )
subprocess . check_call ( [ ' git ' , ' add ' , args . version + ' -linux/ ' + args . signer ] )
subprocess . check_call ( [ ' git ' , ' add ' , args . version + ' -win/ ' + args . signer ] )
subprocess . check_call ( [ ' git ' , ' add ' , args . version + ' -osx/ ' + args . signer ] )
@ -81,14 +91,14 @@ def build():
def verify ( ) :
global args , workdir
os . chdir ( ' gitian- builder' )
os . chdir ( ' builder' )
print ( ' \n Verifying v ' + args . version + ' Linux \n ' )
subprocess . check_call ( [ ' bin/gverify ' , ' -v ' , ' -d ' , ' ../ gitian. sigs/' , ' -r ' , args . version + ' -linux ' , ' .. /monero/contrib/gitian/gitian-linux.yml' ] )
subprocess . check_call ( [ ' bin/gverify ' , ' -v ' , ' -d ' , ' ../ sigs/' , ' -r ' , args . version + ' -linux ' , ' inputs /monero/contrib/gitian/gitian-linux.yml' ] )
print ( ' \n Verifying v ' + args . version + ' Windows \n ' )
subprocess . check_call ( [ ' bin/gverify ' , ' -v ' , ' -d ' , ' ../ gitian. sigs/' , ' -r ' , args . version + ' -win ' , ' .. /monero/contrib/gitian/gitian-win.yml' ] )
subprocess . check_call ( [ ' bin/gverify ' , ' -v ' , ' -d ' , ' ../ sigs/' , ' -r ' , args . version + ' -win ' , ' inputs /monero/contrib/gitian/gitian-win.yml' ] )
print ( ' \n Verifying v ' + args . version + ' MacOS \n ' )
subprocess . check_call ( [ ' bin/gverify ' , ' -v ' , ' -d ' , ' ../ gitian. sigs/' , ' -r ' , args . version + ' -osx ' , ' .. /monero/contrib/gitian/gitian-osx.yml' ] )
subprocess . check_call ( [ ' bin/gverify ' , ' -v ' , ' -d ' , ' ../ sigs/' , ' -r ' , args . version + ' -osx ' , ' inputs /monero/contrib/gitian/gitian-osx.yml' ] )
os . chdir ( workdir )
def main ( ) :
@ -142,7 +152,7 @@ def main():
os . environ [ ' LXC_GUEST_IP ' ] = ' 10.0.3.5 '
# Disable MacOS build if no SDK found
if args . build and args . macos and not os . path . isfile ( ' gitian- builder/inputs/MacOSX10.11.sdk.tar.gz' ) :
if args . build and args . macos and not os . path . isfile ( ' builder/inputs/MacOSX10.11.sdk.tar.gz' ) :
print ( ' Cannot build for MacOS, SDK does not exist. Will build for other OSes ' )
args . macos = False
@ -165,10 +175,9 @@ def main():
if args . setup :
setup ( )
os . chdir ( ' monero ' )
os . makedirs ( ' builder/inputs/monero ' , exist_ok = True )
os . chdir ( ' builder/inputs/monero ' )
if args . pull :
subprocess . check_call ( [ ' git ' , ' fetch ' , args . url , ' refs/pull/ ' + args . version + ' /merge ' ] )
os . chdir ( ' ../gitian-builder/inputs/monero ' )
subprocess . check_call ( [ ' git ' , ' fetch ' , args . url , ' refs/pull/ ' + args . version + ' /merge ' ] )
args . commit = subprocess . check_output ( [ ' git ' , ' show ' , ' -s ' , ' --format= % H ' , ' FETCH_HEAD ' ] , universal_newlines = True ) . strip ( )
args . version = ' pull- ' + args . version