release-version.py 1.1 KB

123456789101112131415161718192021222324252627
  1. #!/usr/bin/env python3
  2. import re,sys
  3. def parse(value):
  4. if not re.fullmatch(r'(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)',value):
  5. raise ValueError('Expected stable MAJOR.MINOR.PATCH version')
  6. numbers=tuple(map(int,value.split('.')))
  7. if any(n>2**64-1 for n in numbers):raise ValueError('Version number is too large')
  8. return numbers
  9. if __name__=='__main__':
  10. try:
  11. if sys.argv[1]=='greater':
  12. sys.exit(0 if parse(sys.argv[2])>parse(sys.argv[3]) else 1)
  13. if sys.argv[1]=='latest':
  14. versions=[]
  15. for line in sys.stdin:
  16. fields=line.split()
  17. if len(fields)!=2 or not fields[1].startswith('refs/tags/v'):continue
  18. value=fields[1].removeprefix('refs/tags/v').removesuffix('^{}')
  19. try:versions.append((parse(value),value))
  20. except ValueError:pass
  21. if not versions:raise ValueError('No stable release tags found')
  22. print(max(versions)[1])
  23. else:raise ValueError('Unknown version command')
  24. except (ValueError,IndexError) as error:
  25. print(str(error),file=sys.stderr);sys.exit(2)