upload-conan.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/usr/bin/env python
  2. #
  3. # Copyright 2019-2019 by Martin Moene
  4. #
  5. # Distributed under the Boost Software License, Version 1.0.
  6. # (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. #
  8. # script/upload-conan.py
  9. #
  10. from __future__ import print_function
  11. import argparse
  12. import os
  13. import re
  14. import sys
  15. import subprocess
  16. # Configuration:
  17. def_conan_project = 'expected-lite'
  18. def_conan_user = 'nonstd-lite'
  19. def_conan_channel = 'stable'
  20. cfg_conanfile = 'conanfile.py'
  21. tpl_conan_create = 'conan create . {usr}/{chn}'
  22. tpl_conan_upload = 'conan upload --remote {usr} {prj}/{ver}@{usr}/{chn}'
  23. # End configuration.
  24. def versionFrom( filename ):
  25. """Obtain version from conanfile.py"""
  26. with open( filename ) as f:
  27. content = f.read()
  28. version = re.search(r'version\s=\s"(.*)"', content).group(1)
  29. return version
  30. def createConanPackage( args ):
  31. """Create conan package and upload it."""
  32. cmd = tpl_conan_create.format(usr=args.user, chn=args.channel)
  33. if args.verbose:
  34. print( "> {}".format(cmd) )
  35. if not args.dry_run:
  36. subprocess.call( cmd, shell=False )
  37. def uploadConanPackage( args ):
  38. """Create conan package and upload it."""
  39. cmd = tpl_conan_upload.format(prj=args.project, usr=args.user, chn=args.channel, ver=args.version)
  40. if args.verbose:
  41. print( "> {}".format(cmd) )
  42. if not args.dry_run:
  43. subprocess.call( cmd, shell=False )
  44. def uploadToConan( args ):
  45. """Create conan package and upload it."""
  46. print( "Updating project '{prj}' to user '{usr}', channel '{chn}', version {ver}:".
  47. format(prj=args.project, usr=args.user, chn=args.channel, ver=args.version) )
  48. createConanPackage( args )
  49. uploadConanPackage( args )
  50. def uploadToConanFromCommandLine():
  51. """Collect arguments from the commandline and create conan package and upload it."""
  52. parser = argparse.ArgumentParser(
  53. description='Create conan package and upload it to conan.',
  54. epilog="""""",
  55. formatter_class=argparse.ArgumentDefaultsHelpFormatter)
  56. parser.add_argument(
  57. '-n', '--dry-run',
  58. action='store_true',
  59. help='do not execute conan commands')
  60. parser.add_argument(
  61. '-v', '--verbose',
  62. action='count',
  63. default=0,
  64. help='level of progress reporting')
  65. parser.add_argument(
  66. '--project',
  67. metavar='p',
  68. type=str,
  69. default=def_conan_project,
  70. help='conan project')
  71. parser.add_argument(
  72. '--user',
  73. metavar='u',
  74. type=str,
  75. default=def_conan_user,
  76. help='conan user')
  77. parser.add_argument(
  78. '--channel',
  79. metavar='c',
  80. type=str,
  81. default=def_conan_channel,
  82. help='conan channel')
  83. parser.add_argument(
  84. '--version',
  85. metavar='v',
  86. type=str,
  87. default=versionFrom( cfg_conanfile ),
  88. help='version number [from conanfile.py]')
  89. uploadToConan( parser.parse_args() )
  90. if __name__ == '__main__':
  91. uploadToConanFromCommandLine()
  92. # end of file