From 5762a54c150e5848b2262dba53df1a335af42ae9 Mon Sep 17 00:00:00 2001
From: Tim Jaacks <tim.jaacks@seco.com>
Date: Tue, 25 Jul 2023 20:59:25 +0200
Subject: [PATCH] Yocto build: unify image and SDK package jobs

Image and SDK package jobs call the same package script just with
different arguments. Instead of having two job classes `package_release`
and `package_sdk` for these two tasks, merge them into the base class
`package` and make the differences configurable via a variable
`PACKAGE_TYPE`.
---
 build-common.yml              | 40 ++++++++++++-----------------------
 build-jobs-ci-test.yml.jinja2 |  6 ++++--
 build-jobs-yocto.yml.jinja2   |  9 +++++---
 3 files changed, 23 insertions(+), 32 deletions(-)

diff --git a/build-common.yml b/build-common.yml
index a230816e..53bef858 100644
--- a/build-common.yml
+++ b/build-common.yml
@@ -179,6 +179,9 @@ workflow:
     # Using misc runner because it runs on the same machine as the build runner. This
     # is the only way of being able to use the cache between build and package jobs.
     - misc
+  rules:
+    - if: $PACKAGE_TYPE == "image"
+    - if: $PACKAGE_TYPE == "sdk"
   artifacts:
     paths:
       - release/**/**/*
@@ -188,47 +191,30 @@ workflow:
   before_script:
     # We do this manually since we do not use GitLab's default artifact downloader
     - source build.env
-
-.pull_build_cache: &pull_build_cache
-  key: ${CI_PIPELINE_ID}-${ASSOCIATED_BUILD_JOB}
-  policy: pull
-
-.push_package_cache: &push_package_cache
-  key: ${CI_PIPELINE_ID}-${CI_JOB_NAME}
-  policy: push
-  paths:
-    - release
-    - package.env
-
-.package_release:
-  extends:
-    - .package
   script:
     # BUILD_PATH_* variables are available via build.env from build job
+    - if [[ "${PACKAGE_TYPE}" == "image" ]]; then
     - .gitlab-ci/scripts/package_release.py
         --images-dir="${BUILD_PATH_IMAGE}"
         --licenses-dir="${BUILD_PATH_LICENSE}"
         --doc-dir=.
         --output-dir=release
         --release-suffix="${RELEASE_SUFFIX}"
-  cache:
-    - <<: *pull_build_cache
-      paths: *artifacts_paths
-    - *push_package_cache
-
-.package_sdk:
-  extends:
-    - .package
-  script:
-    # BUILD_PATH_* variables are available via build.env from build job
+    - elif [[ "${PACKAGE_TYPE}" == "sdk" ]]; then
     - .gitlab-ci/scripts/package_release.py
         --sdk-dir="${BUILD_PATH_SDK}"
         --output-dir=release
         --release-suffix="${RELEASE_SUFFIX}"
+    - fi
   cache:
-    - <<: *pull_build_cache
+    - key: ${CI_PIPELINE_ID}-${ASSOCIATED_BUILD_JOB}
+      policy: pull
       paths: *artifacts_paths
-    - *push_package_cache
+    - key: ${CI_PIPELINE_ID}-${CI_JOB_NAME}
+      policy: push
+      paths:
+        - release
+        - package.env
 
 # --------------------------------------------------------------------------------------
 # Stage: deploy
diff --git a/build-jobs-ci-test.yml.jinja2 b/build-jobs-ci-test.yml.jinja2
index 955eecd4..ead3aff5 100644
--- a/build-jobs-ci-test.yml.jinja2
+++ b/build-jobs-ci-test.yml.jinja2
@@ -185,16 +185,18 @@ smoketest:seco-mx6:
 # Stage: Package
 # --------------------------------------------------------------------------------------
 package-seco-mx6:
-  extends: .package_release
+  extends: .package
   variables:
+    PACKAGE_TYPE: image
     ASSOCIATED_BUILD_JOB: simulate-build-seco-mx6
   needs:
     - job: simulate-build-seco-mx6
       artifacts: false
 
 package-sdk-seco-mx6:
-  extends: .package_sdk
+  extends: .package
   variables:
+    PACKAGE_TYPE: sdk
     ASSOCIATED_BUILD_JOB: simulate-buildsdk-seco-mx6
   needs:
     - job: simulate-buildsdk-seco-mx6
diff --git a/build-jobs-yocto.yml.jinja2 b/build-jobs-yocto.yml.jinja2
index f9946ddc..f156dc62 100644
--- a/build-jobs-yocto.yml.jinja2
+++ b/build-jobs-yocto.yml.jinja2
@@ -143,8 +143,9 @@ platformtest:{{ machine }}:
 # --------------------------------------------------------------------------------------
 {% if CI_PARAM_IMAGE %}
 package-{{ machine }}:
-  extends: .package_release
+  extends: .package
   variables:
+    PACKAGE_TYPE: image
     ASSOCIATED_BUILD_JOB: build-{{ machine }}
   needs:
     - job: build-{{ machine }}
@@ -152,8 +153,9 @@ package-{{ machine }}:
     - job: changelog
 
 packagesdk-{{ machine }}:
-  extends: .package_sdk
+  extends: .package
   variables:
+    PACKAGE_TYPE: sdk
     ASSOCIATED_BUILD_JOB: buildsdk-{{ machine }}
   needs:
     - job: buildsdk-{{ machine }}
@@ -162,8 +164,9 @@ packagesdk-{{ machine }}:
 
 {% if CI_PARAM_IMAGE_FNG %}
 package-{{ machine }}-fngsystem:
-  extends: .package_release
+  extends: .package
   variables:
+    PACKAGE_TYPE: image
     ASSOCIATED_BUILD_JOB: build-{{ machine }}-fngsystem
   needs:
     - job: build-{{ machine }}-fngsystem
-- 
GitLab