From 02e893a4f3d750dc57af33297a07332fba220d78 Mon Sep 17 00:00:00 2001 From: Max Radermacher Date: Mon, 24 Mar 2025 12:45:04 -0500 Subject: [PATCH] Add tag & feature flag support files for CI --- Scripts/bump_build_tag.py | 6 +++- Scripts/feature_flags_common.py | 15 +++++---- Scripts/tag_template.py | 56 +++++++++++++++++++++++++++++++ ci_scripts/feature_flag_level.txt | 1 + ci_scripts/tag_template.txt | 1 + 5 files changed, 71 insertions(+), 8 deletions(-) create mode 100755 Scripts/tag_template.py create mode 100644 ci_scripts/feature_flag_level.txt create mode 100644 ci_scripts/tag_template.txt diff --git a/Scripts/bump_build_tag.py b/Scripts/bump_build_tag.py index 73fabef740..b34b61a1c6 100755 --- a/Scripts/bump_build_tag.py +++ b/Scripts/bump_build_tag.py @@ -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()}"]) diff --git a/Scripts/feature_flags_common.py b/Scripts/feature_flags_common.py index d6568447bd..d0e5503b46 100755 --- a/Scripts/feature_flags_common.py +++ b/Scripts/feature_flags_common.py @@ -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}."]) diff --git a/Scripts/tag_template.py b/Scripts/tag_template.py new file mode 100755 index 0000000000..e5ef867342 --- /dev/null +++ b/Scripts/tag_template.py @@ -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 [] diff --git a/ci_scripts/feature_flag_level.txt b/ci_scripts/feature_flag_level.txt new file mode 100644 index 0000000000..4842ffe948 --- /dev/null +++ b/ci_scripts/feature_flag_level.txt @@ -0,0 +1 @@ +internal \ No newline at end of file diff --git a/ci_scripts/tag_template.txt b/ci_scripts/tag_template.txt new file mode 100644 index 0000000000..178e68d0cd --- /dev/null +++ b/ci_scripts/tag_template.txt @@ -0,0 +1 @@ +7.53.0.{build_number}-internal \ No newline at end of file