From a173bb2514f01e16a3a15ce471f93065d19aec58 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Thu, 20 Sep 2018 11:47:03 +0200 Subject: [PATCH 01/12] core: handle edge case requesting matched routes but with hg/svn/git or api context. - before we error out with 500 --- rhodecode/apps/_base/__init__.py | 9 ++++++++- rhodecode/apps/home/__init__.py | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/rhodecode/apps/_base/__init__.py b/rhodecode/apps/_base/__init__.py index 76ffa8a5..27ec7214 100644 --- a/rhodecode/apps/_base/__init__.py +++ b/rhodecode/apps/_base/__init__.py @@ -22,7 +22,7 @@ import time import logging import operator -from pyramid.httpexceptions import HTTPFound, HTTPForbidden +from pyramid.httpexceptions import HTTPFound, HTTPForbidden, HTTPBadRequest from rhodecode.lib import helpers as h, diffs from rhodecode.lib.utils2 import StrictAttributeDict, safe_int, datetime_to_time @@ -100,6 +100,13 @@ class BaseAppView(object): self.request = request self.context = context self.session = request.session + if not hasattr(request, 'user'): + # NOTE(marcink): edge case, we ended up in matched route + # but probably of web-app context, e.g API CALL/VCS CALL + if hasattr(request, 'vcs_call') or hasattr(request, 'rpc_method'): + log.warning('Unable to process request `%s` in this scope', request) + raise HTTPBadRequest() + self._rhodecode_user = request.user # auth user self._rhodecode_db_user = self._rhodecode_user.get_instance() self._maybe_needs_password_change( diff --git a/rhodecode/apps/home/__init__.py b/rhodecode/apps/home/__init__.py index a2f77443..71ce3b76 100644 --- a/rhodecode/apps/home/__init__.py +++ b/rhodecode/apps/home/__init__.py @@ -20,6 +20,23 @@ from rhodecode.config import routing_links +class VCSCallPredicate(object): + def __init__(self, val, config): + self.val = val + + def text(self): + return 'vcs_call route = %s' % self.val + + phash = text + + def __call__(self, info, request): + if hasattr(request, 'vcs_call'): + # skip vcs calls + return False + + return True + + def includeme(config): config.add_route( @@ -51,3 +68,6 @@ def includeme(config): # Scan module for configuration decorators. config.scan('.views', ignore='.tests') + + config.add_route_predicate( + 'skip_vcs_call', VCSCallPredicate) From fa2da7ab6754814352bc70ce1647a564e85185bb Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Wed, 19 Sep 2018 14:19:45 +0200 Subject: [PATCH 02/12] import/repo-checks: skip validating storage path in detection of SCMs. --- rhodecode/lib/utils.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py index 3b80fbf4..9ae3d33a 100644 --- a/rhodecode/lib/utils.py +++ b/rhodecode/lib/utils.py @@ -299,9 +299,13 @@ def is_valid_repo_group(repo_group_name, base_path, skip_path_check=False): # we need to check bare git repos at higher level # since we might match branches/hooks/info/objects or possible # other things inside bare git repo - scm_ = get_scm(os.path.dirname(full_path)) - log.debug('path: %s is a vcs object:%s, not valid ' - 'repo group' % (full_path, scm_)) + maybe_repo = os.path.dirname(full_path) + if maybe_repo == base_path: + # skip root level repo check, we know root location CANNOT BE a repo group + return False + + scm_ = get_scm(maybe_repo) + log.debug('path: %s is a vcs object:%s, not valid repo group', full_path, scm_) return False except VCSError: pass From bc2cacc5ad62fad262b9587c40173c991f23f526 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Mon, 24 Sep 2018 19:02:21 +0200 Subject: [PATCH 03/12] users: when deleting users ensure we also clear personal flag so we don't have multiple personal groups for super-admin who inherits the detached objects. --- rhodecode/model/user.py | 1 + 1 file changed, 1 insertion(+) diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py index 21254cc5..07b362c5 100644 --- a/rhodecode/model/user.py +++ b/rhodecode/model/user.py @@ -468,6 +468,7 @@ class UserModel(BaseModel): # set description we know why we super admin now owns # additional repositories that were orphaned ! r.group_description += ' \n::detached repository group from deleted user: %s' % (username,) + r.personal = False self.sa.add(r) left_overs = False elif handle_mode == 'delete': From f1165da2b5e083e5a24279f30c5b09a92fce37ba Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Mon, 24 Sep 2018 19:02:52 +0200 Subject: [PATCH 04/12] users: in case of multiple personal groups, return the first instead of an error. - backward compat fix from previous error we had --- rhodecode/model/db.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py index b65f02cc..f3db5c8f 100644 --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -2498,7 +2498,9 @@ class RepoGroup(Base, BaseModel): return cls.query()\ .filter(cls.personal == true()) \ - .filter(cls.user == user).scalar() + .filter(cls.user == user) \ + .order_by(cls.group_id.asc()) \ + .first() @classmethod def get_all_repo_groups(cls, user_id=Optional(None), group_id=Optional(None), From 2703cfd066c9093a26f6729f0bb7067be345999c Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Mon, 1 Oct 2018 13:54:51 +0200 Subject: [PATCH 05/12] vcs: use a real two part name for merge operation. - expose settings into vcs_settings for easier override later --- rhodecode/lib/vcs/backends/base.py | 6 +++--- rhodecode/lib/vcs/conf/settings.py | 8 +++++++ rhodecode/model/pull_request.py | 25 ++++++++++++---------- rhodecode/tests/models/test_pullrequest.py | 4 ++-- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/rhodecode/lib/vcs/backends/base.py b/rhodecode/lib/vcs/backends/base.py index 965800b9..94ac1968 100644 --- a/rhodecode/lib/vcs/backends/base.py +++ b/rhodecode/lib/vcs/backends/base.py @@ -485,9 +485,9 @@ class BaseRepository(object): :param close_branch: If `True` branch will be close before merging it """ if dry_run: - message = message or 'dry_run_merge_message' - user_email = user_email or 'dry-run-merge@rhodecode.com' - user_name = user_name or 'Dry-Run User' + message = message or settings.MERGE_DRY_RUN_MESSAGE + user_email = user_email or settings.MERGE_DRY_RUN_EMAIL + user_name = user_name or settings.MERGE_DRY_RUN_USER else: if not user_name: raise ValueError('user_name cannot be empty') diff --git a/rhodecode/lib/vcs/conf/settings.py b/rhodecode/lib/vcs/conf/settings.py index b9aff013..c73e94f2 100644 --- a/rhodecode/lib/vcs/conf/settings.py +++ b/rhodecode/lib/vcs/conf/settings.py @@ -54,6 +54,14 @@ HOOKS_DIRECT_CALLS = False HOOKS_HOST = '127.0.0.1' +MERGE_MESSAGE_TMPL = ( + u'Merge pull request #{pr_id} from {source_repo} {source_ref_name}\n\n ' + u'{pr_title}') +MERGE_DRY_RUN_MESSAGE = 'dry_run_merge_message_from_rhodecode' +MERGE_DRY_RUN_USER = 'Dry-Run User' +MERGE_DRY_RUN_EMAIL = 'dry-run-merge@rhodecode.com' + + def available_aliases(): """ Mercurial is required for the system to work, so in case vcs.backends does diff --git a/rhodecode/model/pull_request.py b/rhodecode/model/pull_request.py index e537cd68..cfe04a50 100644 --- a/rhodecode/model/pull_request.py +++ b/rhodecode/model/pull_request.py @@ -608,23 +608,24 @@ class PullRequestModel(BaseModel): def _merge_pull_request(self, pull_request, user, extras, merge_msg=None): target_vcs = pull_request.target_repo.scm_instance() source_vcs = pull_request.source_repo.scm_instance() - target_ref = self._refresh_reference( - pull_request.target_ref_parts, target_vcs) - message = merge_msg or ( - 'Merge pull request #%(pr_id)s from ' - '%(source_repo)s %(source_ref_name)s\n\n %(pr_title)s') % { - 'pr_id': pull_request.pull_request_id, - 'source_repo': source_vcs.name, - 'source_ref_name': pull_request.source_ref_parts.name, - 'pr_title': pull_request.title - } + message = safe_unicode(merge_msg or vcs_settings.MERGE_MESSAGE_TMPL).format( + pr_id=pull_request.pull_request_id, + pr_title=pull_request.title, + source_repo=source_vcs.name, + source_ref_name=pull_request.source_ref_parts.name, + target_repo=target_vcs.name, + target_ref_name=pull_request.target_ref_parts.name, + ) workspace_id = self._workspace_id(pull_request) repo_id = pull_request.target_repo.repo_id use_rebase = self._use_rebase_for_merging(pull_request) close_branch = self._close_branch_before_merging(pull_request) + target_ref = self._refresh_reference( + pull_request.target_ref_parts, target_vcs) + callback_daemon, extras = prepare_callback_daemon( extras, protocol=vcs_settings.HOOKS_PROTOCOL, host=vcs_settings.HOOKS_HOST, @@ -635,10 +636,12 @@ class PullRequestModel(BaseModel): # for a single call. target_vcs.config.set( 'rhodecode', 'RC_SCM_DATA', json.dumps(extras)) + + user_name = user.short_contact merge_state = target_vcs.merge( repo_id, workspace_id, target_ref, source_vcs, pull_request.source_ref_parts, - user_name=user.username, user_email=user.email, + user_name=user_name, user_email=user.email, message=message, use_rebase=use_rebase, close_branch=close_branch) return merge_state diff --git a/rhodecode/tests/models/test_pullrequest.py b/rhodecode/tests/models/test_pullrequest.py index 864ab1b9..180db41a 100644 --- a/rhodecode/tests/models/test_pullrequest.py +++ b/rhodecode/tests/models/test_pullrequest.py @@ -305,7 +305,7 @@ class TestPullRequestModel(object): pull_request.target_ref_parts, pull_request.source_repo.scm_instance(), pull_request.source_ref_parts, - user_name=user.username, user_email=user.email, message=message, + user_name=user.short_contact, user_email=user.email, message=message, use_rebase=False, close_branch=False ) self.invalidation_mock.assert_called_once_with( @@ -345,7 +345,7 @@ class TestPullRequestModel(object): pull_request.target_ref_parts, pull_request.source_repo.scm_instance(), pull_request.source_ref_parts, - user_name=user.username, user_email=user.email, message=message, + user_name=user.short_contact, user_email=user.email, message=message, use_rebase=False, close_branch=False ) From ad2d37aa03232b1368b4de684412ee11751d05d5 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Tue, 2 Oct 2018 21:35:05 +0200 Subject: [PATCH 06/12] webhook: handle ${commit_id} variable independent from ${branch}. - in some cases we want non-branched individual commits to be posted. --- .../integrations/tests/test_integrations.py | 117 +++++++++--------- rhodecode/integrations/types/base.py | 12 +- rhodecode/tests/integrations/test_webhook.py | 8 ++ 3 files changed, 73 insertions(+), 64 deletions(-) diff --git a/rhodecode/integrations/tests/test_integrations.py b/rhodecode/integrations/tests/test_integrations.py index 03820fce..5fb47e1a 100644 --- a/rhodecode/integrations/tests/test_integrations.py +++ b/rhodecode/integrations/tests/test_integrations.py @@ -32,6 +32,65 @@ def route_path(name, **kwargs): }[name].format(**kwargs) +def _post_integration_test_helper(app, url, csrf_token, repo, repo_group, + admin_view): + """ + Posts form data to create integration at the url given then deletes it and + checks if the redirect url is correct. + """ + repo_name = repo.repo_name + repo_group_name = repo_group.group_name + app.post(url, params={}, status=403) # missing csrf check + response = app.post(url, params={'csrf_token': csrf_token}) + assert response.status_code == 200 + response.mustcontain('Errors exist') + + scopes_destinations = [ + ('global', + ADMIN_PREFIX + '/integrations'), + ('root-repos', + ADMIN_PREFIX + '/integrations'), + ('repo:%s' % repo_name, + '/%s/settings/integrations' % repo_name), + ('repogroup:%s' % repo_group_name, + '/%s/_settings/integrations' % repo_group_name), + ('repogroup-recursive:%s' % repo_group_name, + '/%s/_settings/integrations' % repo_group_name), + ] + + for scope, destination in scopes_destinations: + if admin_view: + destination = ADMIN_PREFIX + '/integrations' + + form_data = [ + ('csrf_token', csrf_token), + ('__start__', 'options:mapping'), + ('name', 'test integration'), + ('scope', scope), + ('enabled', 'true'), + ('__end__', 'options:mapping'), + ('__start__', 'settings:mapping'), + ('test_int_field', '34'), + ('test_string_field', ''), # empty value on purpose as it's required + ('__end__', 'settings:mapping'), + ] + errors_response = app.post(url, form_data) + assert 'Errors exist' in errors_response.body + + form_data[-2] = ('test_string_field', 'data!') + assert Session().query(Integration).count() == 0 + created_response = app.post(url, form_data) + assert Session().query(Integration).count() == 1 + + delete_response = app.post( + created_response.location, + params={'csrf_token': csrf_token, 'delete': 'delete'}) + + assert Session().query(Integration).count() == 0 + assert delete_response.location.endswith(destination) + + + @pytest.mark.usefixtures('app', 'autologin_user') class TestIntegrationsView(object): pass @@ -209,61 +268,3 @@ class TestRepoGroupIntegrationsView(TestIntegrationsView): _post_integration_test_helper( self.app, url, csrf_token, admin_view=False, repo=backend_random.repo, repo_group=test_repo_group) - - -def _post_integration_test_helper(app, url, csrf_token, repo, repo_group, - admin_view): - """ - Posts form data to create integration at the url given then deletes it and - checks if the redirect url is correct. - """ - repo_name = repo.repo_name - repo_group_name = repo_group.group_name - app.post(url, params={}, status=403) # missing csrf check - response = app.post(url, params={'csrf_token': csrf_token}) - assert response.status_code == 200 - response.mustcontain('Errors exist') - - scopes_destinations = [ - ('global', - ADMIN_PREFIX + '/integrations'), - ('root-repos', - ADMIN_PREFIX + '/integrations'), - ('repo:%s' % repo_name, - '/%s/settings/integrations' % repo_name), - ('repogroup:%s' % repo_group_name, - '/%s/_settings/integrations' % repo_group_name), - ('repogroup-recursive:%s' % repo_group_name, - '/%s/_settings/integrations' % repo_group_name), - ] - - for scope, destination in scopes_destinations: - if admin_view: - destination = ADMIN_PREFIX + '/integrations' - - form_data = [ - ('csrf_token', csrf_token), - ('__start__', 'options:mapping'), - ('name', 'test integration'), - ('scope', scope), - ('enabled', 'true'), - ('__end__', 'options:mapping'), - ('__start__', 'settings:mapping'), - ('test_int_field', '34'), - ('test_string_field', ''), # empty value on purpose as it's required - ('__end__', 'settings:mapping'), - ] - errors_response = app.post(url, form_data) - assert 'Errors exist' in errors_response.body - - form_data[-2] = ('test_string_field', 'data!') - assert Session().query(Integration).count() == 0 - created_response = app.post(url, form_data) - assert Session().query(Integration).count() == 1 - - delete_response = app.post( - created_response.location, - params={'csrf_token': csrf_token, 'delete': 'delete'}) - - assert Session().query(Integration).count() == 0 - assert delete_response.location.endswith(destination) diff --git a/rhodecode/integrations/types/base.py b/rhodecode/integrations/types/base.py index e8427f1d..80356894 100644 --- a/rhodecode/integrations/types/base.py +++ b/rhodecode/integrations/types/base.py @@ -218,11 +218,11 @@ class WebhookDataHandler(CommitParsingDataHandler): def repo_push_event_handler(self, event, data): url = self.get_base_parsed_template(data) - url_cals = [] + url_calls = [] branches_commits = self.aggregate_branch_data( data['push']['branches'], data['push']['commits']) - if '${branch}' in url or '${branch_head}' in url: + if '${branch}' in url or '${branch_head}' in url or '${commit_id}' in url: # call it multiple times, for each branch if used in variables for branch, commit_ids in branches_commits.items(): branch_url = string.Template(url).safe_substitute(branch=branch) @@ -243,7 +243,7 @@ class WebhookDataHandler(CommitParsingDataHandler): log.debug( 'register %s call(%s) to url %s', self.name, event, commit_url) - url_cals.append( + url_calls.append( (commit_url, self.headers, data)) else: @@ -251,15 +251,15 @@ class WebhookDataHandler(CommitParsingDataHandler): log.debug( 'register %s call(%s) to url %s', self.name, event, branch_url) - url_cals.append( + url_calls.append( (branch_url, self.headers, data)) else: log.debug( 'register %s call(%s) to url %s', self.name, event, url) - url_cals.append((url, self.headers, data)) + url_calls.append((url, self.headers, data)) - return url_cals + return url_calls def repo_create_event_handler(self, event, data): url = self.get_base_parsed_template(data) diff --git a/rhodecode/tests/integrations/test_webhook.py b/rhodecode/tests/integrations/test_webhook.py index 590d38ce..c5993709 100644 --- a/rhodecode/tests/integrations/test_webhook.py +++ b/rhodecode/tests/integrations/test_webhook.py @@ -107,6 +107,14 @@ def test_webook_parse_url_for_pull_request_event( 'http://server.com/stable/stable-yyy', 'http://server.com/dev/dev-xxx', 'http://server.com/dev/dev-yyy']), + ('http://server.com/${branch_head}', + ['http://server.com/stable-yyy', + 'http://server.com/dev-yyy']), + ('http://server.com/${commit_id}', + ['http://server.com/stable-xxx', + 'http://server.com/stable-yyy', + 'http://server.com/dev-xxx', + 'http://server.com/dev-yyy']), ]) def test_webook_parse_url_for_push_event( baseapp, repo_push_event, base_data, template, expected_urls): From c6753c30632fb2e6a9c207a846e3d0511d063804 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Tue, 9 Oct 2018 12:10:07 +0200 Subject: [PATCH 07/12] docs: fix release dates --- docs/release-notes/release-notes-4.13.1.rst | 2 +- docs/release-notes/release-notes-4.13.2.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/release-notes/release-notes-4.13.1.rst b/docs/release-notes/release-notes-4.13.1.rst index 775003df..04198ddd 100644 --- a/docs/release-notes/release-notes-4.13.1.rst +++ b/docs/release-notes/release-notes-4.13.1.rst @@ -4,7 +4,7 @@ Release Date ^^^^^^^^^^^^ -- 2018-08-06 +- 2018-09-06 New Features diff --git a/docs/release-notes/release-notes-4.13.2.rst b/docs/release-notes/release-notes-4.13.2.rst index a74b79a7..0bf3a9a8 100644 --- a/docs/release-notes/release-notes-4.13.2.rst +++ b/docs/release-notes/release-notes-4.13.2.rst @@ -4,7 +4,7 @@ Release Date ^^^^^^^^^^^^ -- 2018-08-18 +- 2018-09-18 New Features From fd3577c668753df1726d64193e17d634c01e0423 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Tue, 9 Oct 2018 12:10:15 +0200 Subject: [PATCH 08/12] docs: added release 4.13.3 docs --- docs/release-notes/release-notes-4.13.3.rst | 56 +++++++++++++++++++++ docs/release-notes/release-notes.rst | 1 + 2 files changed, 57 insertions(+) create mode 100644 docs/release-notes/release-notes-4.13.3.rst diff --git a/docs/release-notes/release-notes-4.13.3.rst b/docs/release-notes/release-notes-4.13.3.rst new file mode 100644 index 00000000..f83a7d31 --- /dev/null +++ b/docs/release-notes/release-notes-4.13.3.rst @@ -0,0 +1,56 @@ +|RCE| 4.13.3 |RNS| +------------------ + +Release Date +^^^^^^^^^^^^ + +- 2018-10-09 + + +New Features +^^^^^^^^^^^^ + + + +General +^^^^^^^ + +- VCS: use a real two user First Last name for merge operation. + This allows certain user naming checks to pass and be validated correctly. + + +Security +^^^^^^^^ + +- GIT: bumped release to 2.17.2 which addresses cve-2018-17456. + + +Performance +^^^^^^^^^^^ + + + +Fixes +^^^^^ + +- Repository import: skip validating root storage path in detection of VCS types. + This check doesn't need to be visible in logs and by that it will reduce the + number of errors in logs significantly. +- VCS: Properly handle VCS traffic from web app routes and API. + Before accessing those via any VCS produced a 500 error. +- Users: when deleting users ensure we also properly clear personal flag so we + don't have multiple personal groups which is produces 500 errors. +- Users: in case of multiple personal groups, return the first instead of an error. +- Webhook: handle ${commit_id} variable independent from ${branch}. +- Hooks: handle errors before trying to fetch the output. This allows easier debugging + of hook related problems +- Dependencies: Backported a patch from Dulwich to handle GIT references that are + directories. Such references should be skipped, but before made repository show + 500 errors. + + +Upgrade notes +^^^^^^^^^^^^^ + +- Scheduled release addressing reported problems, and GIT security vulnerability. + diff --git a/docs/release-notes/release-notes.rst b/docs/release-notes/release-notes.rst index 8fc7d6b4..e956a557 100644 --- a/docs/release-notes/release-notes.rst +++ b/docs/release-notes/release-notes.rst @@ -9,6 +9,7 @@ Release Notes .. toctree:: :maxdepth: 1 + release-notes-4.13.3.rst release-notes-4.13.2.rst release-notes-4.13.1.rst release-notes-4.13.0.rst From 42ad1f5f68aa426948ad5626b74a3aaaa0a2910a Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Tue, 9 Oct 2018 12:10:30 +0200 Subject: [PATCH 09/12] release: Start preparation for 4.13.3 --- .bumpversion.cfg | 2 +- .release.cfg | 9 ++------- rhodecode/VERSION | 2 +- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 357a2f9c..1bc9a804 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 4.13.2 +current_version = 4.13.3 message = release: Bump version {current_version} to {new_version} [bumpversion:file:rhodecode/VERSION] diff --git a/.release.cfg b/.release.cfg index 86972d43..6467740f 100644 --- a/.release.cfg +++ b/.release.cfg @@ -5,23 +5,18 @@ done = false done = true [task:rc_tools_pinned] -done = true [task:fixes_on_stable] -done = true [task:pip2nix_generated] -done = true [task:changelog_updated] -done = true [task:generate_api_docs] -done = true [release] -state = prepared -version = 4.13.2 +state = in_progress +version = 4.13.3 [task:updated_translation] diff --git a/rhodecode/VERSION b/rhodecode/VERSION index 79f0f240..1bc53e33 100644 --- a/rhodecode/VERSION +++ b/rhodecode/VERSION @@ -1 +1 @@ -4.13.2 \ No newline at end of file +4.13.3 \ No newline at end of file From 819abd16f36dcd165ddf961a2428e55bd99f9c86 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Tue, 9 Oct 2018 12:14:40 +0200 Subject: [PATCH 10/12] release: updated pip2nix output for 4.13.3 --- .release.cfg | 4 ++++ pkgs/python-packages.nix | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.release.cfg b/.release.cfg index 6467740f..45112775 100644 --- a/.release.cfg +++ b/.release.cfg @@ -5,14 +5,18 @@ done = false done = true [task:rc_tools_pinned] +done = true [task:fixes_on_stable] +done = true [task:pip2nix_generated] [task:changelog_updated] +done = true [task:generate_api_docs] +done = true [release] state = in_progress diff --git a/pkgs/python-packages.nix b/pkgs/python-packages.nix index 79777196..d0e652bf 100644 --- a/pkgs/python-packages.nix +++ b/pkgs/python-packages.nix @@ -1632,7 +1632,7 @@ self: super: { }; }; "rhodecode-enterprise-ce" = super.buildPythonPackage { - name = "rhodecode-enterprise-ce-4.13.2"; + name = "rhodecode-enterprise-ce-4.13.3"; buildInputs = [ self."pytest" self."py" From ee2d88a16de2c43aa12ce678b0d47ca9120f6be6 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Tue, 9 Oct 2018 12:14:43 +0200 Subject: [PATCH 11/12] release: Finish preparation for 4.13.3 --- .release.cfg | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.release.cfg b/.release.cfg index 45112775..39aba9e6 100644 --- a/.release.cfg +++ b/.release.cfg @@ -11,6 +11,7 @@ done = true done = true [task:pip2nix_generated] +done = true [task:changelog_updated] done = true @@ -19,7 +20,7 @@ done = true done = true [release] -state = in_progress +state = prepared version = 4.13.3 [task:updated_translation] From f77bfed4a7ff8734f22614bb8e67ac09d583d3e6 Mon Sep 17 00:00:00 2001 From: Marcin Kuzminski Date: Tue, 9 Oct 2018 12:14:44 +0200 Subject: [PATCH 12/12] Added tag v4.13.3 for changeset 7dc62c090881