| #!/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() |