#!/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.1.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 ! hash gen_config 2>/dev/null; then
  echo "gen_config is not on your PATH."
  echo "Run the following before continuing:"
  echo "echo 'export PATH=\$PATH:~/trunk/src/config/bin' >> ~/.bashrc && source ~/.bashrc"
  exit 1
fi

if [[ "$#" -lt 2 ]]; then
  echo "Usage: ${SCRIPT} base_name variant_name [bug_number]"
  echo "e.g. ${SCRIPT} puff wyvern b:158269582"
  echo "Updates the config.star to add a default _FW_BUILD_CONFIG"
  exit 1
fi

# shellcheck source=check_standalone.sh
# shellcheck disable=SC1091
source "${BASH_SOURCE%/*}/check_standalone.sh"

# This is the name of the base board.
# ${var,,} converts to all lowercase.
BASE="${1,,}"
# This is the name of the variant that we are enabling _FW_BUILD_CONFIG for.
VARIANT="${2,,}"
# We need all uppercase version, too, so ${var^^}
VARIANT_UPPER="${VARIANT^^}"

# Assign BUG= text, or "None" if that parameter wasn't specified.
BUG="${3:-None}"

# The config.star file will be located here
cd "${HOME}/trunk/src/project/${BASE}/${VARIANT}"

# 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. `git restore --staged` will remove files added to a commit,
  # and `git restore` will restore the file to its unmodified state. Then
  # `repo abandon` the new branch.
  git restore --staged config.star
  git restore config.star
  git restore --staged generated/config.jsonproto
  git restore generated/config.jsonproto
  git restore --staged sw_build_config/platform/chromeos-config/generated/project-config.json
  git restore sw_build_config/platform/chromeos-config/generated/project-config.json
  repo abandon "$1" .
}
trap 'cleanup "${BRANCH}"' ERR

# Change the _FW_BUILD_CONFIG from None to _${VARIANT_UPPER}.
sed -i -e "s/_FW_BUILD_CONFIG = None/_FW_BUILD_CONFIG = program.firmware_build_config(_${VARIANT_UPPER})/" config.star

# Regenerate the config.
./config.star

# Add modified files.
git add config.star
git add generated/config.jsonproto
git add sw_build_config/platform/chromeos-config/generated/project-config.json

# Now commit the files.
git commit -m "${VARIANT}: enable default firmware build

Add a default _FW_BUILD_CONFIG.

(Auto-Generated by ${SCRIPT} version ${VERSION}).

BUG=${BUG}
TEST=Verify the ${VARIANT} firmware builds"

check_standalone "$(pwd)" "${BRANCH}"
