Skip to content
Snippets Groups Projects
Commit f4e0917d authored by Pavel KORSHUNOV's avatar Pavel KORSHUNOV
Browse files

Fixes#104 and #105 issues

parent 06135f2d
Branches
No related tags found
1 merge request!111Fixes issues #104 and #105
...@@ -26,6 +26,10 @@ Options: ...@@ -26,6 +26,10 @@ Options:
mrs). To use tag annotations, use mode tags. If mrs). To use tag annotations, use mode tags. If
you use commits as mode, we use the text in commits you use commits as mode, we use the text in commits
to produce the change log. [default: mrs] to produce the change log. [default: mrs]
-s, --since=<date> The date in any Date format from,
which you want to generate the changelog. If 'None',
the Bob's last release date will be used.
[default: None]
Examples: Examples:
...@@ -41,8 +45,12 @@ Examples: ...@@ -41,8 +45,12 @@ Examples:
$ {0} --package=bob.package.xyz --mode=commits > changelog.md $ {0} --package=bob.package.xyz --mode=commits > changelog.md
3. Generates the changelog for a single package looking at merge requests starting from a given date of January 1, 2016:
3. Generates a complete list of changelogs for the whole of Bob (whatever is $ {0} --package=bob.package.xyz --mode=mrs --since=2016-01-01 > changelog.md
4. Generates a complete list of changelogs for the whole of Bob (whatever is
registered in the file "order.txt" in the project "bob/bob.nightlies" registered in the file "order.txt" in the project "bob/bob.nightlies"
$ {0} > changelog.md $ {0} > changelog.md
...@@ -52,7 +60,8 @@ Examples: ...@@ -52,7 +60,8 @@ Examples:
import os import os
import sys import sys
import datetime import datetime
import dateutil.parser
import pytz
def _insure_correct_package(candidates, group_name, pkg_name): def _insure_correct_package(candidates, group_name, pkg_name):
for pkg in candidates: for pkg in candidates:
...@@ -75,10 +84,14 @@ def get_packages_list(gl, gl_group=None): ...@@ -75,10 +84,14 @@ def get_packages_list(gl, gl_group=None):
# release date of last Bob release + 1 day # release date of last Bob release + 1 day
def bob_last_release(gl): def bob_last_release(gl, since=None):
bobpkg = gl.projects.get(id=1535) # 1535 is id of 'bob' meta-package if since is None:
last_bob_tag = bobpkg.tags.list()[0] # get the last tag bobpkg = gl.projects.get(id=1535) # 1535 is id of 'bob' meta-package
return last_bob_tag.commit['committed_date'] last_bob_tag = bobpkg.tags.list()[0] # get the last tag
return last_bob_tag.commit['committed_date']
# if 'since' is provided, convert it in ISO format
fulldate = dateutil.parser.parse(since).replace(tzinfo=pytz.timezone("Europe/Zurich"))
return (fulldate + datetime.timedelta(milliseconds=500)).isoformat()
def get_datetime_from_gitdate(gitdate): def get_datetime_from_gitdate(gitdate):
...@@ -210,7 +223,7 @@ def print_tags_with_commits(pkg_name, gitpkg, since='2017-01-01T00:00:00Z', rele ...@@ -210,7 +223,7 @@ def print_tags_with_commits(pkg_name, gitpkg, since='2017-01-01T00:00:00Z', rele
print_commits_range(pkg_name, leftover_commits) print_commits_range(pkg_name, leftover_commits)
def main(group_name, pkg_name="", packages_list='bob.nightlies', release_mode=None): def main(group_name, pkg_name="", packages_list='bob.nightlies', release_mode=None, since=None):
try: try:
import gitlab import gitlab
...@@ -229,7 +242,7 @@ def main(group_name, pkg_name="", packages_list='bob.nightlies', release_mode=No ...@@ -229,7 +242,7 @@ def main(group_name, pkg_name="", packages_list='bob.nightlies', release_mode=No
gl = gitlab.Gitlab(server, private_token=token, api_version=4) gl = gitlab.Gitlab(server, private_token=token, api_version=4)
bob_group = gl.groups.list(search=group_name)[0] bob_group = gl.groups.list(search=group_name)[0]
last_release_date = bob_last_release(gl) last_release_date = bob_last_release(gl, since)
if release_mode == 'tags': if release_mode == 'tags':
visibility = ('public',) visibility = ('public',)
...@@ -280,4 +293,5 @@ if __name__ == '__main__': ...@@ -280,4 +293,5 @@ if __name__ == '__main__':
pkg_name=arguments['--package'], pkg_name=arguments['--package'],
packages_list=arguments['--list'], packages_list=arguments['--list'],
release_mode=arguments['--mode'], release_mode=arguments['--mode'],
since=arguments['--since'],
) )
...@@ -190,7 +190,7 @@ def get_parsed_tag(gitpkg, tag): ...@@ -190,7 +190,7 @@ def get_parsed_tag(gitpkg, tag):
The latest tag is either patch, minor, major, or none The latest tag is either patch, minor, major, or none
""" """
m = re.search(r"(v\d.\d.\d)", tag) m = re.search(r"(v\d+.\d+.\d+)", tag)
if m: if m:
return m.group(0) return m.group(0)
# tag = Version(tag) # tag = Version(tag)
...@@ -237,6 +237,7 @@ def update_tag_comments(gitpkg, tag_name, tag_comments_list, dry_run=False): ...@@ -237,6 +237,7 @@ def update_tag_comments(gitpkg, tag_name, tag_comments_list, dry_run=False):
""" """
# get tag and update its description # get tag and update its description
print(tag_name)
tag = gitpkg.tags.get(tag_name) tag = gitpkg.tags.get(tag_name)
print('Found tag {1}, updating its comments with:'.format(gitpkg.name, tag.name)) print('Found tag {1}, updating its comments with:'.format(gitpkg.name, tag.name))
print(tag_comments_list) print(tag_comments_list)
...@@ -452,8 +453,9 @@ def parse_and_process_package_changelog(gl, bob_group, pkg_name, package_changel ...@@ -452,8 +453,9 @@ def parse_and_process_package_changelog(gl, bob_group, pkg_name, package_changel
return gitpkg, cur_tag, cur_tag_comments return gitpkg, cur_tag, cur_tag_comments
def release_bob(gl, bob_group, changelog_file): def release_bob(changelog_file):
instructions = ''' instructions = '''
Here are the instructions to release Bob meta package:
* Run ./check_private.sh bob.buildout bob.extension ... * Run ./check_private.sh bob.buildout bob.extension ...
with the list of packages from bob.nightlies/order.txt with the list of packages from bob.nightlies/order.txt
* Put the list of public packages in ../../bob/requirements.txt * Put the list of public packages in ../../bob/requirements.txt
...@@ -542,8 +544,9 @@ def main(group_name='bob', changelog_file='changelog.rst', dry_run=False, packag ...@@ -542,8 +544,9 @@ def main(group_name='bob', changelog_file='changelog.rst', dry_run=False, packag
bob_group = gl.groups.list(search=group_name)[0] bob_group = gl.groups.list(search=group_name)[0]
# if we are releasing 'bob' metapackage, it's a simple thing, no GitLab API
if package == 'bob': if package == 'bob':
release_bob(gl, bob_group, changelog_file) release_bob(changelog_file)
return return
# traverse all packages in the changelog, edit older tags with updated comments, # traverse all packages in the changelog, edit older tags with updated comments,
...@@ -562,8 +565,13 @@ def main(group_name='bob', changelog_file='changelog.rst', dry_run=False, packag ...@@ -562,8 +565,13 @@ def main(group_name='bob', changelog_file='changelog.rst', dry_run=False, packag
if not start_idx: if not start_idx:
print('Package {0} was not found in the changelog'.format(package)) print('Package {0} was not found in the changelog'.format(package))
return return
start_idx = pkgs.tolist().index(start_idx[0]) start_idx = pkgs.index(start_idx[0])
# if we are in a dry-run mode, let's let it be known
if dry_run:
print('\n########### DRY RUN MODE ###########\nNothing is being committed to GitLab\n')
# go through the list of packages and release them starting from the start_idx
for i in range(start_idx, len(pkgs) - 1): for i in range(start_idx, len(pkgs) - 1):
cur_package_name = changelog[pkgs[i]][1:].strip() cur_package_name = changelog[pkgs[i]][1:].strip()
print('\nProcessing package {0}'.format(changelog[pkgs[i]])) print('\nProcessing package {0}'.format(changelog[pkgs[i]]))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment