From 9063493fc3e6ad0f7defb08e09b80c28b4a04232 Mon Sep 17 00:00:00 2001
From: Pavel Zhukov <pavel.zhukov@huawei.com>
Date: Mon, 23 May 2022 09:51:02 +0200
Subject: [PATCH] .oniro-ci: Add abi-checker to CI

ABI checker implementation is meta-binaryaudit. Adding it for CI only
to not extend support surface of the project.
Added to three flavours for now. It can be easily extended to all jobs
if needed in the future

Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com>
---
 .oniro-ci/build-generic.yaml         | 23 +++++++++++++++++++++++
 .oniro-ci/machines-and-flavours.yaml |  6 +++---
 manifests/ci.xml                     |  9 +++++++++
 3 files changed, 35 insertions(+), 3 deletions(-)
 create mode 100644 manifests/ci.xml

diff --git a/.oniro-ci/build-generic.yaml b/.oniro-ci/build-generic.yaml
index fe7d431e..bc79cda5 100644
--- a/.oniro-ci/build-generic.yaml
+++ b/.oniro-ci/build-generic.yaml
@@ -162,6 +162,17 @@
           | sed -e 's/^CI_ONIRO_BB_LOCAL_CONF_plus_equals_//g' -e 's/"/\\"/g' -e 's/=/ += "/g' -e 's/$/"/g' \
           | sort \
           | tee -a conf/local.conf )
+    # Variables in the form of '^CI_ONIRO_BB_BBLAYERS_CONF_plus_equals_attr' are
+    # converted to 'attr += "value"' and appended to bblayers.conf
+    # this is useful if layer has to be added but bitbake add-layer command cannot be used 
+    # (for example this layer's class is inherited via local.conf already)
+    - |
+      ( set +o pipefail;
+        env \
+          | grep -E '^CI_ONIRO_BB_BBLAYERS_CONF_plus_equals_[A-Z_0-9]+=' \
+          | sed -e 's/^CI_ONIRO_BB_BBLAYERS_CONF_plus_equals_//g' -e 's/"/\\"/g' -e 's/=/ += "/g' -e 's/$/"/g' \
+          | sort \
+          | tee -a conf/bblayers.conf )
 
     # Sanity check: disallow using public build cache with a specific setting
     # in local.conf. The list of settings may grow over time.
@@ -275,6 +286,10 @@
           done
         )
       fi
+      # Compress and copy artifacts of do_abicheck task (if any)
+      if test -n "$CI_ONIRO_ABICHECK_TOPDIR" && test -d "$BITBAKE_TMPDIR"/../"$CI_ONIRO_ABICHECK_TOPDIR"; then
+            tar -cJf "$CI_PROJECT_DIR"/artifacts/abicheck-"$CI_COMMIT_SHA".tar.xz "$BITBAKE_TMPDIR"/../"$CI_ONIRO_ABICHECK_TOPDIR"/*/*/binaryaudit
+      fi
       set +x
   artifacts:
     paths:
@@ -399,6 +414,14 @@
 .build:
  extends: .build-recipe
 
+.check-abi:
+  variables:
+    CI_ONIRO_BB_LOCAL_CONF_plus_equals_INHERIT: abicheck
+    CI_ONIRO_BB_LOCAL_CONF_BINARY_AUDIT_WARN_ONLY: "1"
+    CI_ONIRO_MANIFEST_NAME: manifests/ci.xml
+    CI_ONIRO_BB_BBLAYERS_CONF_plus_equals_BBLAYERS: "../meta-binaryaudit"
+    CI_ONIRO_ABICHECK_TOPDIR: "./buildhistory/packages"
+
 # This job is documented in docs/ci/hidden-jobs/build-docs.rst
 .build-docs:
   interruptible: true
diff --git a/.oniro-ci/machines-and-flavours.yaml b/.oniro-ci/machines-and-flavours.yaml
index 3ca312aa..ed59249c 100644
--- a/.oniro-ci/machines-and-flavours.yaml
+++ b/.oniro-ci/machines-and-flavours.yaml
@@ -32,7 +32,7 @@
       allow_failure: true
 
 .linux-qemu-x86:
-  extends: .build-wic-image
+  extends: [.build-wic-image, .check-abi]
   variables:
     MACHINE: qemux86
     CI_ONIRO_BUILD_FLAVOUR: linux
@@ -51,7 +51,7 @@ linux-qemu-x86-clang:
  extends: [.linux-qemu-x86, .toolchain-clang]
 
 .linux-qemu-x86_64:
-  extends: .build-wic-image
+  extends: [.build-wic-image, .check-abi]
   variables:
     MACHINE: qemux86-64
     CI_ONIRO_BUILD_FLAVOUR: linux
@@ -129,7 +129,7 @@ linux-seco-imx8mm-c61-4gb-extra-clang:
   extends: [.linux-seco-imx8mm-c61-4gb-extra, .toolchain-clang, .broken]
 
 .linux-raspberrypi4-64:
-  extends: .build-wic-image
+  extends: [.build-wic-image, .check-abi]
   variables:
     MACHINE: raspberrypi4-64
     CI_ONIRO_BUILD_FLAVOUR: linux
diff --git a/manifests/ci.xml b/manifests/ci.xml
new file mode 100644
index 00000000..c8b059b0
--- /dev/null
+++ b/manifests/ci.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+SPDX-License-Identifier: Apache-2.0
+SPDX-FileCopyrightText: Huawei Inc.
+-->
+<manifest>
+  <include name="manifests/default.xml" />
+  <project name="oniro-core/meta-binaryaudit" remote="eclipse" revision="oniro/kirkstone" path="meta-binaryaudit" />
+</manifest>
-- 
GitLab