blob: ea8c771ebefbe0a8c02233b291ef484315bc7eed [file] [log] [blame]
#!/bin/bash
# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
VERSION="1.6.0"
SCRIPT=$(basename -- "${0}")
set -e
export LC_ALL=C
if [[ ! -e /etc/cros_chroot_version ]]; then
echo "This script must be run inside the chroot."
exit 1
fi
if [[ "$#" -lt 2 ]]; then
echo "Usage: ${SCRIPT} base_name variant_name [bug_number]"
echo "e.g. ${SCRIPT} hatch kohaku b:140261109"
echo "Adds a new device and unprovisioned SKU to the YAML file for"
echo "the variant being created. Revbump the ebuild."
exit 1
fi
# shellcheck source=revbump_ebuild.sh
# shellcheck disable=SC1091
source "${BASH_SOURCE%/*}/revbump_ebuild.sh"
# shellcheck source=check_standalone.sh
# shellcheck disable=SC1091
source "${BASH_SOURCE%/*}/check_standalone.sh"
check_standalone
# shellcheck source=check_pending_changes.sh
# shellcheck disable=SC1091
source "${BASH_SOURCE%/*}/check_pending_changes.sh"
# This is the name of the base board that we're using to make the variant.
# ${var,,} converts to all lowercase.
BASE="${1,,}"
# This is the name of the variant that is being cloned.
VARIANT="${2,,}"
# ${var^} capitalizes first letter only.
VARIANT_CAPITALIZED="${VARIANT^}"
# We need all uppercase version, too, so ${var^^}
BASE_UPPER="${BASE^^}"
# Assign BUG= text, or "None" if that parameter wasn't specified.
BUG=${3:-None}
YAML=model.yaml
cd "${HOME}/trunk/src/overlays/overlay-${BASE}/chromeos-base/chromeos-config-bsp-${BASE}/files"
if [[ ! -e "${YAML}" ]]; then
echo "${YAML} does not exist."
exit 1
fi
# Make sure the variant doesn't already exist in the yaml file.
if grep -qi "${VARIANT}" "${YAML}" ; then
echo "${VARIANT} already appears to exist in ${YAML}"
echo "Have you already created this variant?"
exit 1
fi
# If there are pending changes, exit the script (unless overridden)
check_pending_changes "$(pwd)"
# Start a branch. Use YMD timestamp to avoid collisions.
DATE=$(date +%Y%m%d)
BRANCH="create_${VARIANT}_${DATE}"
repo start "${BRANCH}" . "${NEW_VARIANT_WIP:+--head}"
# ${parameter:+word}" substitutes "word" if $parameter is set to a non-null
# value, or substitutes null if $parameter is null or unset.
cleanup() {
# If there is an error after the `repo start`, then restore modified files
# to clean up and `repo abandon` the new branch.
cd "${HOME}/trunk/src/overlays/overlay-${BASE}/chromeos-base/chromeos-config-bsp-${BASE}"
git restore --staged "*.ebuild"
git restore "*.ebuild"
if [[ ! -z "${NEWEBUILD}" ]] ; then
rm -f "${NEWEBUILD}"
fi
cd files
git restore --staged "${YAML}"
git restore "${YAML}"
repo abandon "${BRANCH}" .
}
trap 'cleanup' ERR
# ebuild is located 1 directory up.
pushd ..
revbump_ebuild
popd
# Append a new device-name to the end of the model.yaml file.
cat <<EOF >>"${YAML}"
- \$device-name: "unprovisioned_${VARIANT}"
\$fw-name: "${VARIANT_CAPITALIZED}"
products:
- \$key-id: "${BASE_UPPER}"
skus:
- \$sku-id: 255
config: *base_config
EOF
git add "${YAML}"
# Building the config.json and other files from the yaml requires that the
# changes have been made to both the public and private yaml files, which
# we can't guarantee here, so we will not automate the steps in the TEST=
# part of the commit message below. The high-level program which calls this
# script and others will be responsible for testing the emerge command and
# verifying that the new variant shows up in the output.
# Now commit the files.
git commit -m "model.yaml: Add ${VARIANT} variant
Add a new section to the yaml file to define the ${VARIANT}
variant of the ${BASE} baseboard.
(Auto-Generated by ${SCRIPT} version ${VERSION}).
BUG=${BUG}
TEST=emerge-${BASE} chromeos-config-bsp-${BASE}
chromeos-config-bsp-${BASE}-private chromeos-config-bsp chromeos-config
Check /build/${BASE}/usr/share/chromeos-config for '${VARIANT}' in
config.json, yaml/config.c, and yaml/*.yaml"