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