29e90cc13b
This focuses on Windows first, but coudl be used for Mac and possibly linux in the future.
76 lines
2.5 KiB
Python
Executable file
76 lines
2.5 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
import subprocess
|
|
import sys
|
|
from urllib.parse import urlparse
|
|
from git import Repo
|
|
|
|
# Helper script to be able to build on remote repos using git to push local changes
|
|
# (e.g. particularly helpful to target a remote windows build system)
|
|
#
|
|
# Typical windows remote git config looks like this:
|
|
#
|
|
#[remote "windows-pa"]
|
|
# url = jdoe@desktop-foo:C:/Users/Jdoe/code/ollama
|
|
# fetch = +refs/heads/*:refs/remotes/windows-pa/*
|
|
# uploadpack = powershell git upload-pack
|
|
# receivepack = powershell git receive-pack
|
|
#
|
|
|
|
# TODO - add argpare and make this more configurable
|
|
# - force flag becomes optional
|
|
# - generate, build or test ...
|
|
|
|
# Note: remote repo will need this run once:
|
|
# git config --local receive.denyCurrentBranch updateInstead
|
|
repo = Repo(".")
|
|
|
|
# On linux, add links in /usr/local/bin to the go binaries to avoid needing this
|
|
# GoCmd = "/usr/local/go/bin/go"
|
|
GoCmd = "go"
|
|
|
|
if repo.is_dirty():
|
|
print("Tree is dirty. Commit your changes before running this script")
|
|
sys.exit(1)
|
|
|
|
if len(sys.argv) != 2:
|
|
print("Please specify the remote name: " + ', '.join([r.name for r in repo.remotes]))
|
|
sys.exit(1)
|
|
remote_name = sys.argv[1]
|
|
|
|
remote = {r.name: r for r in repo.remotes}[remote_name]
|
|
raw_url = list(remote.urls)[0]
|
|
url = urlparse(raw_url)
|
|
# Windows urls don't quite parse properly
|
|
if url.scheme == "" and url.netloc == "":
|
|
url = urlparse("ssh://" + raw_url)
|
|
print("URL: " + str(url))
|
|
netloc = url.netloc.split(":")[0]
|
|
path = url.path
|
|
branch_name = repo.active_branch.name
|
|
|
|
print("Force pushing content to remote...")
|
|
# Use with care given the force push
|
|
remote.push(force=True).raise_if_error()
|
|
|
|
print("Ensuring correct branch checked out on remote via ssh...")
|
|
subprocess.check_call(['ssh', netloc, 'cd', path, ';', 'git', 'checkout', branch_name])
|
|
|
|
|
|
# TODO - add some hardening to try to figure out how to set up the path properly
|
|
# subprocess.check_call(['ssh', netloc, 'cd', path, ';', 'env'])
|
|
# TODO - or consider paramiko maybe
|
|
|
|
print("Running Windows Build Script")
|
|
subprocess.check_call(['ssh', netloc, 'cd', path, ';', "powershell", "-ExecutionPolicy", "Bypass", "-File", "./scripts/build_windows.ps1"])
|
|
|
|
# print("Building")
|
|
# subprocess.check_call(['ssh', netloc, 'cd', path, ';', GoCmd, 'build', '.'])
|
|
|
|
print("Copying built result")
|
|
subprocess.check_call(['scp', netloc +":"+ path + "/ollama.exe", './dist/'])
|
|
|
|
print("Copying installer")
|
|
subprocess.check_call(['scp', netloc +":"+ path + "/dist/Ollama Setup.exe", './dist/'])
|
|
|
|
|
|
|