1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
import argparse
import re
import os
import subprocess
import sys
def run_cargo_build(path):
print(f"cargo build, path: {path}")
command = f'cargo build'
return subprocess.check_output(command, shell=True, cwd=path)
def run_cargo_update(path, dep):
print(f"cargo update, dep: {dep}")
command = f'cargo update --package {dep}'
return subprocess.check_output(command, shell=True, cwd=path)
def git_toml_deps(toml_path, deps_repo_links, deps_branches):
lines = None
with open(toml_path, 'r') as f:
lines = f.readlines()
to_update = []
output_lines = lines + ['[patch.crates-io]\n']
for line in lines:
for dep in deps_repo_links.keys():
starter = dep + " ="
if line.startswith(starter):
to_update.append(dep)
new_line = f'git = "{deps_repo_links[dep]}", branch = "{deps_branches[dep]}"'
new_line = starter + ' { ' + new_line + ' }\n'
output_lines.append(new_line)
for updatable in to_update:
run_cargo_update(os.path.dirname(toml_path), updatable)
with open(toml_path, 'w') as f:
f.writelines(output_lines)
git_cmd = 'git diff'
print(subprocess.check_output(git_cmd,
shell=True,
cwd=os.path.dirname(toml_path)).decode('utf-8'))
def main(argv=[], prog_name=''):
parser = argparse.ArgumentParser(prog='ReleaseTracker',
description='Modifies the parsec Cargo.toml files to use the '
'main branches of parallaxsecond dependencies in '
'preparation for their publishing and release')
parser.add_argument('paths', nargs='+', help='Absolute paths to the Cargo.toml files')
args = parser.parse_args()
# The order is important!
parallaxsecond_deps = {
'psa-crypto-sys': 'rust-psa-crypto',
'psa-crypto': 'rust-psa-crypto',
'tss-esapi-sys': 'rust-tss-esapi',
'tss-esapi': 'rust-tss-esapi',
'cryptoki-sys': 'rust-cryptoki',
'cryptoki': 'rust-cryptoki',
'parsec-interface': 'parsec-interface-rs',
'parsec-client': 'parsec-client-rust',
}
repo_links = { repo_name: f"https://github.com/parallaxsecond/{repo_folder}.git" \
for repo_name, repo_folder in parallaxsecond_deps.items() }
repo_branches = { repo_name: 'main' for repo_name in parallaxsecond_deps.keys() }
repo_branches['tss-esapi-sys'] = '7.x.y'
repo_branches['tss-esapi'] = '7.x.y'
for path in args.paths:
git_toml_deps(path, repo_links, repo_branches)
run_cargo_build(os.path.dirname(path))
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv[1:], sys.argv[0]))
|