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:
commit
f7c43d2f70
2
.github/workflows/build_and_test.yml
vendored
2
.github/workflows/build_and_test.yml
vendored
@ -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
|
||||
|
13
RELEASE.md
13
RELEASE.md
@ -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
73
bin/update_versions.py
Executable 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())
|
@ -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())
|
Loading…
Reference in New Issue
Block a user