0
0
mirror of https://github.com/signalapp/libsignal.git synced 2024-09-20 20:03:07 +02:00

Merge pull request #369 from signalapp/jrose/update_versions.py

Add bin/update_versions.py to make it easier to do a release
This commit is contained in:
Jordan Rose 2021-10-01 17:16:52 -07:00 committed by GitHub
commit f7c43d2f70
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 75 additions and 87 deletions

View File

@ -138,7 +138,7 @@ jobs:
run: cargo fmt --all -- --check
- name: Check bridge versioning
run: ./bin/verify_crate_versions.py
run: ./bin/update_versions.py
- name: Build
run: cargo build --all --verbose

View File

@ -10,19 +10,8 @@ The first version component should always be 0, to indicate that Signal does not
If the changes will require updates in Signal-Android, Signal-iOS, or Signal-Desktop, increase the second version component and reset the third to 0. Otherwise, increase the third version component.
There are six files that have version numbers:
- rust/bridge/jni/Cargo.toml
- rust/bridge/ffi/Cargo.toml
- rust/bridge/node/Cargo.toml
- java/build.gradle
- SignalClient.podspec
- package.json
Once you've done this, run the following commands (with the appropriate version number):
```
bin/verify_crate_versions.py # make sure you updated correctly
bin/update_versions.py 0.x.y
cargo check --workspace # make sure Cargo.lock is updated
```

73
bin/update_versions.py Executable file
View File

@ -0,0 +1,73 @@
#!/usr/bin/env python3
#
# Copyright 2021 Signal Messenger, LLC.
# SPDX-License-Identifier: AGPL-3.0-only
#
# Keep crate versions and lib package versions in accord
import fileinput
import sys
import re
import os
def read_version(file, pattern):
with open(file) as f:
for line in f:
match = pattern.match(line)
if match:
return match.group(2)
raise Exception(f"Could not determine version from {file}")
def update_version(file, pattern, new_version):
with fileinput.input(files=(file,), inplace=True) as f:
for line in f:
print(pattern.sub(f"\\g<1>{new_version}\\g<3>", line, count=1), end='')
PODSPEC_PATTERN = re.compile(r"^(.*\.version\s+=\s+')(.*)(')")
GRADLE_PATTERN = re.compile(r'^(\s+ext\.version_number\s+=\s+")(.*)(")')
NODE_PATTERN = re.compile(r'^(\s+"version": ")(.*)(")')
CARGO_PATTERN = re.compile(r'^(version = ")(.*)(")')
def bridge_path(bridge):
return os.path.join('rust', 'bridge', bridge, 'Cargo.toml')
def main():
if len(sys.argv) > 1:
update_version('SignalClient.podspec', PODSPEC_PATTERN, sys.argv[1])
update_version(os.path.join('java', 'build.gradle'), GRADLE_PATTERN, sys.argv[1])
update_version('package.json', NODE_PATTERN, sys.argv[1])
update_version(bridge_path('ffi'), CARGO_PATTERN, sys.argv[1])
update_version(bridge_path('jni'), CARGO_PATTERN, sys.argv[1])
update_version(bridge_path('node'), CARGO_PATTERN, sys.argv[1])
return 0
package_versions = {
'swift': read_version('SignalClient.podspec', PODSPEC_PATTERN),
'java': read_version(os.path.join('java', 'build.gradle'), GRADLE_PATTERN),
'node': read_version('package.json', NODE_PATTERN)
}
bridge_versions = {
'swift': read_version(bridge_path('ffi'), CARGO_PATTERN),
'java': read_version(bridge_path('jni'), CARGO_PATTERN),
'node': read_version(bridge_path('node'), CARGO_PATTERN),
}
for bridge in package_versions:
if bridge_versions[bridge] != package_versions[bridge]:
print("ERROR: Bridge %s has package version %s but crate version is %s" % (
bridge, package_versions[bridge], bridge_versions[bridge]))
return 1
return 0
if __name__ == '__main__':
sys.exit(main())

View File

@ -1,74 +0,0 @@
#!/usr/bin/env python3
#
# Copyright 2021 Signal Messenger, LLC.
# SPDX-License-Identifier: AGPL-3.0-only
#
# Verify crate versions and lib package versions are in accord
import sys
import re
import json
import os
def swift_version():
version_re = re.compile(r".*\.version\s+=\s+'(.*)'")
for line in open('SignalClient.podspec'):
match = version_re.match(line)
if match:
return match.group(1)
raise Exception("Could not determine version from SignalClient.podspec")
def java_version():
version_re = re.compile(r"\s+ext\.version_number\s+=\s+\"(.*)\"")
for line in open('java/build.gradle'):
match = version_re.match(line)
if match:
return match.group(1)
raise Exception("Could not determine version from java/build.gradle")
def node_version():
package_json = json.load(open('package.json'))
return package_json['version']
def bridge_version(bridge):
version_re = re.compile('^version = "(.*)"')
bridge_cargo_toml = os.path.join('rust/bridge/', bridge, 'Cargo.toml')
for line in open(bridge_cargo_toml):
match = version_re.match(line)
if match:
return match.group(1)
raise Exception("Could not determine version from ", bridge_cargo_toml)
def main():
package_versions = {
'swift': swift_version(),
'java': java_version(),
'node': node_version()
}
bridge_versions = {
'swift': bridge_version('ffi'),
'java': bridge_version('jni'),
'node': bridge_version('node'),
}
rc = 0
for bridge in ['swift', 'java', 'node']:
if bridge_versions[bridge] != package_versions[bridge]:
print("ERROR: Bridge %s has package version %s but crate version is %s" % (
bridge, package_versions[bridge], bridge_versions[bridge]))
rc = 1
return rc
if __name__ == '__main__':
sys.exit(main())