Re: [OE-core] [PATCH] resulttool: Add reproducible log extraction

2019-09-06 Thread Joshua Watt



On 9/6/19 4:49 AM, Richard Purdie wrote:

On Thu, 2019-09-05 at 08:54 -0500, Joshua Watt wrote:

Adds an argument to the log subcommand to extract the raw logs from
the
reproducible selftest.

To prevent ambiguity, the "--raw" argument has been renamed
"--raw-ptest", although the old "--raw" argument is kept around for
compatibility.

[YOCTO #13324]

Signed-off-by: Joshua Watt 
---
  scripts/lib/resulttool/log.py | 33 ++---
  1 file changed, 30 insertions(+), 3 deletions(-)

diff --git a/scripts/lib/resulttool/log.py
b/scripts/lib/resulttool/log.py
index 25c3396717e..2352c767d91 100644
--- a/scripts/lib/resulttool/log.py
+++ b/scripts/lib/resulttool/log.py
@@ -16,6 +16,16 @@ def show_ptest(result, ptest, logger):
  print("ptest '%s' not found" % ptest)
  return 1
  
+def show_reproducible(result, reproducible, logger):

+try:
+print(result['reproducible'][reproducible]['diffoscope.text'
])
+return 0
+
+except KeyError:
+print("reproducible '%s' not found" % reproducible)
+return 1
+
+
  def log(args, logger):
  results = resultutils.load_resultsdata(args.source)
  
@@ -40,17 +50,28 @@ def log(args, logger):

  with open(dest, 'w') as f:
  f.write(ptest['log'])


You might want to consider this in autobuilder context:

http://git.yoctoproject.org/cgit.cgi/yocto-autobuilder-helper/tree/scripts/generate-testresult-index.py#n121

Since the indexer could extract reproducible logs as well as ptest
ones.


Yes, I've though about that, but so far I've purposely not done anything 
because I'm not sure what to do. Originally, I tried making the QA build 
run diffoscope on the package files that failed to build reproducible, 
but this took way too long and generated way too much data for the logs. 
I think that alternative *might* be to include the binary data from the 
packages so that diffoscope can be run on them offline, but this still 
seems like too much data.


Anyway, until we decide on a reasonable thing to do, I've omitted the 
--dump-reproducible option from resulttool. This does have the 
unfortunate side effect that you can't easily debug non-reproducible 
builds when the AB finds them, short of re-running the test locally, so 
it is something we should resolve soon.




Nathan: We probably need to think about the new testsuite pieces in
this context too...

Cheers,

Richard


--
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


Re: [OE-core] [PATCH] resulttool: Add reproducible log extraction

2019-09-06 Thread Richard Purdie
On Thu, 2019-09-05 at 08:54 -0500, Joshua Watt wrote:
> Adds an argument to the log subcommand to extract the raw logs from
> the
> reproducible selftest.
> 
> To prevent ambiguity, the "--raw" argument has been renamed
> "--raw-ptest", although the old "--raw" argument is kept around for
> compatibility.
> 
> [YOCTO #13324]
> 
> Signed-off-by: Joshua Watt 
> ---
>  scripts/lib/resulttool/log.py | 33 ++---
>  1 file changed, 30 insertions(+), 3 deletions(-)
> 
> diff --git a/scripts/lib/resulttool/log.py
> b/scripts/lib/resulttool/log.py
> index 25c3396717e..2352c767d91 100644
> --- a/scripts/lib/resulttool/log.py
> +++ b/scripts/lib/resulttool/log.py
> @@ -16,6 +16,16 @@ def show_ptest(result, ptest, logger):
>  print("ptest '%s' not found" % ptest)
>  return 1
>  
> +def show_reproducible(result, reproducible, logger):
> +try:
> +print(result['reproducible'][reproducible]['diffoscope.text'
> ])
> +return 0
> +
> +except KeyError:
> +print("reproducible '%s' not found" % reproducible)
> +return 1
> +
> +
>  def log(args, logger):
>  results = resultutils.load_resultsdata(args.source)
>  
> @@ -40,17 +50,28 @@ def log(args, logger):
>  with open(dest, 'w') as f:
>  f.write(ptest['log'])
> 

You might want to consider this in autobuilder context:

http://git.yoctoproject.org/cgit.cgi/yocto-autobuilder-helper/tree/scripts/generate-testresult-index.py#n121

Since the indexer could extract reproducible logs as well as ptest
ones.

Nathan: We probably need to think about the new testsuite pieces in
this context too...

Cheers,

Richard

-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


[OE-core] [PATCH] resulttool: Add reproducible log extraction

2019-09-05 Thread Joshua Watt
Adds an argument to the log subcommand to extract the raw logs from the
reproducible selftest.

To prevent ambiguity, the "--raw" argument has been renamed
"--raw-ptest", although the old "--raw" argument is kept around for
compatibility.

[YOCTO #13324]

Signed-off-by: Joshua Watt 
---
 scripts/lib/resulttool/log.py | 33 ++---
 1 file changed, 30 insertions(+), 3 deletions(-)

diff --git a/scripts/lib/resulttool/log.py b/scripts/lib/resulttool/log.py
index 25c3396717e..2352c767d91 100644
--- a/scripts/lib/resulttool/log.py
+++ b/scripts/lib/resulttool/log.py
@@ -16,6 +16,16 @@ def show_ptest(result, ptest, logger):
 print("ptest '%s' not found" % ptest)
 return 1
 
+def show_reproducible(result, reproducible, logger):
+try:
+print(result['reproducible'][reproducible]['diffoscope.text'])
+return 0
+
+except KeyError:
+print("reproducible '%s' not found" % reproducible)
+return 1
+
+
 def log(args, logger):
 results = resultutils.load_resultsdata(args.source)
 
@@ -40,17 +50,28 @@ def log(args, logger):
 with open(dest, 'w') as f:
 f.write(ptest['log'])
 
-if args.raw:
+if args.raw_ptest:
 if 'ptestresult.rawlogs' in r:
 print(r['ptestresult.rawlogs']['log'])
 else:
-print('Raw logs not found')
+print('Raw ptest logs not found')
+return 1
+
+if args.raw_reproducible:
+if 'reproducible.rawlogs' in r:
+print(r['reproducible.rawlogs']['log'])
+else:
+print('Raw reproducible logs not found')
 return 1
 
 for ptest in args.ptest:
 if not show_ptest(r, ptest, logger):
 return 1
 
+for reproducible in args.reproducible:
+if not show_reproducible(r, reproducible, logger):
+return 1
+
 def register_commands(subparsers):
 """Register subcommands from this plugin"""
 parser = subparsers.add_parser('log', help='show logs',
@@ -63,9 +84,15 @@ def register_commands(subparsers):
 help='show logs for a ptest')
 parser.add_argument('--dump-ptest', metavar='DIR',
 help='Dump all ptest log files to the specified directory.')
+parser.add_argument('--reproducible', action='append', default=[],
+help='show logs for a reproducible test')
 parser.add_argument('--prepend-run', action='store_true',
 help='''Dump ptest results to a subdirectory named after the test 
run when using --dump-ptest.
 Required if more than one test run is present in the 
result file''')
 parser.add_argument('--raw', action='store_true',
-help='show raw logs')
+help='show raw (ptest) logs. Deprecated. Alias for "--raw-ptest"', 
dest='raw_ptest')
+parser.add_argument('--raw-ptest', action='store_true',
+help='show raw ptest log')
+parser.add_argument('--raw-reproducible', action='store_true',
+help='show raw reproducible build logs')
 
-- 
2.21.0

-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core