| #!/usr/bin/env python |
| # |
| # Copyright 2020 Google LLC. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| |
| """Create the asset.""" |
| |
| |
| import argparse |
| import subprocess |
| import os |
| import shutil |
| |
| |
| REPO_URL = "https://github.com/vektra/mockery.git" |
| REPO_DIR = "mockery_repo" |
| BINARY_NAME = "mockery" |
| |
| |
| def create_asset(target_dir): |
| """Create the asset.""" |
| os.chdir(target_dir) |
| |
| # We build mockery 2.4.0 from source to fix an issue with Go 1.18. Read the |
| # comments below for details. |
| output = subprocess.check_output(["git", "clone", REPO_URL, REPO_DIR]) |
| print(output) |
| os.chdir(os.path.join(target_dir, REPO_DIR)) |
| output = subprocess.check_output(["git", "checkout", "v2.4.0"]) |
| |
| # Under Go 1.18, mockery v2.4.0 through v2.10.0 fails with errors such as: |
| # |
| # internal error: package "fmt" without types was imported from ... |
| # |
| # This can be fixed by updating golang.org/x/tools to a more recent version. |
| # For more details, please see https://github.com/vektra/mockery/issues/434 |
| # and https://github.com/golang/go/issues/49608. |
| output = subprocess.check_output(["go", "get", "golang.org/x/tools@v0.1.10"]) |
| print(output) |
| output = subprocess.check_output(["go", "mod", "tidy"]) |
| print(output) |
| |
| # Build mockery with the same flags as in release builds. |
| # |
| # If we don't specify a SemVer value, mockery will generate files with a |
| # "Code generated by mockery v0.0.0-dev. DO NOT EDIT." comment at the top, |
| # which causes diffs due to the changed version. Thus, it is important to set |
| # the SemVer value to the correct version. |
| # |
| # See |
| # https://github.com/vektra/mockery/blob/271c74610ef710a4c30e19a42733796c50e7ea3f/.goreleaser.yml#L9. |
| ldflags = "-s -w -X github.com/vektra/mockery/v2/pkg/config.SemVer=2.4.0" |
| build_command = ["go", "build", "-ldflags=\"%s\"" % ldflags] |
| print("Building with command:", build_command) |
| output = subprocess.check_output(["go", "build", "-ldflags=" + ldflags]) |
| print(output) |
| |
| # Copy binary outside of the cloned repository directory and clean up. |
| output = subprocess.check_output(["cp", BINARY_NAME, ".."]) |
| shutil.copy(os.path.join(target_dir, REPO_DIR, BINARY_NAME), target_dir) |
| shutil.rmtree(os.path.join(target_dir, REPO_DIR)) |
| os.chdir(target_dir) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--target_dir', '-t', required=True) |
| args = parser.parse_args() |
| create_asset(args.target_dir) |
| |
| |
| if __name__ == '__main__': |
| main() |