Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package openQA for openSUSE:Factory checked in at 2026-07-01 16:37:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/openQA (Old) and /work/SRC/openSUSE:Factory/.openQA.new.11887 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openQA" Wed Jul 1 16:37:42 2026 rev:860 rq:1362716 version:5.1782822561.fa3defef Changes: -------- --- /work/SRC/openSUSE:Factory/openQA/openQA.changes 2026-06-29 17:34:39.718878496 +0200 +++ /work/SRC/openSUSE:Factory/.openQA.new.11887/openQA.changes 2026-07-01 16:38:01.207947325 +0200 @@ -1,0 +2,7 @@ +Tue Jun 30 12:29:29 UTC 2026 - [email protected] + +- Update to version 5.1782822561.fa3defef: + * docs: Add paragraph describing suse_notify AMQP service + * feat: Link to autoinst-log from details view + +------------------------------------------------------------------- Old: ---- openQA-5.1782729563.8f5a14b2.obscpio New: ---- openQA-5.1782822561.fa3defef.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ openQA-client-test.spec ++++++ --- /var/tmp/diff_new_pack.EO18mW/_old 2026-07-01 16:38:03.736035335 +0200 +++ /var/tmp/diff_new_pack.EO18mW/_new 2026-07-01 16:38:03.736035335 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-client Name: %{short_name}-test -Version: 5.1782729563.8f5a14b2 +Version: 5.1782822561.fa3defef Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-devel-test.spec ++++++ --- /var/tmp/diff_new_pack.EO18mW/_old 2026-07-01 16:38:03.768036449 +0200 +++ /var/tmp/diff_new_pack.EO18mW/_new 2026-07-01 16:38:03.768036449 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-devel Name: %{short_name}-test -Version: 5.1782729563.8f5a14b2 +Version: 5.1782822561.fa3defef Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA-test.spec ++++++ --- /var/tmp/diff_new_pack.EO18mW/_old 2026-07-01 16:38:03.816038121 +0200 +++ /var/tmp/diff_new_pack.EO18mW/_new 2026-07-01 16:38:03.820038260 +0200 @@ -18,7 +18,7 @@ %define short_name openQA Name: %{short_name}-test -Version: 5.1782729563.8f5a14b2 +Version: 5.1782822561.fa3defef Release: 0 Summary: Test package for openQA License: GPL-2.0-or-later ++++++ openQA-worker-test.spec ++++++ --- /var/tmp/diff_new_pack.EO18mW/_old 2026-07-01 16:38:03.864039791 +0200 +++ /var/tmp/diff_new_pack.EO18mW/_new 2026-07-01 16:38:03.864039791 +0200 @@ -18,7 +18,7 @@ %define short_name openQA-worker Name: %{short_name}-test -Version: 5.1782729563.8f5a14b2 +Version: 5.1782822561.fa3defef Release: 0 Summary: Test package for %{short_name} License: GPL-2.0-or-later ++++++ openQA.spec ++++++ --- /var/tmp/diff_new_pack.EO18mW/_old 2026-07-01 16:38:03.912041463 +0200 +++ /var/tmp/diff_new_pack.EO18mW/_new 2026-07-01 16:38:03.912041463 +0200 @@ -104,7 +104,7 @@ %define devel_requires %devel_no_selenium_requires chromedriver Name: openQA -Version: 5.1782729563.8f5a14b2 +Version: 5.1782822561.fa3defef Release: 0 Summary: Framework for automated system-level testing (web-frontend, scheduler and tools) Group: Development/Tools/Other ++++++ openQA-5.1782729563.8f5a14b2.obscpio -> openQA-5.1782822561.fa3defef.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1782729563.8f5a14b2/assets/javascripts/render.js new/openQA-5.1782822561.fa3defef/assets/javascripts/render.js --- old/openQA-5.1782729563.8f5a14b2/assets/javascripts/render.js 2026-06-29 12:39:23.000000000 +0200 +++ new/openQA-5.1782822561.fa3defef/assets/javascripts/render.js 2026-06-30 14:29:21.000000000 +0200 @@ -49,6 +49,23 @@ return 'resultunknown'; } +function createLogLink(module, step) { + const E = createElement; + const params = new URLSearchParams({ + filename: 'autoinst-log.txt', + filter: `[step:${module.category},${module.name},${step.num}]` + }); + const currentPath = window.location.pathname.replace(/\/$/, ''); + const logHref = `${currentPath}/logfile?${params.toString()}`; + const logLinkText = E('i', [''], { + class: 'step_action fa-regular fa-file-lines fa-lg', + title: 'Jump to logfile' + }); + const logStepAction = E('span', [logLinkText], {class: 'fa-stack'}); + const logLink = E('a', [logStepAction], {class: 'view_log', href: logHref}); + return logLink; +} + function renderModuleRow(module, snippets) { const E = createElement; const rowid = 'module_' + module.name.replace(/[^a-z0-9_-]+/gi, '-'); @@ -186,6 +203,9 @@ if (step.text && title !== 'Soft Failed') { const stepActions = E('span', [], {class: 'step_actions', style: 'float: right'}); stepActions.innerHTML = renderTemplate(snippets.bug_actions, {MODULE: module.name, STEP: step.num}); + + stepActions.append(createLogLink(module, step)); + const textresult = E('pre', [textData]); let html = stepActions.outerHTML; html += textresult.outerHTML; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1782729563.8f5a14b2/docs/UsersGuide.md new/openQA-5.1782822561.fa3defef/docs/UsersGuide.md --- old/openQA-5.1782729563.8f5a14b2/docs/UsersGuide.md 2026-06-29 12:39:23.000000000 +0200 +++ new/openQA-5.1782822561.fa3defef/docs/UsersGuide.md 2026-06-30 14:29:21.000000000 +0200 @@ -1871,6 +1871,12 @@ pipelines and posts failure notifications to Slack. It subscribes to openQA job events and tracks job results per build and job group. +Another option to receive custom notifications on a smartphone or PC is +[suse_notify](https://github.com/openSUSE/suse_notify/). +It is a small daemon listening on AMQP events and sending notifications to +[ntfy.sh](https://ntfy.sh). +SUSE is running an instance of this daemon listening on [rabbit.opensuse.org](https://rabbit.opensuse.org). + ## CLI interface Beside the `daemon` argument to run the actual web service the openQA startup script `/usr/share/openqa/script/openqa` supports further arguments. For a full list of those commands, just invoke `/usr/share/openqa/script/openqa -h`. This also works for sub-commands(e.g. `/usr/share/openqa/script/openqa minion -h`, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1782729563.8f5a14b2/lib/OpenQA/WebAPI/Plugin/Helpers.pm new/openQA-5.1782822561.fa3defef/lib/OpenQA/WebAPI/Plugin/Helpers.pm --- old/openQA-5.1782729563.8f5a14b2/lib/OpenQA/WebAPI/Plugin/Helpers.pm 2026-06-29 12:39:23.000000000 +0200 +++ new/openQA-5.1782822561.fa3defef/lib/OpenQA/WebAPI/Plugin/Helpers.pm 2026-06-30 14:29:21.000000000 +0200 @@ -69,6 +69,13 @@ }); $app->helper( + steploglink_for => sub ($c, $title, $url, $icon, $class = '') { + my $icons = $c->t(i => (class => "step_action fa-regular fa-lg fa-stack-1x $icon")); + my $content = $c->t(span => (class => 'fa-stack') => sub { $icons }); + return $c->link_to($url => (title => $title, class => $class) => sub { $content }); + }); + + $app->helper( stepvideolink_for => sub ($c, $testid, $file_name, $frametime) { my $t = sprintf '&t=%s,%s', $frametime->[0], $frametime->[1]; my $url = $c->url_for('video', testid => $testid)->query(filename => $file_name) . $t; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1782729563.8f5a14b2/t/ui/18-tests-details.t new/openQA-5.1782822561.fa3defef/t/ui/18-tests-details.t --- old/openQA-5.1782729563.8f5a14b2/t/ui/18-tests-details.t 2026-06-29 12:39:23.000000000 +0200 +++ new/openQA-5.1782822561.fa3defef/t/ui/18-tests-details.t 2026-06-30 14:29:21.000000000 +0200 @@ -479,6 +479,25 @@ }; }; +subtest 'render log links from steps' => sub { + $driver->find_element_by_link_text('Details')->click(); + for my $test ([1, 'text'], [2, 'screenshot']) { + my ($step, $label) = @$test; + subtest "step $step - $label" => sub { + $driver->find_element(qq{[href="#step/bootloader/$step"]})->click(); + wait_for_ajax(msg => "step $step of bootloader test module loaded"); + my @log_link_elems + = $driver->find_elements( + q{//span[contains(@class, 'step_actions')]//i[contains(@class, 'fa-file-lines')]/../..}, 'xpath'); + my $link = $log_link_elems[0]; + is $link->get_attribute('title'), 'Jump to logfile', 'log link exists'; + like $link->get_attribute('href'), + qr{/tests/99946/logfile\?filename=autoinst-log\.txt&filter=.*step.*installation.*bootloader.*$step}, + 'log href correct'; + }; + } +}; + subtest 'render video link if frametime is available' => sub { $driver->find_element_by_link_text('Details')->click(); $driver->find_element('[href="#step/bootloader/1"]')->click(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openQA-5.1782729563.8f5a14b2/templates/webapi/step/viewimg.html.ep new/openQA-5.1782822561.fa3defef/templates/webapi/step/viewimg.html.ep --- old/openQA-5.1782729563.8f5a14b2/templates/webapi/step/viewimg.html.ep 2026-06-29 12:39:23.000000000 +0200 +++ new/openQA-5.1782822561.fa3defef/templates/webapi/step/viewimg.html.ep 2026-06-30 14:29:21.000000000 +0200 @@ -91,6 +91,7 @@ % if ($video_file_name && $frametime) { %= stepvideolink_for $testid, $video_file_name, $frametime % } + %= steploglink_for 'Jump to logfile' => url_for('logfile')->query(filename => 'autoinst-log.txt', filter => sprintf("[step:%s,%s,%d]", $module->category, $module->name, param 'stepid')), 'fa-file-lines', 'view_log' </span> </div> <div id="needle_diff"> ++++++ openQA.obsinfo ++++++ --- /var/tmp/diff_new_pack.EO18mW/_old 2026-07-01 16:38:22.412685522 +0200 +++ /var/tmp/diff_new_pack.EO18mW/_new 2026-07-01 16:38:22.416685661 +0200 @@ -1,5 +1,5 @@ name: openQA -version: 5.1782729563.8f5a14b2 -mtime: 1782729563 -commit: 8f5a14b2fe38e2366cf728a523046b4a86ac98cb +version: 5.1782822561.fa3defef +mtime: 1782822561 +commit: fa3defef214d244c54a4f01c8f5b9fe9fb673044
