diff --git a/release_dashboard/forms.py b/release_dashboard/forms.py index 43fcd54..5df8d6c 100644 --- a/release_dashboard/forms.py +++ b/release_dashboard/forms.py @@ -17,6 +17,11 @@ from django import forms from django.conf import settings rd_settings = settings.RELEASE_DASHBOARD_SETTINGS +trunk_projects = sorted(set(rd_settings['projects']) - + set(rd_settings['abandoned']) - + set(rd_settings['build_deps'])) +trunk_build_deps = sorted(set(rd_settings['build_deps']) - + set(rd_settings['abandoned'])) class BuildForm(forms.Form): @@ -43,3 +48,23 @@ class BuildReleaseForm(BuildForm): for project in rd_settings['projects']: self.fields['version_%s' % project] = forms.CharField(max_length=15) + + +class BuildTrunkDepForm(BuildForm): + + def __init__(self, *args, **kwargs): + super(BuildTrunkDepForm, self).__init__(*args, **kwargs) + + for project in trunk_build_deps: + self.fields['version_%s' % + project] = forms.CharField(max_length=15) + + +class BuildTrunkReleaseForm(BuildForm): + + def __init__(self, *args, **kwargs): + super(BuildTrunkReleaseForm, self).__init__(*args, **kwargs) + + for project in trunk_projects: + self.fields['version_%s' % + project] = forms.CharField(max_length=15) diff --git a/release_dashboard/static/release_dashboard/js/build.js b/release_dashboard/static/release_dashboard/js/build.js index ffd99fd..90c16e2 100644 --- a/release_dashboard/static/release_dashboard/js/build.js +++ b/release_dashboard/static/release_dashboard/js/build.js @@ -6,10 +6,18 @@ $('select#common_select').change(function() { var ignored = $('.version option[value="ignore"]' ); var version = ""; if(selected_version.match(/^branch/)) { - version = selected_version.replace( - /^branch\/(mr[0-9]+\.[0-9]+(\.[0-9]+)?)$/g, "$1"); + if(selected_version.match(/^branch\/master/)) { + var distribution = $('select#distribution option:selected').val(); + if(!distribution.match(/^auto/)) { + version = 'trunk' + '-' + distribution; + } + } + else { + version = selected_version.replace( + /^branch\/(mr[0-9]+\.[0-9]+(\.[0-9]+)?)$/g, "$1"); + } } - else { + else if(selected_version.match(/^tag/)) { version = selected_version.replace( /^tag\/(mr[0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?$/g, "$1"); } @@ -23,7 +31,11 @@ $('select#common_select').change(function() { $('tr.repo option[value="'+ selected_version + '"]').closest('tr').children('td,th').css('background-color','white'); var text = "Selected " + selected.length + " of " + ignored.length; $('#select_text_info').html(text); - $('input#version_release').val("release-" + version); + if(version.length > 0) { + $('input#version_release').val("release-" + version); + } else { + $('input#version_release').val(''); + } }); $('#main').click(function(e){ diff --git a/release_dashboard/templates/release_dashboard/build_content.html b/release_dashboard/templates/release_dashboard/build_content.html index 63ed3db..d113e0a 100644 --- a/release_dashboard/templates/release_dashboard/build_content.html +++ b/release_dashboard/templates/release_dashboard/build_content.html @@ -5,6 +5,7 @@ <h3 class="panel-title">Actions</h3> </div> <div class="panel-body"> +{% if common_versions %} <div class="form-group"> <label for="common_select">Common selection</label> <select class="form-control" id="common_select" @@ -18,6 +19,7 @@ {% endfor %} </select> </div> +{% endif %} <div class="form-group"> <label for="version_release">Release version</label> <input class="form-control" id="version_release" diff --git a/release_dashboard/templates/release_dashboard/build_trunk.html b/release_dashboard/templates/release_dashboard/build_trunk.html new file mode 100644 index 0000000..2e16439 --- /dev/null +++ b/release_dashboard/templates/release_dashboard/build_trunk.html @@ -0,0 +1,13 @@ +{% extends "release_dashboard/base.html" %} +{% load staticfiles %} +{% block title %}Build release{% endblock %} +{% block navlist %} + <li><a href="{% url 'release_dashboard:index'%}">Release Dashboard</a></li> + <li><a href="{% url 'release_dashboard:build_trunk_release'%}">Build Trunk Release</a></li> +{% endblock %} +{% block content %} +{% include "release_dashboard/build_content.html" %} +{% endblock %} +{% block extrajs %} +<script src="{% static "release_dashboard/js/build.js" %}"></script> +{% endblock %} diff --git a/release_dashboard/templates/release_dashboard/build_trunk_deps.html b/release_dashboard/templates/release_dashboard/build_trunk_deps.html new file mode 100644 index 0000000..365d5d3 --- /dev/null +++ b/release_dashboard/templates/release_dashboard/build_trunk_deps.html @@ -0,0 +1,13 @@ +{% extends "release_dashboard/base.html" %} +{% load staticfiles %} +{% block title %}Build dependences{% endblock %} +{% block navlist %} + <li><a href="{% url 'release_dashboard:index'%}">Release Dashboard</a></li> + <li><a href="{% url 'release_dashboard:build_trunk_deps'%}">Build Trunk dependences</a></li> +{% endblock %} +{% block content %} +{% include "release_dashboard/build_content.html" %} +{% endblock %} +{% block extrajs %} +<script src="{% static "release_dashboard/js/build.js" %}"></script> +{% endblock %} diff --git a/release_dashboard/templates/release_dashboard/index.html b/release_dashboard/templates/release_dashboard/index.html index a679869..9ba2ba6 100644 --- a/release_dashboard/templates/release_dashboard/index.html +++ b/release_dashboard/templates/release_dashboard/index.html @@ -23,6 +23,14 @@ <a href="{% url 'release_dashboard:build_release_tag'%}"> Build release by tag</a> </li> + <li class="list-group-item"> + <a href="{% url 'release_dashboard:build_trunk_deps'%}"> + Build Trunk release dependences</a> + </li> + <li class="list-group-item"> + <a href="{% url 'release_dashboard:build_trunk_release'%}"> + Build Trunk release</a> + </li> <li class="list-group-item"> <a href="{% url 'release_dashboard:hotfix'%}"> Hotfixes</a> diff --git a/release_dashboard/urls.py b/release_dashboard/urls.py index dcd44f8..c65c816 100644 --- a/release_dashboard/urls.py +++ b/release_dashboard/urls.py @@ -20,6 +20,10 @@ urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^build_deps/$', views.build_deps, name='build_deps'), url(r'^build/$', views.build_release, name='build_release'), + url(r'^build_trunk_deps/$', views.build_trunk_deps, + name='build_trunk_deps'), + url(r'^build_trunk/$', views.build_trunk_release, + name='build_trunk_release'), url(r'^build_tag/$', views.build_release, {'tag_only': True}, name='build_release_tag'), url(r'^hotfix/$', views.hotfix, name='hotfix'), diff --git a/release_dashboard/views.py b/release_dashboard/views.py index bb6d4a3..8d7aed1 100644 --- a/release_dashboard/views.py +++ b/release_dashboard/views.py @@ -25,11 +25,14 @@ from release_dashboard.models import Project from .utils import get_tags, get_branches, trigger_hotfix, trigger_build from .tasks import gerrit_fetch_info, gerrit_fetch_all from .forms import BuildDepForm, BuildReleaseForm +from .forms import BuildTrunkDepForm, BuildTrunkReleaseForm +from .forms import trunk_projects, trunk_build_deps rd_settings = settings.RELEASE_DASHBOARD_SETTINGS logger = logging.getLogger(__name__) regex_hotfix = re.compile(r'^mr[0-9]+\.[0-9]+\.[0-9]+$') regex_mr = re.compile(r'^mr.+$') +regex_master = re.compile(r'^master$') def index(request): @@ -197,3 +200,50 @@ def refresh_all(request): def refresh(request, project): res = gerrit_fetch_info.delay(project) return JsonResponse({'url': '/flower/task/%s' % res.id}) + + +def build_trunk_deps(request): + if request.method == "POST": + form = BuildTrunkDepForm(request.POST) + if form.is_valid(): + context = _build_logic(form, trunk_build_deps) + else: + context = {'error': 'form validation error'} + return render(request, 'release_dashboard/build_result.html', context) + else: + context = { + 'projects': _projects_versions( + trunk_build_deps, + regex_master, + ), + 'common_versions': { + 'tags': [], + 'branches': ['master', ] + }, + 'debian': rd_settings['debian_supported'], + } + return render(request, + 'release_dashboard/build_trunk_deps.html', context) + + +def build_trunk_release(request): + if request.method == "POST": + form = BuildTrunkReleaseForm(request.POST) + if form.is_valid(): + context = _build_logic(form, trunk_projects) + else: + context = {'error': 'form validation error'} + return render(request, 'release_dashboard/build_result.html', context) + else: + context = { + 'projects': _projects_versions( + trunk_projects, + regex_master, + ), + 'common_versions': { + 'tags': [], + 'branches': ['master', ] + }, + 'debian': rd_settings['debian_supported'], + } + return render(request, 'release_dashboard/build_trunk.html', context) diff --git a/repoapi/settings/common.py b/repoapi/settings/common.py index 3ba2f9c..f6a9631 100644 --- a/repoapi/settings/common.py +++ b/repoapi/settings/common.py @@ -242,4 +242,24 @@ RELEASE_DASHBOARD_SETTINGS = { "www_admin", "www_csc" ), + 'abandoned': ( + "asterisk", + "asterisk-sounds", + "cloudpbx-devices", + "collectd-mod-redis", + "comx", + "comx-sip", + "comx-xmpp", + "diva-drivers", + "hylafaxplus", + "iaxmodem", + "mediaproxy-ng", + "mediaproxy-redis", + "rtpengine-redis", + "ossbss", + "sems-prompts", + "sipsak", + "www_admin", + "www_csc", + ), }