prepare-release.py
Go to the documentation of this file.
1 #! /usr/bin/env python3
2 #
3 #
4 # C++ Insights, copyright (C) by Andreas Fertig
5 # Distributed under an MIT license. See LICENSE for details
6 #
7 #------------------------------------------------------------------------------
8 
9 import re
10 import os
11 import subprocess
12 #------------------------------------------------------------------------------
13 
14 def main():
15  versionH = open('version.h.in', 'r').read()
16 
17  oldClangStable = '18'
18  newClangStable = '19'
19  newInsightsVersion = f'{newClangStable}.1'
20  oldInsightsVersion = re.search(r'INSIGHTS_VERSION\s+"(.*?)"', versionH, re.DOTALL | re.MULTILINE).group(1)
21 
22 
23  print('Preparing a new release:')
24  print(' Current Clang stable : %s' %(oldClangStable))
25  print(' New Clang stable : %s' %(newClangStable))
26  print(' Current Insights version : %s' %(oldInsightsVersion))
27  print(' New Insights version : %s' %(newInsightsVersion))
28 
29  print(' - Updating .github/workflows/ci.yml')
30  travis = open('.github/workflows/ci.yml', 'r').read()
31 
32  regEx = re.compile('[clang|llvm]-([0-9]+)')
33 
34  travis = re.sub(r'(clang|llvm|clang\+\+|llvm-config|llvm-toolchain-bionic|clang-format|clang-tidy|llvm-toolchain-trusty)(-%s)' %(oldClangStable), '\\1-%s' %(newClangStable) , travis)
35  travis = re.sub('(clang|Clang|llvm|LLVM) (%s)' %(oldClangStable), '\\1 %s' %(newClangStable) , travis)
36  travis = re.sub(r"(LLVM_VERSION=)('%s)" %(oldClangStable), r"\1'%s" %(newClangStable) , travis)
37  travis = re.sub(r"(LLVM_VERSION:)\s*(%s.0.0)" %(oldClangStable), r"\1 %s.0.0" %(newClangStable) , travis)
38  travis = re.sub(r'(llvm_version:\s*)("%s)(.0.0",)' %(oldClangStable), '\\1"%s.0.0",' %(newClangStable), travis)
39  travis = re.sub(r"clang(%s)0" %(oldClangStable), r"clang%s0" %(newClangStable) , travis)
40  travis = re.sub(r"(llvm-toolchain-xenial)-(%s)" %(oldClangStable), r"\1-%s" %(newClangStable) , travis)
41  travis = re.sub(r"(./llvm.sh) (%s)" %(oldClangStable), r"\1 %s" %(newClangStable) , travis)
42 
43  open('.github/workflows/ci.yml', 'w').write(travis)
44 
45 
46  print(' - Updating CMakeLists.txt')
47  cmake = open('CMakeLists.txt', 'r').read()
48  cmake = re.sub(r'(set\‍(INSIGHTS_MIN_LLVM_MAJOR_VERSION)( %s)\‍)' %(oldClangStable), '\\1 %s)' %(newClangStable) , cmake)
49  open('CMakeLists.txt', 'w').write(cmake)
50 
51 
52  print(f' - Updating version.h {oldInsightsVersion} -> {newInsightsVersion}')
53  version = open('version.h.in', 'r').read()
54  version = re.sub('(INSIGHTS_VERSION )"(.*)"', '\\1"%s"' %(newInsightsVersion) , version)
55  open('version.h.in', 'w').write(version)
56 
57  cppInsightsDockerBaseFile = '../cppinsights-docker-base/Dockerfile'
58 
59  print(f' - Updating cppinsights-docker-base ({cppInsightsDockerBaseFile})')
60 
61  dockerFile = open(cppInsightsDockerBaseFile, 'r').read()
62  dockerFile = re.sub(r'(ENV\s+CLANG_VERSION=)([0-9]+)', r'\g<1>%s' %(newClangStable), dockerFile)
63  open(cppInsightsDockerBaseFile, 'w').write(dockerFile)
64 
65 
66  gitTag = f'v_{oldInsightsVersion}'
67  print(f' - Tagging {gitTag}')
68 
69  cmd = ['git', 'tag', gitTag, 'main']
70  p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
71  stdout, stderr = p.communicate()
72 
73  if 0 != p.returncode:
74  print('ERR: git tag failed!')
75  print(stderr)
76  return 1
77 
78  print(' - Push tag:')
79  print(f' git push origin {gitTag}')
80 #------------------------------------------------------------------------------
81 
82 main()
83 #------------------------------------------------------------------------------
84