Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
signalapp
GitHub Repository: signalapp/Signal-iOS
Path: blob/main/Scripts/tag_template.py
1 views
1
#!/usr/bin/env python3
2
3
import plistlib
4
5
TEMPLATE_PATH = "ci_scripts/tag_template.txt"
6
FEATURE_FLAG_LEVEL_PATH = "ci_scripts/feature_flag_level.txt"
7
INFO_PLIST = "Signal/Signal-Info.plist"
8
9
10
def write_level(level):
11
return write_if_different(FEATURE_FLAG_LEVEL_PATH, level)
12
13
14
def write_template():
15
(major, minor, patch) = get_current_marketing_version()
16
tag_suffix = get_tag_suffix(get_current_feature_flag_level())
17
tag_template = f"{major}.{minor}.{patch}.{{build_number}}{tag_suffix}"
18
return write_if_different(TEMPLATE_PATH, tag_template)
19
20
21
def get_current_marketing_version():
22
with open(INFO_PLIST, "rb") as file:
23
return extract_marketing_version(plistlib.load(file))
24
25
26
def extract_marketing_version(contents):
27
return parse_version(contents["CFBundleShortVersionString"])
28
29
30
def parse_version(value):
31
components = list(map(int, value.split(".")))
32
while len(components) < 3:
33
components.append(0)
34
major, minor, patch = tuple(components)
35
return (major, minor, patch)
36
37
38
def get_current_feature_flag_level():
39
with open(FEATURE_FLAG_LEVEL_PATH, "r") as file:
40
return file.read()
41
42
43
def get_tag_suffix(level):
44
if level == "production":
45
return ""
46
return f"-{level}"
47
48
49
def write_if_different(file_path, new_value):
50
with open(file_path, "r") as file:
51
old_value = file.read()
52
if new_value != old_value:
53
with open(file_path, "w") as file:
54
file.write(new_value)
55
return [file_path]
56
return []
57
58