Merge pull request #2052 from github/update-v3.22.12-40cb08c12 · github/codeql-action@012739e (original) (raw)

1

1

`import argparse

`

2

2

`import datetime

`

``

3

`+

import re

`

3

4

`from github import Github

`

4

5

`import json

`

5

6

`import os

`

`@@ -174,6 +175,60 @@ def get_today_string():

`

174

175

`today = datetime.datetime.today()

`

175

176

`return '{:%d %b %Y}'.format(today)

`

176

177

``

``

178

`+

def process_changelog_for_backports(source_branch_major_version, target_branch_major_version):

`

``

179

+

``

180

`+

changelog entries can use the following format to indicate

`

``

181

`+

that they only apply to newer versions

`

``

182

`+

some_versions_only_regex = re.compile(r'[v(\d+)+ only]')

`

``

183

+

``

184

`+

output = ''

`

``

185

+

``

186

`+

with open('CHANGELOG.md', 'r') as f:

`

``

187

+

``

188

`+

until we find the first section, just duplicate all lines

`

``

189

`+

while True:

`

``

190

`+

line = f.readline()

`

``

191

`+

if not line:

`

``

192

`+

raise Exception('Could not find any change sections in CHANGELOG.md') # EOF

`

``

193

+

``

194

`+

output += line

`

``

195

`+

if line.startswith('## '):

`

``

196

`+

line = line.replace(f'## {source_branch_major_version}', f'## {target_branch_major_version}')

`

``

197

`+

we have found the first section, so now handle things differently

`

``

198

`+

break

`

``

199

+

``

200

`+

found_content tracks whether we hit two headings in a row

`

``

201

`+

found_content = False

`

``

202

`+

output += '\n'

`

``

203

`+

while True:

`

``

204

`+

line = f.readline()

`

``

205

`+

if not line:

`

``

206

`+

break # EOF

`

``

207

`+

line = line.rstrip('\n')

`

``

208

+

``

209

`+

filter out changenote entries that apply only to newer versions

`

``

210

`+

match = some_versions_only_regex.search(line)

`

``

211

`+

if match:

`

``

212

`+

if int(target_branch_major_version) < int(match.group(1)):

`

``

213

`+

continue

`

``

214

+

``

215

`+

if line.startswith('## '):

`

``

216

`+

line = line.replace(f'## {source_branch_major_version}', f'## {target_branch_major_version}')

`

``

217

`+

if found_content == False:

`

``

218

`+

we have found two headings in a row, so we need to add the placeholder message.

`

``

219

`+

output += 'No user facing changes.\n'

`

``

220

`+

found_content = False

`

``

221

`+

output += f'\n{line}\n\n'

`

``

222

`+

else:

`

``

223

`+

if line.strip() != '':

`

``

224

`+

found_content = True

`

``

225

`+

we use the original line here, rather than the stripped version

`

``

226

`+

so that we preserve indentation

`

``

227

`+

output += line + '\n'

`

``

228

+

``

229

`+

with open('CHANGELOG.md', 'w') as f:

`

``

230

`+

f.write(output)

`

``

231

+

177

232

`def update_changelog(version):

`

178

233

`if (os.path.exists('CHANGELOG.md')):

`

179

234

`content = ''

`

`@@ -324,13 +379,7 @@ def main():

`

324

379

``

325

380

`# Migrate the changelog notes from vLatest version numbers to vOlder version numbers

`

326

381

`print(f'Migrating changelog notes from v{source_branch_major_version} to v{target_branch_major_version}')

`

327

``

`-

subprocess.check_output(['sed', '-i', f's/^## {source_branch_major_version}./## {target_branch_major_version}./g', 'CHANGELOG.md'])

`

328

``

-

329

``

`-

Remove changelog notes from all versions that do not apply to the vOlder branch

`

330

``

`-

print(f'Removing changelog notes that do not apply to v{target_branch_major_version}')

`

331

``

`-

for v in range(int(source_branch_major_version), int(target_branch_major_version), -1):

`

332

``

`-

print(f'Removing changelog notes that are tagged [v{v}+ only]')

`

333

``

`-

subprocess.check_output(['sed', '-i', f'/^- [v{v}+ only]/d', 'CHANGELOG.md'])

`

``

382

`+

process_changelog_for_backports(source_branch_major_version, target_branch_major_version)

`

334

383

``

335

384

`` # Amend the commit generated by npm version to update the CHANGELOG

``

336

385

`run_git('add', 'CHANGELOG.md')

`