Files
librsvg/ci/check_public_crate_version.py

67 lines
2.1 KiB
Python

# Checks that the version of the librsvg public crate matches the version for the GNOME library.
#
# For stable releases:
# - GNOME: 2.57.2
# - crate: 2.57.2
#
# For development relases, .9x vs. -beta.x
# - GNOME: 2.57.90
# - crate: 2.58.0-beta.0
import semver
import sys
import toml
from utils import get_project_version_str
def gen_crate_version_from_project_version(v):
if v.patch < 90:
# stable release, just return it
return v
elif v.patch >= 90 and v.patch < 99:
# development release, mangle it for semver
patch_level = v.patch - 90
beta = f'beta.{patch_level}'
return v.bump_minor().replace(prerelease = beta)
else:
raise Exception("don't know what to do with patch versions larger than 99")
def check_crate_version(project_version_str, crate_version_str):
# GNOME only likes x.y.z versions
main_version = semver.Version.parse(project_version_str)
assert main_version.major is not None
assert main_version.minor is not None
assert main_version.patch is not None
assert main_version.prerelease is None
assert main_version.build is None
crate_version = semver.Version.parse(crate_version_str)
if gen_crate_version_from_project_version(main_version) != crate_version:
raise Exception(
f'meson.build version {main_version} does not match rsvg crate version {crate_version}'
)
def test_stable():
a = semver.Version.parse('2.56.3')
assert gen_crate_version_from_project_version(a) == a
def test_development():
a = semver.Version.parse('2.56.90')
assert gen_crate_version_from_project_version(a) == semver.Version.parse('2.57.0-beta.0')
a = semver.Version.parse('2.57.93')
assert gen_crate_version_from_project_version(a) == semver.Version.parse('2.58.0-beta.3')
def main():
project_version_str = get_project_version_str()
doc = toml.load('rsvg/Cargo.toml')
crate_version_str = doc['package']['version']
check_crate_version(project_version_str, crate_version_str)
print('Versions number match. All good!', file=sys.stderr)
if __name__ == "__main__":
main()