| # Copyright 2023 The ChromiumOS Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| # @MAINTAINER: |
| # Chromium OS System Services Team |
| # @AUTHOR |
| # The ChromiumOS Authors <chromium-os-dev@chromium.org> |
| # @BUGREPORTS: |
| # Please report bugs via http://crbug.com/new |
| # @BLURB: Helper eclass for packaging prebuilt DLCs. |
| # @DESCRIPTION: |
| # Handles baking the prebuilt DLC metadata files into the image. |
| |
| if [[ -z "${_ECLASS_DLC_PREBUILT}" ]]; then |
| _ECLASS_DLC_PREBUILT="1" |
| |
| inherit cros-constants dlc unpacker |
| |
| BDEPEND="app-misc/jq" |
| |
| # Check for EAPI 7+. |
| case "${EAPI:-0}" in |
| [0123456]) die "unsupported EAPI (${EAPI}) in eclass (${ECLASS})" ;; |
| esac |
| |
| # @ECLASS-VARIABLE: DLC_MIRROR_BUCKET |
| # @DESCRIPTION: |
| # The default gs://<BUCKET> to which DLC meta(data) should be uploaded/pulled from. |
| : "${DLC_MIRROR_BUCKET:=gs://chromeos-localmirror}" |
| |
| # @ECLASS-VARIABLE: DLC_BUCKET_IMAGE_DIR |
| # @INTERNAL |
| # @DESCRIPTION: |
| # The default <BUCKET> image dir to which DLC meta(data) are nested within. |
| DLC_BUCKET_IMAGE_DIR="dlc-images" |
| |
| # @ECLASS-VARIABLE: DLC_SRC_URI_PREFIX |
| # @DEFAULT_UNSET |
| # @DESCRIPTION: |
| # The DLC SRC URI Prefix to pull from, DLC developers can override this. |
| : "${DLC_SRC_URI_PREFIX:=${DLC_MIRROR_BUCKET}/${DLC_BUCKET_IMAGE_DIR}/${DLC_ID}/${DLC_PACKAGE}/${PV}}" |
| |
| # @ECLASS-VARIABLE: DLC_META_ARTIFACT |
| # @DESCRIPTION: |
| # The DLC meta(data) artifact file generated by builders. |
| DLC_META_ARTIFACT="meta.tar.zst" |
| |
| # @ECLASS-VARIABLE: DLC_META_ARTIFACT_LOCAL |
| # @DESCRIPTION: |
| # The DLC meta(data) artifact file generated by builders local naming. |
| # Local naming should take revisions into consideration in order to avoid |
| # portage caching collisions, if your package doesn't please override this |
| # variable to suit your usage. |
| DLC_META_ARTIFACT_LOCAL="${DLC_META_ARTIFACT}-${DLC_ID}-${DLC_PACKAGE}-${PV}" |
| |
| # @ECLASS-VARIABLE: DLC_META_ARTIFACT_BUILD_DIR |
| # @INTERNAL |
| # @DESCRIPTION: |
| # shellcheck disable=SC2154 # Usage of DLC eclass variables. |
| DLC_META_ARTIFACT_BUILD_DIR="${DLC_TMP_ROOT}/dlc-meta" |
| |
| # @ECLASS-VARIABLE: DLC_IMAGELOADER_JSON |
| # @INTERNAL |
| # @DESCRIPTION: |
| # The DLC imageloader/dlcservice metadata json. |
| DLC_IMAGELOADER_JSON="imageloader.json" |
| |
| # @ECLASS-VARIABLE: DLC_TABLE |
| # @INTERNAL |
| # @DESCRIPTION: |
| # The DLC dm-verity table filename. |
| DLC_TABLE="table" |
| |
| # @ECLASS-VARIABLE: DLC_SRC_URI_PREFIX_FILE |
| # @INTERNAL |
| # @DESCRIPTION: |
| # The DLC URI file for build time installations (store). |
| DLC_SRC_URI_PREFIX_FILE="uri-prefix" |
| |
| # @ECLASS-VARIABLE: DLC_ARTIFACTS_META_KEY |
| # @INTERNAL |
| # @DESCRIPTION: |
| # The DLC artifacts meta key for imageloader. |
| DLC_ARTIFACTS_META_KEY="artifacts-meta" |
| |
| # @ECLASS-VARIABLE: DLC_ARTIFACTS_META_URI_KEY |
| # @INTERNAL |
| # @DESCRIPTION: |
| # The DLC artifacts meta URI key within artifact-meta value dict. |
| DLC_ARTIFACTS_META_URI_KEY="uri" |
| |
| # @ECLASS-VARIABLE: DLC_GE_PREFIX |
| # @INTERNAL |
| # @DESCRIPTION: |
| # The GoldenEye release prefix. |
| DLC_GE_PREFIX="dlc" |
| |
| # @ECLASS-VARIABLE: DLC_PROD_PREFIX |
| # @INTERNAL |
| # @DESCRIPTION: |
| # The production release prefix. |
| DLC_PROD_PREFIX="prod-dlc-images" |
| |
| # @ECLASS-VARIABLE: DLC_ARTIFACTS |
| # @INTERNAL |
| # @DESCRIPTION: |
| # Array of the extracted DLC artifacts. |
| DLC_ARTIFACTS=( |
| "${DLC_TABLE}" |
| ) |
| |
| # @FUNCTION: dlc_unpack |
| # @USAGE: <path to artifacts> |
| # @DESCRIPTION: |
| # Unpacks DLC prebuilt artifacts. |
| dlc-prebuilt_src_unpack() { |
| unpacker "${DISTDIR}/${DLC_META_ARTIFACT_LOCAL}" |
| |
| [[ "${DLC_SRC_URI_PREFIX}" =~ ^"${DLC_MIRROR_BUCKET}".* ]] || die "Source URI prefix must start with DLC_MIRROR_BUCKET." |
| } |
| |
| # @FUNCTION: dlc-prebuilt_src_install |
| # @DESCRIPTION: |
| # Installs DLC prebuilt artifacts. |
| dlc-prebuilt_src_install() { |
| insinto "/${DLC_META_ARTIFACT_BUILD_DIR}/${DLC_ID}/${DLC_PACKAGE}" |
| doins -r "${DLC_ARTIFACTS[@]}" |
| |
| # Add the artifacts meta of the DLC. |
| local uri_prefix="${DLC_GE_PREFIX}/${DLC_PROD_PREFIX}" |
| local uri_suffix="${DLC_SRC_URI_PREFIX#"${DLC_MIRROR_BUCKET}"}" |
| local uri="${uri_prefix}${uri_suffix}" |
| local jq_add=". + { \"${DLC_ARTIFACTS_META_KEY}\": { \"${DLC_ARTIFACTS_META_URI_KEY}\": \"${uri}\" } }" |
| jq "${jq_add}" "${DLC_IMAGELOADER_JSON}" | newins - "${DLC_IMAGELOADER_JSON}" |
| |
| echo -n "${DLC_SRC_URI_PREFIX}" | newins - "${DLC_SRC_URI_PREFIX_FILE}" |
| } |
| |
| EXPORT_FUNCTIONS src_install src_unpack |
| |
| fi |