blob: f733f2a1784395f7f9f4f6cf9fedb6cc76d32a56 [file] [log] [blame]
Eric Boren522efc42019-04-16 15:15:21 -04001#!/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):
Eric Boren06a72572019-04-18 08:54:33 -040027 go_exe = None
Eric Boren522efc42019-04-16 15:15:21 -040028 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
Eric Boren46e2d8d2019-12-05 14:29:38 -050042def get(pkg):
43 '''Obtain/update the given package/module via "go get".'''
Eric Boren522efc42019-04-16 15:15:21 -040044 check()
Eric Boren46e2d8d2019-12-05 14:29:38 -050045 subprocess.check_call(['go', 'get', '-u', pkg])
Eric Boren522efc42019-04-16 15:15:21 -040046
47
48def update_infra():
49 '''Update the local checkout of the Skia infra codebase.'''
50 get(INFRA_GO + '/...')
Eric Boren46e2d8d2019-12-05 14:29:38 -050051
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])