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