1*c8dee2aaSAndroid Build Coastguard Worker#!/usr/bin/env python 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2020 Google LLC. 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 Worker"""Create the asset.""" 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Workerimport argparse 13*c8dee2aaSAndroid Build Coastguard Workerimport subprocess 14*c8dee2aaSAndroid Build Coastguard Workerimport os 15*c8dee2aaSAndroid Build Coastguard Workerimport shutil 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard WorkerREPO_URL = "https://github.com/vektra/mockery.git" 19*c8dee2aaSAndroid Build Coastguard WorkerREPO_DIR = "mockery_repo" 20*c8dee2aaSAndroid Build Coastguard WorkerBINARY_NAME = "mockery" 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Workerdef create_asset(target_dir): 24*c8dee2aaSAndroid Build Coastguard Worker """Create the asset.""" 25*c8dee2aaSAndroid Build Coastguard Worker os.chdir(target_dir) 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker # We build mockery 2.4.0 from source to fix an issue with Go 1.18. Read the 28*c8dee2aaSAndroid Build Coastguard Worker # comments below for details. 29*c8dee2aaSAndroid Build Coastguard Worker output = subprocess.check_output(["git", "clone", REPO_URL, REPO_DIR]) 30*c8dee2aaSAndroid Build Coastguard Worker print(output) 31*c8dee2aaSAndroid Build Coastguard Worker os.chdir(os.path.join(target_dir, REPO_DIR)) 32*c8dee2aaSAndroid Build Coastguard Worker output = subprocess.check_output(["git", "checkout", "v2.4.0"]) 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker # Under Go 1.18, mockery v2.4.0 through v2.10.0 fails with errors such as: 35*c8dee2aaSAndroid Build Coastguard Worker # 36*c8dee2aaSAndroid Build Coastguard Worker # internal error: package "fmt" without types was imported from ... 37*c8dee2aaSAndroid Build Coastguard Worker # 38*c8dee2aaSAndroid Build Coastguard Worker # This can be fixed by updating golang.org/x/tools to a more recent version. 39*c8dee2aaSAndroid Build Coastguard Worker # For more details, please see https://github.com/vektra/mockery/issues/434 40*c8dee2aaSAndroid Build Coastguard Worker # and https://github.com/golang/go/issues/49608. 41*c8dee2aaSAndroid Build Coastguard Worker output = subprocess.check_output(["go", "get", "golang.org/x/tools@v0.1.10"]) 42*c8dee2aaSAndroid Build Coastguard Worker print(output) 43*c8dee2aaSAndroid Build Coastguard Worker output = subprocess.check_output(["go", "mod", "tidy"]) 44*c8dee2aaSAndroid Build Coastguard Worker print(output) 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker # Build mockery with the same flags as in release builds. 47*c8dee2aaSAndroid Build Coastguard Worker # 48*c8dee2aaSAndroid Build Coastguard Worker # If we don't specify a SemVer value, mockery will generate files with a 49*c8dee2aaSAndroid Build Coastguard Worker # "Code generated by mockery v0.0.0-dev. DO NOT EDIT." comment at the top, 50*c8dee2aaSAndroid Build Coastguard Worker # which causes diffs due to the changed version. Thus, it is important to set 51*c8dee2aaSAndroid Build Coastguard Worker # the SemVer value to the correct version. 52*c8dee2aaSAndroid Build Coastguard Worker # 53*c8dee2aaSAndroid Build Coastguard Worker # See 54*c8dee2aaSAndroid Build Coastguard Worker # https://github.com/vektra/mockery/blob/271c74610ef710a4c30e19a42733796c50e7ea3f/.goreleaser.yml#L9. 55*c8dee2aaSAndroid Build Coastguard Worker ldflags = "-s -w -X github.com/vektra/mockery/v2/pkg/config.SemVer=2.4.0" 56*c8dee2aaSAndroid Build Coastguard Worker build_command = ["go", "build", "-ldflags=\"%s\"" % ldflags] 57*c8dee2aaSAndroid Build Coastguard Worker print("Building with command:", build_command) 58*c8dee2aaSAndroid Build Coastguard Worker output = subprocess.check_output(["go", "build", "-ldflags=" + ldflags]) 59*c8dee2aaSAndroid Build Coastguard Worker print(output) 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker # Copy binary outside of the cloned repository directory and clean up. 62*c8dee2aaSAndroid Build Coastguard Worker output = subprocess.check_output(["cp", BINARY_NAME, ".."]) 63*c8dee2aaSAndroid Build Coastguard Worker shutil.copy(os.path.join(target_dir, REPO_DIR, BINARY_NAME), target_dir) 64*c8dee2aaSAndroid Build Coastguard Worker shutil.rmtree(os.path.join(target_dir, REPO_DIR)) 65*c8dee2aaSAndroid Build Coastguard Worker os.chdir(target_dir) 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Workerdef main(): 69*c8dee2aaSAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 70*c8dee2aaSAndroid Build Coastguard Worker parser.add_argument('--target_dir', '-t', required=True) 71*c8dee2aaSAndroid Build Coastguard Worker args = parser.parse_args() 72*c8dee2aaSAndroid Build Coastguard Worker create_asset(args.target_dir) 73*c8dee2aaSAndroid Build Coastguard Worker 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Workerif __name__ == '__main__': 76*c8dee2aaSAndroid Build Coastguard Worker main() 77