1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #!/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/'])
|