File: release_tracking.py

package info (click to toggle)
rust-parsec-service 1.4.1-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,332 kB
  • sloc: sh: 507; python: 166; makefile: 6
file content (82 lines) | stat: -rw-r--r-- 2,863 bytes parent folder | download | duplicates (2)
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]))