mirror of
https://github.com/gregtwallace/apc-p15-tool.git
synced 2025-07-04 23:36:33 +00:00
89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
import os.path
|
|
import shutil
|
|
import subprocess
|
|
import tarfile
|
|
|
|
# Configuration
|
|
# output path (relative to this script)
|
|
outRelativeDir = "_out"
|
|
|
|
# target strings must be in the format:
|
|
# `GOOS_GOARCH`
|
|
# see: https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go
|
|
# or unofficially: https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63
|
|
targets = [
|
|
"windows_amd64",
|
|
"linux_amd64",
|
|
"linux_arm64",
|
|
"darwin_amd64",
|
|
"darwin_arm64",
|
|
"freebsd_amd64",
|
|
"freebsd_arm64",
|
|
]
|
|
|
|
###
|
|
|
|
# Script
|
|
# relative dir is root
|
|
scriptDir = dirname = os.path.dirname(__file__)
|
|
outBaseDir = os.path.join(scriptDir, outRelativeDir)
|
|
releaseDir = os.path.join(outBaseDir, "_release")
|
|
|
|
# recreate paths
|
|
if os.path.exists(outBaseDir):
|
|
shutil.rmtree(outBaseDir)
|
|
os.makedirs(outBaseDir)
|
|
os.makedirs(releaseDir)
|
|
|
|
# get version number / tag
|
|
gitTag = subprocess.check_output(["git", "describe", "--tags", "--abbrev=0"]).decode('utf-8').strip()
|
|
|
|
# loop through and build all targets
|
|
for target in targets:
|
|
# environment vars
|
|
split = target.split("_")
|
|
GOOS = split[0]
|
|
GOARCH = split[1]
|
|
os.environ["GOOS"] = GOOS
|
|
os.environ["GOARCH"] = GOARCH
|
|
os.environ["CGO_ENABLED"] = "0"
|
|
|
|
# send build product to GOOS_GOARCH subfolders
|
|
targetOutDir = os.path.join(outBaseDir, target)
|
|
if not os.path.exists(targetOutDir):
|
|
os.makedirs(targetOutDir)
|
|
|
|
# special case for windows to add file extensions
|
|
extension = ""
|
|
if GOOS.lower() == "windows":
|
|
extension = ".exe"
|
|
|
|
# build binary and install only binary
|
|
subprocess.run(["go", "build", "-o", f"{targetOutDir}/apc-p15-tool{extension}", "./cmd/tool"])
|
|
subprocess.run(["go", "build", "-o", f"{targetOutDir}/apc-p15-install{extension}", "./cmd/install_only"])
|
|
|
|
# copy other important files for release
|
|
shutil.copy("README.md", targetOutDir)
|
|
shutil.copy("CHANGELOG.md", targetOutDir)
|
|
shutil.copy("LICENSE.md", targetOutDir)
|
|
|
|
# compress release file
|
|
# special case for windows & mac to use zip format
|
|
if GOOS.lower() == "windows" or GOOS.lower() == "darwin":
|
|
shutil.make_archive(f"{releaseDir}/apc-p15-tool-{gitTag}_{target}", "zip", targetOutDir)
|
|
else:
|
|
# for others, use gztar and set permissions on the files
|
|
|
|
# filter for setting permissions
|
|
def set_permissions(tarinfo):
|
|
if tarinfo.name == "apc-p15-tool" or tarinfo.name == "apc-p15-install":
|
|
tarinfo.mode = 0o0755
|
|
else:
|
|
tarinfo.mode = 0o0644
|
|
return tarinfo
|
|
|
|
# make tar
|
|
with tarfile.open(f"{releaseDir}/apc-p15-tool-{gitTag}_{target}.tar.gz", "w:gz") as tar:
|
|
for file in os.listdir(targetOutDir):
|
|
tar.add(os.path.join(targetOutDir, file), arcname=file, recursive=False, filter=set_permissions)
|