#!/usr/bin/env bash
#
# Copyright (c) 2023 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# Usage:
#  ./scripts/helpers/docker-version-roll.sh -v=X --reason="INSERT_REASON_HERE"
#

CURRENT_VERSION=$(sed 's/ .*//' ./integrations/docker/images/base/chip-build/version)
NEXT_VERSION=$((CURRENT_VERSION + 1))
ROLL_REASON=""
ALL_ARGS=""

for i in "$@"; do
    case $i in
        -v=* | --version=*)
            NEXT_VERSION="${i#*=}"
            ;;
        -r=* | --reason=*)
            ROLL_REASON="${i#*=}"
            ;;
        *)
            ALL_ARGS="$ALL_ARGS ${i#*=}"
            ;;
    esac
done

if [[ ! $ROLL_REASON ]]; then
    echo 'Roll reason required, please add --reason="Why I am rolling"'
    exit 1
fi

echo "Current version: $CURRENT_VERSION"
echo "Next version: $NEXT_VERSION"
echo "Reason: $ROLL_REASON"
echo ""

echo "Rolling workflows"
sed -r -i "s|image: ghcr\.io/project-chip/(.*):[0-9]+|image: ghcr.io/project-chip/\1:$NEXT_VERSION|" .github/workflows/*.yaml
sed -r -i "s|image: ghcr\.io/project-chip/(.*):[0-9]+|image: ghcr.io/project-chip/\1:$NEXT_VERSION|" .github/workflows/*.yml

echo "Rolling VSCode container"
sed -r -i "s|matter-dev-environment:local --version [0-9,a-z,A-Z,-]*|matter-dev-environment:local --version $NEXT_VERSION|" .devcontainer/devcontainer.json

echo "Rolling docker images"
find . -iname Dockerfile -not -path "./third_party/*" -exec \
    sed -r -i "s|ARG VERSION=[0-9,a-z,A-Z,-]*|ARG VERSION=$NEXT_VERSION|" {} +

echo "Rolling main docker version"
echo "$NEXT_VERSION : $ROLL_REASON" >./integrations/docker/images/base/chip-build/version

echo "Rolling README.md files"
find . -iname readme.md -not -path "./third_party/*" -exec \
    sed -r -i "s|ghcr\.io/project-chip/(.*):[0-9]+|ghcr.io/project-chip/\1:$NEXT_VERSION|" {} +

echo ""
echo "Done"
