diff options
-rw-r--r-- | isotests/fixtures/clockchoices.json | 2 | ||||
-rw-r--r-- | isotests/fixtures/filesystems.json | 2 | ||||
-rw-r--r-- | isotests/fixtures/modules.json | 49 | ||||
-rw-r--r-- | isotests/models.py | 51 | ||||
-rw-r--r-- | isotests/urls.py | 8 | ||||
-rw-r--r-- | isotests/views.py | 64 | ||||
-rw-r--r-- | templates/isotests/add.html | 2 | ||||
-rw-r--r-- | templates/isotests/result_list.html | 34 | ||||
-rw-r--r-- | templates/isotests/results.html | 595 | ||||
-rw-r--r-- | templates/isotests/thanks.html | 14 | ||||
-rw-r--r-- | templates/public/index.html | 2 |
11 files changed, 616 insertions, 207 deletions
diff --git a/isotests/fixtures/clockchoices.json b/isotests/fixtures/clockchoices.json index 2c07812..6dfd06e 100644 --- a/isotests/fixtures/clockchoices.json +++ b/isotests/fixtures/clockchoices.json @@ -3,7 +3,7 @@ "pk": 1, "model": "isotests.clockchoice", "fields": { - "name": "default" + "name": "unchanged" } }, { diff --git a/isotests/fixtures/filesystems.json b/isotests/fixtures/filesystems.json index 4d3f1bc..5386c39 100644 --- a/isotests/fixtures/filesystems.json +++ b/isotests/fixtures/filesystems.json @@ -3,7 +3,7 @@ "pk": 1, "model": "isotests.filesystem", "fields": { - "name": "autoprepare (check the installed system, incl fstab)" + "name": "autoprepare" } }, { diff --git a/isotests/fixtures/modules.json b/isotests/fixtures/modules.json index 27d04c7..ae8a168 100644 --- a/isotests/fixtures/modules.json +++ b/isotests/fixtures/modules.json @@ -33,5 +33,54 @@ "fields": { "name": "btrfs" } + }, + { + "pk": 6, + "model": "isotests.module", + "fields": { + "name": "ext2" + } + }, + { + "pk": 7, + "model": "isotests.module", + "fields": { + "name": "ext3" + } + }, + { + "pk": 8, + "model": "isotests.module", + "fields": { + "name": "ext4" + } + }, + { + "pk": 9, + "model": "isotests.module", + "fields": { + "name": "swap" + } + }, + { + "pk": 10, + "model": "isotests.module", + "fields": { + "name": "xfs" + } + }, + { + "pk": 11, + "model": "isotests.module", + "fields": { + "name": "jfs" + } + }, + { + "pk": 12, + "model": "isotests.module", + "fields": { + "name": "reiserFS" + } } ] diff --git a/isotests/models.py b/isotests/models.py index bffb2d9..ae5bf96 100644 --- a/isotests/models.py +++ b/isotests/models.py @@ -7,19 +7,49 @@ class IsoOption(models.Model): name = models.CharField(max_length=200) + success_tests = None + failed_tests = None + def __unicode__(self): return str(self.name) def get_success_test(self): - test = self.test_set.filter(success=True).annotate(Max('iso__id')) - if test: - return test[0].iso.name + if not self.success_tests: + self.success_tests = self.test_set.filter(success=True).annotate(Max('iso__id')) + + if self.success_tests: + return self.success_tests[0].iso return None def get_failed_test(self): - test = self.test_set.filter(success=False).annotate(Max('iso__id')) - if test: - return test[0].iso.name + if not self.failed_tests: + self.failed_tests = self.test_set.filter(success=False).annotate(Max('iso__id')) + + if self.failed_tests: + return self.failed_tests[0].iso + return None + +class RollbackOption(IsoOption): + class Meta: + abstract = True + + success_rollback_tests = None + failed_rollback_tests = None + + def get_rollback_success_test(self): + if not self.success_rollback_tests: + self.success_rollback_tests = self.rollback_test_set.filter(success=True).annotate(Max('iso__id')) + + if self.success_rollback_tests: + return self.success_rollback_tests[0].iso + return None + + def get_rollback_failed_test(self): + if not self.failed_rollback_tests: + self.failed_rollback_tests = self.rollback_test_set.filter(success=False).annotate(Max('iso__id')) + + if self.failed_rollback_tests: + return self.failed_rollback_tests[0].iso return None class Iso(models.Model): @@ -50,10 +80,10 @@ class Source(IsoOption): class ClockChoice(IsoOption): pass -class Filesystem(IsoOption): +class Filesystem(RollbackOption): pass -class Module(IsoOption): +class Module(RollbackOption): pass class Bootloader(IsoOption): @@ -72,11 +102,10 @@ class Test(models.Model): clock_choice = models.ForeignKey(ClockChoice) filesystem = models.ForeignKey(Filesystem) modules = models.ManyToManyField(Module, null=True, blank=True) - rollback = models.BooleanField() rollback_filesystem = models.ForeignKey(Filesystem, - related_name="rollback_test", null=True, blank=True) + related_name="rollback_test_set", null=True, blank=True) rollback_modules = models.ManyToManyField(Module, - related_name="rollback_test", null=True, blank=True) + related_name="rollback_test_set", null=True, blank=True) bootloader = models.ForeignKey(Bootloader) success = models.BooleanField() comments = models.TextField(null=True, blank=True) diff --git a/isotests/urls.py b/isotests/urls.py index f60f0bc..7f43836 100644 --- a/isotests/urls.py +++ b/isotests/urls.py @@ -1,8 +1,12 @@ from django.conf.urls.defaults import patterns urlpatterns = patterns('isotests.views', - (r'^$', 'view_results'), - (r'^add/$', 'add_result') + (r'^$', 'view_results'), + (r'^add/$', 'add_result'), + (r'^thanks/$', 'thanks'), + (r'^results/$', 'view_results'), + (r'^results/(?P<option>[a-z0-9_]+)/(?P<value>.+)/$', 'view_results_for'), + (r'^results/(?P<isoid>.+)/$', 'view_results_iso'), ) # vim: set ts=4 sw=4 et: diff --git a/isotests/views.py b/isotests/views.py index cb7f23c..61d95e5 100644 --- a/isotests/views.py +++ b/isotests/views.py @@ -1,15 +1,22 @@ -from django.http import HttpResponse, HttpResponseRedirect +from django.forms import ModelChoiceField, CharField, TextInput from django.forms import ModelForm, RadioSelect, CheckboxSelectMultiple -from django.forms import ModelChoiceField +from django.forms import ModelMultipleChoiceField, BooleanField +from django.http import HttpResponse, HttpResponseRedirect +from django.template import Context, loader +from django.views.generic.simple import direct_to_template + from isotests.models import Iso, Architecture, IsoType, BootType from isotests.models import HardwareType, InstallType, Source, Test from isotests.models import ClockChoice, Filesystem, Module, Bootloader -from django.template import Context, loader -from django.views.generic.simple import direct_to_template class TestForm(ModelForm): class Meta: model = Test + fields = ("user_name", "user_email", "iso", "architecture", + "iso_type", "boot_type", "hardware_type", + "install_type", "source", "clock_choice", "filesystem", + "modules", "rollback_filesystem", "rollback_modules", + "bootloader", "success", "comments") widgets = { "architecture": RadioSelect(), "iso_type": RadioSelect(), @@ -18,20 +25,35 @@ class TestForm(ModelForm): "install_type": RadioSelect(), "source": RadioSelect(), "clock_choice": RadioSelect(), - "filesystem": RadioSelect(), - "rollback_filesystem": RadioSelect(), "bootloader": RadioSelect(), "modules": CheckboxSelectMultiple(), - "rollback_modules": CheckboxSelectMultiple(), } + success = BooleanField(help_text="Only check this if everything went fine. " \ + "If you you ran into any errors please specify them in the " \ + "comments.", required=False) iso = ModelChoiceField(queryset=Iso.objects.filter(active=True)) + filesystem = ModelChoiceField(queryset=Filesystem.objects.all(), + help_text="Check the installed system, including fstab.", + widget=RadioSelect()) + modules = ModelMultipleChoiceField(queryset=Module.objects.all(), + help_text="", widget=CheckboxSelectMultiple(), required=False) + rollback_filesystem = ModelChoiceField(queryset=Filesystem.objects.all(), + help_text="If you did a rollback followed by a new attempt to setup " \ + "your lockdevices/filesystems, select which option you took here.", + widget=RadioSelect(), required=False) + rollback_modules = ModelMultipleChoiceField(queryset=Module.objects.all(), + help_text="If you did a rollback followed b a new attempt to setup " \ + "your lockdevices/filesystems, select which option you took here.", + widget=CheckboxSelectMultiple(), required=False) + website = CharField(label='', + widget=TextInput(attrs={'style': 'display:none;'}), required=False) def add_result(request): - if request.method == 'POST': + if request.POST: form = TestForm(request.POST) - if form.is_valid(): + if form.is_valid() and request.POST['website'] == '': form.save() - return HttpResponseRedirect('/isotests') + return HttpResponseRedirect('/isotests/thanks/') else: form = TestForm() @@ -64,3 +86,25 @@ def view_results(request): 'bootloader_list': bootloader_list, }) return HttpResponse(t.render(c)) + +def view_results_iso(request, isoid): + iso = Iso.objects.get(pk=isoid) + test_list = Test.objects.filter(iso__pk=isoid) + context = { + 'iso_name': iso.name, + 'test_list': test_list + } + return direct_to_template(request, 'isotests/result_list.html', context) + +def view_results_for(request, option, value): + kwargs = {option: value} + test_list = Test.objects.filter(**kwargs).order_by("iso__name", "pk") + context = { + 'option': option, + 'value': value, + 'test_list': test_list + } + return direct_to_template(request, 'isotests/result_list.html', context) + +def thanks(request): + return direct_to_template(request, "isotests/thanks.html", None) diff --git a/templates/isotests/add.html b/templates/isotests/add.html index 07d3ed8..466beb8 100644 --- a/templates/isotests/add.html +++ b/templates/isotests/add.html @@ -3,6 +3,8 @@ {% block title %}Arch Linux - Test Result Entry{% endblock %} {% block content %} +<a href="/isotests/">Go back to results</a> + <div class="box"> <h2>Arch releng iso build test result entry</h2> <form action="" method="post">{% csrf_token %} diff --git a/templates/isotests/result_list.html b/templates/isotests/result_list.html new file mode 100644 index 0000000..06042b1 --- /dev/null +++ b/templates/isotests/result_list.html @@ -0,0 +1,34 @@ +{% extends "base.html" %} + +{% block content %} +<a href="/isotests/">Go back to results</a> +<a href="/isotests/add/">Give feedback</a> + +<div class="box"> + <h2> + Results for : + {% if option %} + {{ option }}: {{ value }} + {% endif %} + + {% if iso_name %} + {{ iso_name }} + {% endif %} + </h2> + + <table> + <tr> + <th>iso</th> + <th>nickname</th> + <th>success?</th> + </tr> + {% for test in test_list %} + <tr> + <td>{{ test.iso.name }}</td> + <td>{{ test.user_name }}</td> + <td>{{ test.success|yesno }}</td> + </tr> + {% endfor %} + </table> +</div> +{% endblock %} diff --git a/templates/isotests/results.html b/templates/isotests/results.html index b773056..5d605e8 100644 --- a/templates/isotests/results.html +++ b/templates/isotests/results.html @@ -3,188 +3,419 @@ {% block title %}Arch Linux - Testresults{% endblock %} {% block content %} +<a href="/isotests/add/">Give feedback</a> + <div class="box"> - <h2>Arch releng iso build test results</h2> - <table> - <tr> - <td> - <h3>image arch</h3> - </td> - </tr> - {% if architecture_list %} - {% for architecture in architecture_list %} - <tr> - <td>{{ architecture.name }}</td> - <td>{{ architecture.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ architecture.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>image type</h3> - </td> - </tr> - {% if iso_type_list %} - {% for iso_type in iso_type_list %} - <tr> - <td>{{ iso_type.name }}</td> - <td>{{ iso_type.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ iso_type.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>image boot</h3> - </td> - </tr> - {% if boot_type_list %} - {% for boot_type in boot_type_list %} - <tr> - <td>{{ boot_type.name }}</td> - <td>{{ boot_type.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ boot_type.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>hardware type</h3> - </td> - </tr> - {% if hardware_type_list %} - {% for hardware_type in hardware_type_list %} - <tr> - <td>{{ hardware_type.name }}</td> - <td>{{ hardware_type.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ hardware_type.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>install type</h3> - </td> - </tr> - {% if install_type_list %} - {% for install_type in install_type_list %} - <tr> - <td>{{ install_type.name }}</td> - <td>{{ install_type.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ install_type.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>source selection</h3> - </td> - </tr> - {% if source_list %} - {% for source in source_list %} - <tr> - <td>{{ source.name }}</td> - <td>{{ source.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ source.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>clock</h3> - </td> - </tr> - {% if clock_choices_list %} - {% for clock_choice in clock_choices_list %} - <tr> - <td>{{ clock_choice.name }}</td> - <td>{{ clock_choice.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ clock_choice.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>partitioning/filesystems</h3> - </td> - </tr> - {% if filesystem_list %} - {% for filesystem in filesystem_list %} - <tr> - <td>{{ filesystem.name }}</td> - <td>{{ filesystem.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ filesystem.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>fancy stuff</h3> - </td> - </tr> - {% if module_list %} - {% for module in module_list %} - <tr> - <td>{{ module.name }}</td> - <td>{{ module.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ module.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>rollback</h3> - </td> - </tr> - <tr> - <td>yes</td> - </tr> - <tr> - <td>no</td> - </tr> - <tr> - <td> - <h4>rollback: partitioning/filesystems</h4> - </td> - </tr> - {% if filesystem_list %} - {% for filesystem in filesystem_list %} - <tr> - <td>{{ filesystem.name }}</td> - <td>{{ filesystem.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ filesystem.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h4>rollback: fancy stuff</h4> - </td> - </tr> - {% if module_list %} - {% for module in module_list %} - <tr> - <td>{{ module.name }}</td> - <td>{{ module.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ module.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - <tr> - <td> - <h3>bootloader</h3> - </td> - </tr> - {% if bootloader_list %} - {% for bootloader in bootloader_list %} - <tr> - <td>{{ bootloader.name }}</td> - <td>{{ bootloader.get_success_test|default_if_none:"Never succeeded" }}</td> - <td>{{ bootloader.get_failed_test|default_if_none:"Never failed" }}</td> - </tr> - {% endfor %} - {% endif %} - </table> + <h2>Arch releng iso build test results</h2> + <table> + <tr> + <td> + <h3>image arch</h3> + </td> + </tr> + {% if architecture_list %} + {% for architecture in architecture_list %} + <tr> + <td> + <a href="/isotests/results/architecture/{{ architecture.pk }}/"> + {{ architecture.name }} + </a> + </td> + <td> + {% if architecture.get_success_test %} + <a href="/isotests/results/{{ architecture.get_success_test.pk }}/"> + {{ architecture.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if architecture.get_failed_test %} + <a href="/isotests/results/{{ architecture.get_failed_test.pk }}/"> + {{ architecture.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h3>image type</h3> + </td> + </tr> + {% if iso_type_list %} + {% for iso_type in iso_type_list %} + <tr> + <td> + <a href="/isotests/results/iso_type/{{ iso_type.pk }}/"> + {{ iso_type.name }} + </a> + </td> + <td> + {% if iso_type.get_success_test %} + <a href="/isotests/results/{{ iso_type.get_success_test.pk }}/"> + {{ iso_type.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if iso_type.get_failed_test %} + <a href="/isotests/results/{{ iso_type.get_failed_test.pk }}/"> + {{ iso_type.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h3>image boot</h3> + </td> + </tr> + {% if boot_type_list %} + {% for boot_type in boot_type_list %} + <tr> + <td> + <a href="/isotests/results/boot_type/{{ boot_type.pk }}/"> + {{ boot_type.name }} + </a> + </td> + <td> + {% if boot_type.get_success_test %} + <a href="/isotests/results/{{ boot_type.get_success_test.pk }}/"> + {{ boot_type.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if boot_type.get_failed_test %} + <a href="/isotests/results/{{ boot_type.get_failed_test.pk }}/"> + {{ boot_type.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h3>hardware type</h3> + </td> + </tr> + {% if hardware_type_list %} + {% for hardware_type in hardware_type_list %} + <tr> + <td> + <a href="/isotests/results/hardware_type/{{ hardware_type.pk }}/"> + {{ hardware_type.name }} + </a> + </td> + <td> + {% if hardware_type.get_success_test %} + <a href="/isotests/results/{{ hardware_type.get_success_test.pk }}/"> + {{ hardware_type.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if hardware_type.get_failed_test %} + <a href="/isotests/results/{{ hardware_type.get_failed_test.pk }}/"> + {{ hardware_type.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h3>install type</h3> + </td> + </tr> + {% if install_type_list %} + {% for install_type in install_type_list %} + <tr> + <td> + <a href="/isotests/results/install_type/{{ install_type.pk }}/"> + {{ install_type.name }} + </a> + </td> + <td> + {% if install_type.get_success_test %} + <a href="/isotests/results/{{ install_type.get_success_test.pk }}/"> + {{ install_type.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if install_type.get_failed_test %} + <a href="/isotests/results/{{ install_type.get_failed_test.pk }}/"> + {{ install_type.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h3>source selection</h3> + </td> + </tr> + {% if source_list %} + {% for source in source_list %} + <tr> + <td> + <a href="/isotests/results/source/{{ source.pk }}/"> + {{ source.name }} + </a> + </td> + <td> + {% if source.get_success_test %} + <a href="/isotests/results/{{ source.get_success_test.pk }}/"> + {{ source.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if source.get_failed_test %} + <a href="/isotests/results/{{ source.get_failed_test.pk }}/"> + {{ source.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h3>clock</h3> + </td> + </tr> + {% if clock_choices_list %} + {% for clock_choice in clock_choices_list %} + <tr> + <td> + <a href="/isotests/results/clock_choice/{{ clock_choice.pk }}/"> + {{ clock_choice.name }} + </a> + </td> + <td> + {% if clock_choice.get_success_test %} + <a href="/isotests/results/{{ clock_choice.get_success_test.pk }}/"> + {{ clock_choice.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if clock_choice.get_failed_test %} + <a href="/isotests/results/{{ clock_choice.get_failed_test.pk }}/"> + {{ clock_choice.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h3>partitioning/filesystems</h3> + </td> + </tr> + {% if filesystem_list %} + {% for filesystem in filesystem_list %} + <tr> + <td> + <a href="/isotests/results/filesystem/{{ filesystem.pk }}/"> + {{ filesystem.name }} + </a> + </td> + <td> + {% if filesystem.get_success_test %} + <a href="/isotests/results/{{ filesystem.get_success_test.pk }}/"> + {{ filesystem.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if filesystem.get_failed_test %} + <a href="/isotests/results/{{ filesystem.get_failed_test.pk }}/"> + {{ filesystem.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h3>fancy stuff</h3> + </td> + </tr> + {% if module_list %} + {% for module in module_list %} + <tr> + <td> + <a href="/isotests/results/modules/{{ module.pk }}/"> + {{ module.name }} + </a> + </td> + <td> + {% if module.get_success_test %} + <a href="/isotests/results/{{ module.get_success_test.pk }}/"> + {{ module.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if module.get_failed_test %} + <a href="/isotests/results/{{ module.get_failed_test.pk }}/"> + {{ module.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h4>rollback: partitioning/filesystems</h4> + </td> + </tr> + {% if filesystem_list %} + {% for filesystem in filesystem_list %} + <tr> + <td> + <a href="/isotests/results/rollback_filesystem/{{ filesystem.pk }}/"> + {{ filesystem.name }} + </a> + </td> + <td> + {% if filesystem.get_rollback_success_test %} + <a href="/isotests/results/{{ filesystem.get_rollback_success_test.pk }}/"> + {{ filesystem.get_rollback_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if filesystem.get_rollback_failed_test %} + <a href="/isotests/results/{{ filesystem.get_rollback_failed_test.pk }}/"> + {{ filesystem.get_rollback_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h4>rollback: fancy stuff</h4> + </td> + </tr> + {% if module_list %} + {% for module in module_list %} + <tr> + <td> + <a href="/isotests/results/rollback_modules/{{ module.pk }}/"> + {{ module.name }} + </a> + </td> + <td> + {% if module.get_rollback_success_test %} + <a href="/isotests/results/{{ module.get_rollback_success_test.pk }}/"> + {{ module.get_rollback_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if module.get_rollback_failed_test %} + <a href="/isotests/results/{{ module.get_rollback_failed_test.pk }}/"> + {{ module.get_rollback_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + <tr> + <td> + <h3>bootloader</h3> + </td> + </tr> + {% if bootloader_list %} + {% for bootloader in bootloader_list %} + <tr> + <td> + <a href="/isotests/results/bootloader/{{ bootloader.pk }}/"> + {{ bootloader.name }} + </a> + </td> + <td> + {% if bootloader.get_success_test %} + <a href="/isotests/results/{{ bootloader.get_success_test.pk }}/"> + {{ bootloader.get_success_test.name }} + </a> + {% else %} + Never succeeded + {% endif %} + </td> + <td> + {% if bootloader.get_failed_test %} + <a href="/isotests/results/{{ bootloader.get_failed_test.pk }}/"> + {{ bootloader.get_failed_test.name }} + </a> + {% else %} + Never failed + {% endif %} + </td> + </tr> + {% endfor %} + {% endif %} + </table> </div> {% endblock %} diff --git a/templates/isotests/thanks.html b/templates/isotests/thanks.html new file mode 100644 index 0000000..aa4fea2 --- /dev/null +++ b/templates/isotests/thanks.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block title %}Arch Linux - Feedback - Thanks!{% endblock %} + +{% block content %} +<a href="/isotests/">Go back to results</a> +<a href="/isotests/add">Give more feedback</a> + +<div class="box"> + <h2>Thanks!</h2> + Thank you for taking the time to give us this information! + Your results have been succesfully added to our database. +</div> +{% endblock %} diff --git a/templates/public/index.html b/templates/public/index.html index 132412f..aa65121 100644 --- a/templates/public/index.html +++ b/templates/public/index.html @@ -119,6 +119,8 @@ title="Arch communities in your native language">International Communities</a></li> <li><a href="https://wiki.archlinux.org/index.php/Related_Projects" title="Projects that are in some way related to Arch Linux">Related Projects</a></li> + <li><a href="/isotests/" + title="releng-testbuild-feedback">Releng-testbuild-feedback</a></li> </ul> <h4>Support</h4> |