mirror of https://github.com/oxen-io/session-ios
99 lines
3.4 KiB
Python
99 lines
3.4 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# When we make a hotfix, we need to reverse integrate our hotfix back into
|
|
# master. After commiting to master, this script audits that all tags have been
|
|
# reverse integrated.
|
|
import subprocess
|
|
from distutils.version import LooseVersion
|
|
import logging
|
|
|
|
#logging.basicConfig(level=logging.DEBUG)
|
|
|
|
def is_on_master():
|
|
output = subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"]).strip()
|
|
logging.debug("branch output: %s" % output)
|
|
return output == "master"
|
|
|
|
def main():
|
|
if not is_on_master():
|
|
# Don't interfere while on a feature or hotfix branch
|
|
logging.debug("not on master branch")
|
|
return
|
|
|
|
logging.debug("on master branch")
|
|
|
|
unmerged_tags_output = subprocess.check_output(["git", "tag", "--no-merged", "master"])
|
|
unmerged_tags = [line.strip() for line in unmerged_tags_output.split("\n") if len(line) > 0]
|
|
|
|
logging.debug("All unmerged tags: %s" % unmerged_tags)
|
|
|
|
# Before this point we weren't always reverse integrating our tags. As we
|
|
# audit old tags, we can ratchet this version number back.
|
|
epoch_tag="2.21.0"
|
|
|
|
logging.debug("ignoring tags before epoch_tag: %s" % epoch_tag)
|
|
|
|
tags_of_concern = [tag for tag in unmerged_tags if LooseVersion(tag) > LooseVersion(epoch_tag)]
|
|
|
|
# Don't reverse integrate tags for adhoc builds
|
|
tags_of_concern = [tag for tag in tags_of_concern if "adhoc" not in tag]
|
|
|
|
tags_to_ignore = [
|
|
'2.23.3.0',
|
|
'2.23.3.1',
|
|
'2.26.0.6',
|
|
'2.26.0.7',
|
|
'2.26.0.15',
|
|
'2.26.0.16',
|
|
'2.29.0.7',
|
|
'2.29.0.8',
|
|
'2.29.0.9',
|
|
'2.29.0.11',
|
|
'2.30.0.0',
|
|
'2.30.0.1',
|
|
'2.30.2.0',
|
|
'3.0',
|
|
'3.0.1',
|
|
'3.0.2',
|
|
# These tags were from unmerged branches investigating an issue that only reproduced when installed from TF.
|
|
'2.34.0.10', '2.34.0.11', '2.34.0.12', '2.34.0.13', '2.34.0.15', '2.34.0.16', '2.34.0.17', '2.34.0.18', '2.34.0.19', '2.34.0.20', '2.34.0.6', '2.34.0.7', '2.34.0.8', '2.34.0.9',
|
|
'2.37.3.0',
|
|
'2.37.4.0',
|
|
# these were internal release only tags, now we include "-internal" in the tag name to avoid this
|
|
'2.38.0.2.1',
|
|
'2.38.0.3.1',
|
|
'2.38.0.4.1',
|
|
# the work in these tags was moved to the 2.38.1 release instead
|
|
'2.38.0.12',
|
|
'2.38.0.13',
|
|
'2.38.0.14',
|
|
#
|
|
]
|
|
tags_of_concern = [tag for tag in tags_of_concern if tag not in tags_to_ignore]
|
|
|
|
# Interal Builds
|
|
#
|
|
# If you want to tag a build which is not intended to be reverse
|
|
# integrated, include the text "internal" somewhere in the tag name, such as
|
|
#
|
|
# 1.2.3.4.5-internal
|
|
# 1.2.3.4.5-internal-mkirk
|
|
#
|
|
# NOTE: that if you upload the build to test flight, you still need to give testflight
|
|
# a numeric build number - so tag won't match the build number exactly as they do
|
|
# with production build tags. That's fine.
|
|
#
|
|
# To avoid collision with "production" build numbers, use at least a 5
|
|
# digit build number.
|
|
tags_of_concern = [tag for tag in tags_of_concern if "internal" not in tag]
|
|
|
|
if len(tags_of_concern) > 0:
|
|
logging.debug("Found unmerged tags newer than epoch: %s" % tags_of_concern)
|
|
raise RuntimeError("💥 Found unmerged tags: %s" % tags_of_concern)
|
|
else:
|
|
logging.debug("No unmerged tags newer than epoch. All good!")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|