mirror of
https://github.com/signalapp/Signal-iOS.git
synced 2025-12-05 01:10:41 +00:00
Add tag & feature flag support files for CI
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
import argparse
|
||||
import plistlib
|
||||
import subprocess
|
||||
import tag_template
|
||||
|
||||
INFO_PLIST_PATHS = [
|
||||
"Signal/Signal-Info.plist",
|
||||
@@ -77,7 +78,10 @@ if __name__ == "__main__":
|
||||
for path in INFO_PLIST_PATHS:
|
||||
set_version(path, version)
|
||||
|
||||
run(["git", "add", *INFO_PLIST_PATHS])
|
||||
changed_paths = []
|
||||
changed_paths.extend(tag_template.write_template())
|
||||
|
||||
run(["git", "add", *INFO_PLIST_PATHS, *changed_paths])
|
||||
run(["git", "commit", "-m", f"Bump version to {version.pretty()}"])
|
||||
if version.patch == 0:
|
||||
run(["git", "tag", f"version-{version.pretty2()}"])
|
||||
|
||||
@@ -4,6 +4,7 @@ import sys
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import tag_template
|
||||
|
||||
FILE_PATH = "SignalServiceKit/Util/FeatureFlags+Generated.swift"
|
||||
|
||||
@@ -44,15 +45,15 @@ def set_feature_flags(new_flags_level):
|
||||
exit(1)
|
||||
|
||||
new_value = generate(new_flags_level)
|
||||
with open(FILE_PATH, "r") as file:
|
||||
old_value = file.read()
|
||||
|
||||
if new_value == old_value:
|
||||
changed_paths = []
|
||||
changed_paths.extend(tag_template.write_if_different(FILE_PATH, new_value))
|
||||
changed_paths.extend(tag_template.write_level(new_flags_level))
|
||||
changed_paths.extend(tag_template.write_template())
|
||||
|
||||
if len(changed_paths) == 0:
|
||||
print(f"Feature flags already set to {new_flags_level}; nothing to do")
|
||||
exit(0)
|
||||
|
||||
with open(FILE_PATH, "w") as file:
|
||||
file.write(new_value)
|
||||
|
||||
run(["git", "add", FILE_PATH])
|
||||
run(["git", "add", *changed_paths])
|
||||
run(["git", "commit", "-m", f"Feature flags for .{new_flags_level}."])
|
||||
|
||||
56
Scripts/tag_template.py
Executable file
56
Scripts/tag_template.py
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import plistlib
|
||||
|
||||
TEMPLATE_PATH = "ci_scripts/tag_template.txt"
|
||||
FEATURE_FLAG_LEVEL_PATH = "ci_scripts/feature_flag_level.txt"
|
||||
INFO_PLIST = "Signal/Signal-Info.plist"
|
||||
|
||||
|
||||
def write_level(level):
|
||||
return write_if_different(FEATURE_FLAG_LEVEL_PATH, level)
|
||||
|
||||
|
||||
def write_template():
|
||||
(major, minor, patch) = get_current_marketing_version()
|
||||
tag_suffix = get_tag_suffix(get_current_feature_flag_level())
|
||||
tag_template = f"{major}.{minor}.{patch}.{{build_number}}{tag_suffix}"
|
||||
return write_if_different(TEMPLATE_PATH, tag_template)
|
||||
|
||||
|
||||
def get_current_marketing_version():
|
||||
with open(INFO_PLIST, "rb") as file:
|
||||
return extract_marketing_version(plistlib.load(file))
|
||||
|
||||
|
||||
def extract_marketing_version(contents):
|
||||
return parse_version(contents["CFBundleShortVersionString"])
|
||||
|
||||
|
||||
def parse_version(value):
|
||||
components = list(map(int, value.split(".")))
|
||||
while len(components) < 3:
|
||||
components.append(0)
|
||||
major, minor, patch = tuple(components)
|
||||
return (major, minor, patch)
|
||||
|
||||
|
||||
def get_current_feature_flag_level():
|
||||
with open(FEATURE_FLAG_LEVEL_PATH, "r") as file:
|
||||
return file.read()
|
||||
|
||||
|
||||
def get_tag_suffix(level):
|
||||
if level == "production":
|
||||
return ""
|
||||
return f"-{level}"
|
||||
|
||||
|
||||
def write_if_different(file_path, new_value):
|
||||
with open(file_path, "r") as file:
|
||||
old_value = file.read()
|
||||
if new_value != old_value:
|
||||
with open(file_path, "w") as file:
|
||||
file.write(new_value)
|
||||
return [file_path]
|
||||
return []
|
||||
1
ci_scripts/feature_flag_level.txt
Normal file
1
ci_scripts/feature_flag_level.txt
Normal file
@@ -0,0 +1 @@
|
||||
internal
|
||||
1
ci_scripts/tag_template.txt
Normal file
1
ci_scripts/tag_template.txt
Normal file
@@ -0,0 +1 @@
|
||||
7.53.0.{build_number}-internal
|
||||
Reference in New Issue
Block a user