#!/usr/bin/env bash

#   Copyright The containerd 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.

set -eu -o pipefail

# Rocky Linux doesn't have growpart by default.
(growpart -h > /dev/null) || dnf -y install cloud-utils-growpart

df_line=$(df -T / | grep '^/dev/')
if [[ "$df_line" =~ ^/dev/([a-z]+)([0-9+]) ]]; then
    dev="${BASH_REMATCH[1]}"
    part="${BASH_REMATCH[2]}"
    # growpart prints "NOCHANGE" when the partition is already at max size
    out=$(growpart "/dev/$dev" "$part" 2>&1) || grep -q "^NOCHANGE:" <<< "$out"

    fstype=$(echo "$df_line" | awk '{print $2}')
    if [[ "$fstype" = 'btrfs' ]]; then
        btrfs filesystem resize max /
    elif [[ "$fstype" = 'xfs' ]]; then
        xfs_growfs -d /
    else
        echo "Unknown filesystem: $df_line"
        exit 1
    fi
elif [[ "$df_line" =~ ^/dev/mapper/ ]]; then
    echo "TODO: support device mapper: $df_line"
else
    echo "Failed to parse: $df_line"
    exit 1
fi
