blob: 89e78ffc899f36744275508638a12b7f8bae8332 [file] [log] [blame]
#!/usr/bin/env python3
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2019, Linaro Limited
#
from subprocess import Popen, PIPE
import argparse
def get_args():
parser = argparse.ArgumentParser(description='Helper script that updates '
'the CHANGELOG.md file.\n'
'Usage example:\n'
' ./update_changelog.py '
' --changelog-file CHANGELOG.md'
' --release-version 3.7.0'
' --previous-release-version 3.6.0'
' --release-date 2019-10-11')
parser.add_argument('--changelog-file', action='store', required=False,
default='CHANGELOG.md',
help='Changelog file to be updated.')
parser.add_argument('--release-date', action='store', required=True,
help='The release date (yyyy-mm-dd).')
parser.add_argument('--release-version', action='store', required=True,
help='Release version (MAJOR.MINOR.PATCH).')
parser.add_argument('--previous-release-version', action='store',
required=True,
help='Previous release version (MAJOR.MINOR.PATCH).')
return parser.parse_args()
def prepend_write(filename, text):
with open(filename, 'r+') as f:
current_content = f.read()
f.seek(0, 0)
f.write(text + '\n' + current_content)
f.flush()
def get_previous_release_date(tag):
cmd = "git log -1 --date=format:%Y-%m-%d --format=format:%cd " \
"{}".format(tag)
process = Popen(cmd.split(), stdout=PIPE)
(output, err) = process.communicate()
return output.decode("utf-8")
def main():
global args
args = get_args()
gits = ["OP-TEE/optee_os", "OP-TEE/optee_client", "OP-TEE/optee_test",
"OP-TEE/build", "linaro-swg/optee_examples"]
# Shorten name
clf = args.changelog_file
rv = args.release_version
prv = args.previous_release_version
rd = args.release_date
prd = get_previous_release_date(prv)
# In some cases we need underscore in string
rvu = rv.replace('.', '_')
text = "# OP-TEE - version {} ({})\n".format(rv, rd)
text += "\n"
text += "- Links to the release pages, commits and pull requests merged " \
"into this release for:\n"
for g in gits:
gu = g.replace('/', '_')
gu = gu.replace('-', '_')
text += " - {}: [release page][{}_release_{}], " \
"[commits][{}_commits_{}] and [pull requests]" \
"[{}_pr_{}]\n".format(g, gu, rvu, gu, rvu, gu, rvu)
text += "\n"
for g in gits:
gu = g.replace('/', '_')
gu = gu.replace('-', '_')
text += "\n[{}_release_{}]: https://github.com/{}/releases/tag/" \
"{}\n".format(gu, rvu, g, rv)
text += "[{}_commits_{}]: https://github.com/{}/compare/" \
"{}...{}\n".format(gu, rvu, g, prv, rv)
text += "[{}_pr_{}]: https://github.com/{}/pulls?q=is%3Apr+is%3A" \
"merged+base%3Amaster+merged%3A{}..{}\n".format(
gu, rvu, g, prd, rd)
prepend_write(args.changelog_file, text)
if __name__ == "__main__":
main()