public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Henning Schild <henning.schild@siemens.com>
To: venkata.pyla@toshiba-tsip.com
Cc: isar-users@googlegroups.com, jan.kiszka@siemens.com,
	kazuhiro3.hayashi@toshiba.co.jp, dinesh.kumar@toshiba-tsip.com
Subject: Re: [PATCH 2/2] repro-build-test.py: Test to check images are reproducible
Date: Sat, 7 Jan 2023 01:01:11 +0100	[thread overview]
Message-ID: <20230107010111.4136d84d@md1za8fc.ad001.siemens.net> (raw)
In-Reply-To: <20221219144147.31245-3-venkata.pyla@toshiba-tsip.com>

This was merged into "master", if we did have linter checks like
"flake8" on python code this one would certainly fail them.

A simple
black testsuite/repro-build-test.py

already makes it much happier.

And the several "imported but unused" could also be checked.

venkata pyla please have a look at this if you want

run
black testsuite/repro-build-test.py

and see if you like the result

run
flake8 testsuite/repro-build-test.py

and see if you can fix things it reports

possibly do that in "black" and "flake8" loops until both agree

And maybe do the same thing for other .py files if you like.

The whole repro story is about being pedantic so let us use tools that
help us with being very pedantic.

Henning


Am Mon, 19 Dec 2022 20:11:47 +0530
schrieb venkata.pyla@toshiba-tsip.com:

> From: venkata pyla <venkata.pyla@toshiba-tsip.com>
> 
> This test verifies whether the images are reproducible by checking
> with in-depth comparision tool `diffoscope` and produces a
> comparision output in plain text format for checking the differences.
> 
> Signed-off-by: venkata pyla <venkata.pyla@toshiba-tsip.com>
> ---
>  testsuite/repro-build-test.py | 68
> +++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+)
>  create mode 100755 testsuite/repro-build-test.py
> 
> diff --git a/testsuite/repro-build-test.py
> b/testsuite/repro-build-test.py new file mode 100755
> index 0000000..e89becf
> --- /dev/null
> +++ b/testsuite/repro-build-test.py
> @@ -0,0 +1,68 @@
> +#!/usr/bin/env python3
> +
> +import glob
> +import os
> +import re
> +import tempfile
> +import time
> +
> +from cibuilder import CIBuilder, isar_root
> +from avocado.utils import process
> +
> +class ReproBuild(CIBuilder):
> +
> +    """
> +    Test reproducible builds by comparing the artifacts
> +
> +    :avocado: tags=repro-build
> +    """
> +    def test_repro_build(self):
> +        target = self.params.get('build_target',
> default='mc:qemuamd64-bullseye:isar-image-base')
> +        source_date_epoch = self.params.get('source_date_epoch',
> default=self.git_last_commit_timestamp())
> +        self.init()
> +        self.build_repro_image(target, source_date_epoch,
> 'image1.tar.gz')
> +        self.build_repro_image(target, source_date_epoch,
> 'image2.tar.gz')
> +        self.compare_repro_image('image1.tar.gz', 'image2.tar.gz')
> +
> +    def git_last_commit_timestamp(self):
> +        return process.run('git log -1 --pretty=%ct').stdout
> +
> +    def get_image_path(self, target_name):
> +        image_dir = "tmp/deploy/images"
> +        target_params = target_name.split(':')
> +        machine = target_params[1].split('-')[0]
> +        distro = 'debian-' + target_params[1].split('-')[1]
> +        image_type = target_params[2]
> +        return
> f'{image_dir}/{machine}/{image_type}-{distro}-{machine}.tar.gz' +
> +    def build_repro_image(self, target, source_date_epoch=None
> ,image_name='image.tar.gz'): +
> +        if not source_date_epoch:
> +            self.error("Reproducible build should configure with
> source_date_epoch time") +
> +        # clean artifacts before build
> +        self.clean()
> +
> +        # Build
> +        self.log.info("Started Build " + image_name)
> +        self.configure(source_date_epoch=source_date_epoch)
> +        self.bitbake(target)
> +
> +        # copy the artifacts image name with given name
> +        image_path = self.get_image_path(target)
> +        self.log.info("Copy image " + image_path + " as " +
> image_name)
> +        self.move_in_build_dir(image_path, image_name)
> +
> +    def clean(self):
> +        self.delete_from_build_dir('tmp')
> +        self.delete_from_build_dir('sstate-cache')
> +
> +    def compare_repro_image(self, image1, image2):
> +        self.log.info("Compare artifacts image1: " + image1 + ",
> image2: " + image2)
> +        result = process.run('diffoscope '
> +                        '--text ' + self.build_dir +
> '/diffoscope-output.txt'
> +                        ' ' + self.build_dir + '/' + image1 +
> +                        ' ' + self.build_dir + '/' + image2 ,
> +                        ignore_status = True)
> +        if result.exit_status > 0:
> +            self.fail(f'Images {image1} and {image2} are not
> reproducible')


  reply	other threads:[~2023-01-07  0:01 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-07  8:25 [PATCH] image.bbclass: set file timestamps inside the rootfs and initramfs image venkata.pyla
2022-11-07  8:50 ` Moessbauer, Felix
2022-11-09  6:56   ` Venkata.Pyla
2022-11-07  8:53 ` Henning Schild
2022-11-09  9:27   ` Venkata.Pyla
2022-11-10  7:12     ` Henning Schild
2022-11-20  7:53       ` [PATCH] scripts/repro-test.sh: script to test reproducibility of Isar image venkata.pyla
2022-11-22  7:28         ` Anton Mikanovich
2022-11-22  8:49           ` Venkata.Pyla
2022-12-19 14:41             ` [PATCH 0/2] Test for verifiying reproducible images venkata.pyla
2022-12-28  8:40               ` Anton Mikanovich
2023-01-02  6:24                 ` [PATCH] repro-build-test.py: Fix date_epoch time contains byte character b'' venkata.pyla
2023-01-11  5:42                   ` Uladzimir Bely
2022-12-19 14:41             ` [PATCH 1/2] cibuilder.py: Add source_date_epoch to build configuration venkata.pyla
2022-12-19 14:41             ` [PATCH 2/2] repro-build-test.py: Test to check images are reproducible venkata.pyla
2023-01-07  0:01               ` Henning Schild [this message]
2022-11-21  5:16       ` [PATCH] image.bbclass: set file timestamps inside the rootfs and initramfs image Venkata.Pyla
2022-11-10  9:52 ` Balasubramanian Sundaram
2022-11-10 10:03   ` Anton Mikanovich
2022-11-10 10:17     ` Balasubramanian Sundaram
2022-11-10 10:19       ` Balasubramanian Sundaram
2022-11-10 10:27       ` Anton Mikanovich
2022-11-10 10:51         ` Balasubramanian Sundaram
2022-11-10 16:30           ` Henning Schild
2022-11-10 17:05             ` Henning Schild

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230107010111.4136d84d@md1za8fc.ad001.siemens.net \
    --to=henning.schild@siemens.com \
    --cc=dinesh.kumar@toshiba-tsip.com \
    --cc=isar-users@googlegroups.com \
    --cc=jan.kiszka@siemens.com \
    --cc=kazuhiro3.hayashi@toshiba.co.jp \
    --cc=venkata.pyla@toshiba-tsip.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox