Compare commits
2 Commits
8342ce2a0c
...
757efb07cc
Author | SHA1 | Date |
---|---|---|
notplants | 757efb07cc | |
notplants | f7e2efedde |
|
@ -0,0 +1,96 @@
|
|||
"""
|
||||
script to cross-compile PeachCloud packages for arm64 and other architectures
|
||||
"""
|
||||
import subprocess
|
||||
|
||||
from peach_package_builder.constants import *
|
||||
from peach_package_builder.build_go_sbot import GO_SBOT_VERSION, GO_SSB_DIR
|
||||
|
||||
# constants
|
||||
PEACHCLOUD_VERSION = "1.0"
|
||||
PROJECT_PATH = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
||||
RUST_WORKSPACE_DIR = WORKSPACE_SRC_DIR
|
||||
BINARIES_DIR = "/srv/files.commoninternet.net/binaries"
|
||||
PEACH_WORKSPACE_GIT_URL = "https://git.coopcloud.tech/PeachCloud/peach-workspace"
|
||||
GO_SBOT_GIT_URL = "https://github.com/cryptoscope/ssb.git"
|
||||
OUTPUT_DIR = "/srv/files.commoninternet.net"
|
||||
|
||||
|
||||
def pull_go_repo():
|
||||
if not os.path.exists(GO_SSB_DIR):
|
||||
subprocess.check_call(["git", "clone", GO_SBOT_GIT_URL, GO_SSB_DIR])
|
||||
else:
|
||||
subprocess.check_call(["git", "pull"], cwd=GO_SSB_DIR)
|
||||
|
||||
|
||||
def crosscompile_go_sbot(architecture, binaries_dir):
|
||||
subprocess.check_call(["git", "pull"], cwd=GO_SSB_DIR)
|
||||
print("[CROSS-COMPILING sbotcli]")
|
||||
subprocess.check_call(["env", "GOOS=linux", "GOARCH={}".format(architecture), "go", "build", "./cmd/sbotcli"], cwd=GO_SSB_DIR)
|
||||
print("[CROSS-COMPILING go-sbot]")
|
||||
subprocess.check_call(["env", "GOOS=linux", "GOARCH={}".format(architecture), "go", "build", "./cmd/go-sbot"], cwd=GO_SSB_DIR)
|
||||
for binary in ["sbotcli", "go-sbot"]:
|
||||
binary_path = os.path.join(GO_SSB_DIR, binary)
|
||||
output_path = os.path.join(binaries_dir, binary)
|
||||
print("[COPYING {} TO {}]".format(binary_path, output_path))
|
||||
subprocess.check_call(["cp", binary_path, output_path])
|
||||
|
||||
|
||||
def build_rust_binary(service_name, binaries_dir, target="aarch64-unknown-linux-gnu"):
|
||||
"""
|
||||
this function builds a specific binary
|
||||
:param service_name: string name of the service
|
||||
:param target: architecture to build for
|
||||
:return:
|
||||
"""
|
||||
print("[ BUILIDING SERVICE {} ]".format(service_name))
|
||||
service_path = os.path.join(RUST_WORKSPACE_DIR, service_name)
|
||||
subprocess.check_output(
|
||||
[
|
||||
CARGO_PATH,
|
||||
"build",
|
||||
"--release",
|
||||
"--target",
|
||||
target],
|
||||
cwd=service_path).decode("utf-8").strip()
|
||||
binary_path = os.path.join(RUST_WORKSPACE_DIR, "target/{}/release/{}".format(target, service_name))
|
||||
output_path = os.path.join(binaries_dir, service_name)
|
||||
print("[ COPYING {} TO {} ]".format(binary_path, output_path))
|
||||
subprocess.call(["cp", binary_path, output_path])
|
||||
|
||||
|
||||
def publish(binaries_dir, architecture):
|
||||
subprocess.check_call(["mkdir", "-p", OUTPUT_DIR])
|
||||
binaries = ["peach-web", "peach-config", "go-sbot", "sbotcli"]
|
||||
output_folder_name = "peachcloud_{}_Linux_{}".format(PEACHCLOUD_VERSION, architecture)
|
||||
output_folder_path = os.path.join(OUTPUT_DIR, output_folder_name)
|
||||
subprocess.check_call(["mkdir", "-p", output_folder_path])
|
||||
for binary in binaries:
|
||||
f_path = os.path.join(binaries_dir, binary)
|
||||
output_path = os.path.join(output_folder_path, binary)
|
||||
subprocess.check_call(["cp", f_path, output_path])
|
||||
# copy static files for peach-web
|
||||
peach_web_static_path = os.path.join(RUST_WORKSPACE_DIR, "peach-web/static")
|
||||
output_static_path = os.path.join(binaries_dir, "static")
|
||||
subprocess.check_call(["cp", "-r", peach_web_static_path, output_static_path])
|
||||
# create a tar
|
||||
tar_path = output_folder_path + ".tar.gz"
|
||||
subprocess.check_call(["tar", "-czvf", tar_path, "-C", binaries_dir, "."], cwd=binaries_dir)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
subprocess.check_call(["mkdir", "-p", OUTPUT_DIR])
|
||||
subprocess.check_call(["mkdir", "-p", BINARIES_DIR])
|
||||
pull_go_repo()
|
||||
architectures = [
|
||||
("aarch64-unknown-linux-gnu", "arm64", "aarch64"),
|
||||
("x86_64-unknown-linux-gnu", "amd64", "amd64"),
|
||||
]
|
||||
for rust_architecture, go_architecture, yunohost_architecture in architectures:
|
||||
print("BUILDING WITH ARCHITECTURE {}, {}, {}".format(rust_architecture, go_architecture, yunohost_architecture))
|
||||
binaries_dir = os.path.join(BINARIES_DIR, yunohost_architecture)
|
||||
subprocess.check_call(["mkdir", "-p", binaries_dir])
|
||||
crosscompile_go_sbot(architecture=go_architecture, binaries_dir=binaries_dir)
|
||||
build_rust_binary("peach-web", target=rust_architecture, binaries_dir=binaries_dir)
|
||||
build_rust_binary("peach-config", target=rust_architecture, binaries_dir=binaries_dir)
|
||||
publish(binaries_dir=binaries_dir, architecture=yunohost_architecture)
|
Loading…
Reference in New Issue