xref: /aosp_15_r20/external/skia/tools/infra/go.py (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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