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
9import re
10import os
11import subprocess
12#------------------------------------------------------------------------------
13
14def main():
15 versionH = open('version.h.in', 'r').read()
16
17 oldClangStable = '19'
18 newClangStable = '20'
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
82main()
83#------------------------------------------------------------------------------
84