| #!/usr/bin/env python |
| # Copyright 2015 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import subprocess |
| import yaml |
| |
| |
| PUBSPECS = [ |
| 'sky/packages/sky/pubspec.yaml', |
| 'sky/packages/sky_engine/pubspec.yaml', |
| 'sky/packages/sky_services/pubspec.yaml', |
| ] |
| |
| def increment_version(version): |
| pieces = version.split('.') |
| pieces[-1] = str(int(pieces[-1]) + 1) |
| return '.'.join(pieces) |
| |
| |
| def sort_dict(unsorted): |
| sorted_dict = collections.OrderedDict() |
| for key in sorted(unsorted.keys()): |
| sorted_dict[key] = unsorted[key] |
| return sorted_dict |
| |
| |
| def count_commits(start, end): |
| return subprocess.check_output([ |
| 'git', 'rev-list', '%s...%s' % (start, end)]).count('\n') |
| |
| |
| def last_commit_to(file_path): |
| return subprocess.check_output(['git', 'log', '-1', '--format=%h', file_path]).strip() |
| |
| |
| def update_pubspec(pubspec): |
| # TODO(eseidel): This does not prserve any manual sort-order of the yaml. |
| with open(pubspec, 'r') as stream: |
| spec = yaml.load(stream) |
| old_version = spec['version'] |
| spec['version'] = increment_version(old_version) |
| print "%20s %6s => %6s" % (spec['name'], old_version, spec['version']) |
| |
| with open(pubspec, 'w') as stream: |
| yaml.dump(spec, stream=stream, default_flow_style=False) |
| return spec['version'] |
| |
| |
| def update_changelog(changelog, pubspec, version): |
| old = last_commit_to(pubspec) |
| new = last_commit_to('.') |
| url = "https://github.com/domokit/sky_engine/compare/%s...%s" % (old, new) |
| count = count_commits(old, new) |
| message = """## %s |
| |
| - %s changes: %s |
| |
| """ % (version, count, url) |
| prepend_to_file(message, changelog) |
| |
| |
| def prepend_to_file(to_prepend, filepath): |
| with open(filepath, 'r+') as f: |
| content = f.read() |
| f.seek(0, 0) |
| f.write(to_prepend + content) |
| |
| |
| def main(): |
| # Should chdir to the root directory. |
| |
| print 'Pub packages:' |
| for pubspec in PUBSPECS: |
| new_version = update_pubspec(pubspec) |
| changelog = os.path.join(os.path.dirname(pubspec), 'CHANGELOG.md') |
| update_changelog(changelog, pubspec, new_version) |
| |
| |
| if __name__ == '__main__': |
| main() |