1*c8dee2aaSAndroid Build Coastguard Worker#!/usr/bin/env python 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2019 Google Inc. 4*c8dee2aaSAndroid Build Coastguard Worker# 5*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 6*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Workerimport os 10*c8dee2aaSAndroid Build Coastguard Workerimport subprocess 11*c8dee2aaSAndroid Build Coastguard Workerimport sys 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard WorkerINFRA_GO = 'go.skia.org/infra' 15*c8dee2aaSAndroid Build Coastguard WorkerWHICH = 'where' if sys.platform == 'win32' else 'which' 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Workerdef check(): 19*c8dee2aaSAndroid Build Coastguard Worker '''Verify that golang is properly installed. If not, exit with an error.''' 20*c8dee2aaSAndroid Build Coastguard Worker def _fail(msg): 21*c8dee2aaSAndroid Build Coastguard Worker print >> sys.stderr, msg 22*c8dee2aaSAndroid Build Coastguard Worker sys.exit(1) 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker try: 25*c8dee2aaSAndroid Build Coastguard Worker go_exe = subprocess.check_output([WHICH, 'go']) 26*c8dee2aaSAndroid Build Coastguard Worker except (subprocess.CalledProcessError, OSError): 27*c8dee2aaSAndroid Build Coastguard Worker go_exe = None 28*c8dee2aaSAndroid Build Coastguard Worker if not go_exe: 29*c8dee2aaSAndroid Build Coastguard Worker _fail('Unable to find Golang installation; see ' 30*c8dee2aaSAndroid Build Coastguard Worker 'https://golang.org/doc/install') 31*c8dee2aaSAndroid Build Coastguard Worker if not os.environ.get('GOPATH'): 32*c8dee2aaSAndroid Build Coastguard Worker _fail('GOPATH environment variable is not set; is Golang properly ' 33*c8dee2aaSAndroid Build Coastguard Worker 'installed?') 34*c8dee2aaSAndroid Build Coastguard Worker go_bin = os.path.join(os.environ['GOPATH'], 'bin') 35*c8dee2aaSAndroid Build Coastguard Worker for entry in os.environ.get('PATH', '').split(os.pathsep): 36*c8dee2aaSAndroid Build Coastguard Worker if entry == go_bin: 37*c8dee2aaSAndroid Build Coastguard Worker break 38*c8dee2aaSAndroid Build Coastguard Worker else: 39*c8dee2aaSAndroid Build Coastguard Worker _fail('%s not in PATH; is Golang properly installed?' % go_bin) 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Workerdef get(pkg): 43*c8dee2aaSAndroid Build Coastguard Worker '''Obtain/update the given package/module via "go get".''' 44*c8dee2aaSAndroid Build Coastguard Worker check() 45*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['go', 'get', '-u', pkg]) 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Workerdef update_infra(): 49*c8dee2aaSAndroid Build Coastguard Worker '''Update the local checkout of the Skia infra codebase.''' 50*c8dee2aaSAndroid Build Coastguard Worker get(INFRA_GO + '/...') 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Workerdef mod_download(*pkgs): 54*c8dee2aaSAndroid Build Coastguard Worker '''Run "go mod download" to obtain the given package(s).''' 55*c8dee2aaSAndroid Build Coastguard Worker check() 56*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['go', 'mod', 'download']+list(pkgs)) 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Workerdef install(pkg): 60*c8dee2aaSAndroid Build Coastguard Worker '''"go install" the given package.''' 61*c8dee2aaSAndroid Build Coastguard Worker check() 62*c8dee2aaSAndroid Build Coastguard Worker subprocess.check_call(['go', 'install', pkg]) 63