blob: 77dc4d3190eba2797ca347582c4034830edb18f5 [file] [log] [blame]
# 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