public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Uladzimir Bely <ubely@ilbers.de>
To: isar-users@googlegroups.com
Subject: [RFC v2 1/3] meta: Reuse existing local isar-apt repo in new builds
Date: Mon, 13 Jun 2022 09:07:57 +0200	[thread overview]
Message-ID: <20220613070759.16949-2-ubely@ilbers.de> (raw)
In-Reply-To: <20220613070759.16949-1-ubely@ilbers.de>

The idea of reusing isar-apt repo at second build is to early
exit from build-related tasks if the package with the same
version already exists in current isar-apt repo.

Also, redefining default values of REPO_ISAR_DIR and REPO_ISAR_DB_DIR
maybe useful to share isar-apt between different builds and not to
keep it under ${TMPDIR}:

REPO_ISAR_DIR = "/path/to/isar-apt/${DISTRO}-${DISTRO_ARCH}/apt"
REPO_ISAR_DB_DIR = "/path/to/isar-apt/${DISTRO}-${DISTRO_ARCH}/db"

The variable ISAR_APT_REUSE in local.conf controls the behvaiour:

0: Don't use isar-apt cache, always rebuilt packages (default)
1: Use local isar-apt cache, rebuilt packages only if needed

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta-isar/conf/local.conf.sample    |  4 ++
 meta/classes/dpkg-base.bbclass      |  1 +
 meta/classes/isar-apt-cache.bbclass | 69 +++++++++++++++++++++++++++++
 3 files changed, 74 insertions(+)
 create mode 100644 meta/classes/isar-apt-cache.bbclass

diff --git a/meta-isar/conf/local.conf.sample b/meta-isar/conf/local.conf.sample
index 58f3e1a2..523da5c3 100644
--- a/meta-isar/conf/local.conf.sample
+++ b/meta-isar/conf/local.conf.sample
@@ -221,6 +221,10 @@ ISAR_CROSS_COMPILE ?= "0"
 # does not access the network
 #BB_NO_NETWORK ?= "1"
 
+#
+# Uncomment to use previously built isar_apt repo if package version hasn't changed
+#ISAR_APT_REUSE ?= "1"
+
 # Set root password to 'root'
 # Password was encrypted using following command:
 #   mkpasswd -m sha512crypt -R 10000
diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass
index 7e032ba3..a9697fbd 100644
--- a/meta/classes/dpkg-base.bbclass
+++ b/meta/classes/dpkg-base.bbclass
@@ -9,6 +9,7 @@ inherit debianize
 inherit terminal
 inherit repository
 inherit deb-dl-dir
+inherit isar-apt-cache
 
 DEPENDS ?= ""
 
diff --git a/meta/classes/isar-apt-cache.bbclass b/meta/classes/isar-apt-cache.bbclass
new file mode 100644
index 00000000..4550886d
--- /dev/null
+++ b/meta/classes/isar-apt-cache.bbclass
@@ -0,0 +1,69 @@
+# This software is a part of ISAR.
+# Copyright (C) 2017-2019 Siemens AG
+# Copyright (C) 2019 ilbers GmbH
+#
+# SPDX-License-Identifier: MIT
+
+iac_check_package_in_repo() {
+    DISTS_ISAR="${REPO_ISAR_DIR}/${DISTRO}/dists/${DEBDISTRONAME}"
+    PACKAGES="${DISTS_ISAR}/main/binary-${PACKAGE_ARCH}/Packages"
+
+    if [ ! -f "${PACKAGES}" ]; then
+        return 1
+    fi
+
+    if ! grep -q "^\(Package\|Source\): ${PN}$" "${PACKAGES}"; then
+        return 2
+    fi
+
+    local repo_version=$(sed -n -e '/^\(Package\|Source\): ${PN}$/,/Version/p' ${PACKAGES} | grep '^Version' | sed -e 's/.* //' | head -n1)
+    local new_version=$(head -n1 ${S}/debian/changelog | sed -e 's/.* (\(.*\)) .*/\1/' | head -n1)
+
+    if [ "${repo_version}" != "${new_version}" ]; then
+        return 3
+    fi
+
+    bbnote "Package ${PN}-${PV} is already in isar-apt repo, reuse it"
+    return 0
+}
+
+iac_check_need_rebuild() {
+    if [ "${ISAR_APT_REUSE}" != "1" ]; then
+       return 1
+    fi
+
+    iac_check_package_in_repo
+}
+
+def iac_check_task_early_exit(d):
+    try:
+        bb.build.exec_func("iac_check_need_rebuild", d)
+        return True
+    except:
+        return False
+
+
+do_apt_fetch_prepend() {
+    iac_check_need_rebuild && return
+}
+
+do_apt_unpack_prepend() {
+    iac_check_need_rebuild && return
+}
+
+do_prepare_build_prepend() {
+    iac_check_need_rebuild && return
+}
+
+do_deploy_deb_prepend() {
+    iac_check_need_rebuild && return
+}
+
+do_install_builddeps_prepend() {
+    iac_check_need_rebuild && return
+}
+
+python do_dpkg_build_prepend() {
+    if iac_check_task_early_exit(d):
+        return 0
+}
-- 
2.20.1


  reply	other threads:[~2022-06-13  7:08 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-13  7:07 [RFC v2 0/3] PoC for isar-apt repo reusing Uladzimir Bely
2022-06-13  7:07 ` Uladzimir Bely [this message]
2022-06-13  7:07 ` [RFC v2 2/3] doc: Add section for isar-apt reuse functionality Uladzimir Bely
2022-06-13  7:07 ` [RFC v2 3/3] ci: Added test " Uladzimir Bely

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=20220613070759.16949-2-ubely@ilbers.de \
    --to=ubely@ilbers.de \
    --cc=isar-users@googlegroups.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